1This is doc/gcc.info, produced by makeinfo version 4.12 from 2/space/rguenther/gcc-5.4.0/gcc-5.4.0/gcc/doc/gcc.texi. 3 4Copyright (C) 1988-2015 Free Software Foundation, Inc. 5 6 Permission is granted to copy, distribute and/or modify this document 7under the terms of the GNU Free Documentation License, Version 1.3 or 8any later version published by the Free Software Foundation; with the 9Invariant Sections being "Funding Free Software", the Front-Cover Texts 10being (a) (see below), and with the Back-Cover Texts being (b) (see 11below). A copy of the license is included in the section entitled "GNU 12Free Documentation License". 13 14 (a) The FSF's Front-Cover Text is: 15 16 A GNU Manual 17 18 (b) The FSF's Back-Cover Text is: 19 20 You have freedom to copy and modify this GNU Manual, like GNU 21software. Copies published by the Free Software Foundation raise 22funds for GNU development. 23 24INFO-DIR-SECTION Software development 25START-INFO-DIR-ENTRY 26* gcc: (gcc). The GNU Compiler Collection. 27* g++: (gcc). The GNU C++ compiler. 28* gcov: (gcc) Gcov. `gcov'--a test coverage program. 29* gcov-tool: (gcc) Gcov-tool. `gcov-tool'--an offline gcda profile processing program. 30END-INFO-DIR-ENTRY 31 This file documents the use of the GNU compilers. 32 33 Copyright (C) 1988-2015 Free Software Foundation, Inc. 34 35 Permission is granted to copy, distribute and/or modify this document 36under the terms of the GNU Free Documentation License, Version 1.3 or 37any later version published by the Free Software Foundation; with the 38Invariant Sections being "Funding Free Software", the Front-Cover Texts 39being (a) (see below), and with the Back-Cover Texts being (b) (see 40below). A copy of the license is included in the section entitled "GNU 41Free Documentation License". 42 43 (a) The FSF's Front-Cover Text is: 44 45 A GNU Manual 46 47 (b) The FSF's Back-Cover Text is: 48 49 You have freedom to copy and modify this GNU Manual, like GNU 50software. Copies published by the Free Software Foundation raise 51funds for GNU development. 52 53 54 55File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) 56 57Introduction 58************ 59 60This manual documents how to use the GNU compilers, as well as their 61features and incompatibilities, and how to report bugs. It corresponds 62to the compilers (GCC) version 5.4.0. The internals of the GNU 63compilers, including how to port them to new targets and some 64information about how to write front ends for new languages, are 65documented in a separate manual. *Note Introduction: (gccint)Top. 66 67* Menu: 68 69* G++ and GCC:: You can compile C or C++ programs. 70* Standards:: Language standards supported by GCC. 71* Invoking GCC:: Command options supported by `gcc'. 72* C Implementation:: How GCC implements the ISO C specification. 73* C++ Implementation:: How GCC implements the ISO C++ specification. 74* C Extensions:: GNU extensions to the C language family. 75* C++ Extensions:: GNU extensions to the C++ language. 76* Objective-C:: GNU Objective-C runtime features. 77* Compatibility:: Binary Compatibility 78* Gcov:: `gcov'---a test coverage program. 79* Gcov-tool:: `gcov-tool'---an offline gcda profile processing program. 80* Trouble:: If you have trouble using GCC. 81* Bugs:: How, why and where to report bugs. 82* Service:: How To Get Help with GCC 83* Contributing:: How to contribute to testing and developing GCC. 84 85* Funding:: How to help assure funding for free software. 86* GNU Project:: The GNU Project and GNU/Linux. 87 88* Copying:: GNU General Public License says 89 how you can copy and share GCC. 90* GNU Free Documentation License:: How you can copy and share this manual. 91* Contributors:: People who have contributed to GCC. 92 93* Option Index:: Index to command line options. 94* Keyword Index:: Index of concepts and symbol names. 95 96 97File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top 98 991 Programming Languages Supported by GCC 100**************************************** 101 102GCC stands for "GNU Compiler Collection". GCC is an integrated 103distribution of compilers for several major programming languages. 104These languages currently include C, C++, Objective-C, Objective-C++, 105Java, Fortran, Ada, and Go. 106 107 The abbreviation "GCC" has multiple meanings in common use. The 108current official meaning is "GNU Compiler Collection", which refers 109generically to the complete suite of tools. The name historically stood 110for "GNU C Compiler", and this usage is still common when the emphasis 111is on compiling C programs. Finally, the name is also used when 112speaking of the "language-independent" component of GCC: code shared 113among the compilers for all supported languages. 114 115 The language-independent component of GCC includes the majority of the 116optimizers, as well as the "back ends" that generate machine code for 117various processors. 118 119 The part of a compiler that is specific to a particular language is 120called the "front end". In addition to the front ends that are 121integrated components of GCC, there are several other front ends that 122are maintained separately. These support languages such as Pascal, 123Mercury, and COBOL. To use these, they must be built together with GCC 124proper. 125 126 Most of the compilers for languages other than C have their own names. 127The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we 128talk about compiling one of those languages, we might refer to that 129compiler by its own name, or as GCC. Either is correct. 130 131 Historically, compilers for many languages, including C++ and Fortran, 132have been implemented as "preprocessors" which emit another high level 133language such as C. None of the compilers included in GCC are 134implemented this way; they all generate machine code directly. This 135sort of preprocessor should not be confused with the "C preprocessor", 136which is an integral feature of the C, C++, Objective-C and 137Objective-C++ languages. 138 139 140File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top 141 1422 Language Standards Supported by GCC 143************************************* 144 145For each language compiled by GCC for which there is a standard, GCC 146attempts to follow one or more versions of that standard, possibly with 147some exceptions, and possibly with some extensions. 148 1492.1 C Language 150============== 151 152GCC supports three versions of the C standard, although support for the 153most recent version is not yet complete. 154 155 The original ANSI C standard (X3.159-1989) was ratified in 1989 and 156published in 1990. This standard was ratified as an ISO standard 157(ISO/IEC 9899:1990) later in 1990. There were no technical differences 158between these publications, although the sections of the ANSI standard 159were renumbered and became clauses in the ISO standard. This standard, 160in both its forms, is commonly known as "C89", or occasionally as 161"C90", from the dates of ratification. The ANSI standard, but not the 162ISO standard, also came with a Rationale document. To select this 163standard in GCC, use one of the options `-ansi', `-std=c90' or 164`-std=iso9899:1990'; to obtain all the diagnostics required by the 165standard, you should also specify `-pedantic' (or `-pedantic-errors' if 166you want them to be errors rather than warnings). *Note Options 167Controlling C Dialect: C Dialect Options. 168 169 Errors in the 1990 ISO C standard were corrected in two Technical 170Corrigenda published in 1994 and 1996. GCC does not support the 171uncorrected version. 172 173 An amendment to the 1990 standard was published in 1995. This 174amendment added digraphs and `__STDC_VERSION__' to the language, but 175otherwise concerned the library. This amendment is commonly known as 176"AMD1"; the amended standard is sometimes known as "C94" or "C95". To 177select this standard in GCC, use the option `-std=iso9899:199409' 178(with, as for other standard versions, `-pedantic' to receive all 179required diagnostics). 180 181 A new edition of the ISO C standard was published in 1999 as ISO/IEC 1829899:1999, and is commonly known as "C99". GCC has substantially 183complete support for this standard version; see 184`http://gcc.gnu.org/c99status.html' for details. To select this 185standard, use `-std=c99' or `-std=iso9899:1999'. (While in 186development, drafts of this standard version were referred to as "C9X".) 187 188 Errors in the 1999 ISO C standard were corrected in three Technical 189Corrigenda published in 2001, 2004 and 2007. GCC does not support the 190uncorrected version. 191 192 A fourth version of the C standard, known as "C11", was published in 1932011 as ISO/IEC 9899:2011. GCC has substantially complete support for 194this standard, enabled with `-std=c11' or `-std=iso9899:2011'. (While 195in development, drafts of this standard version were referred to as 196"C1X".) 197 198 By default, GCC provides some extensions to the C language that on 199rare occasions conflict with the C standard. *Note Extensions to the C 200Language Family: C Extensions. Use of the `-std' options listed above 201will disable these extensions where they conflict with the C standard 202version selected. You may also select an extended version of the C 203language explicitly with `-std=gnu90' (for C90 with GNU extensions), 204`-std=gnu99' (for C99 with GNU extensions) or `-std=gnu11' (for C11 205with GNU extensions). The default, if no C language dialect options 206are given, is `-std=gnu11'. Some features that are part of the C99 207standard are accepted as extensions in C90 mode, and some features that 208are part of the C11 standard are accepted as extensions in C90 and C99 209modes. 210 211 The ISO C standard defines (in clause 4) two classes of conforming 212implementation. A "conforming hosted implementation" supports the 213whole standard including all the library facilities; a "conforming 214freestanding implementation" is only required to provide certain 215library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>', 216and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; since C99, 217also those in `<stdbool.h>' and `<stdint.h>'; and since C11, also those 218in `<stdalign.h>' and `<stdnoreturn.h>'. In addition, complex types, 219added in C99, are not required for freestanding implementations. The 220standard also defines two environments for programs, a "freestanding 221environment", required of all implementations and which may not have 222library facilities beyond those required of freestanding 223implementations, where the handling of program startup and termination 224are implementation-defined, and a "hosted environment", which is not 225required, in which all the library facilities are provided and startup 226is through a function `int main (void)' or `int main (int, char *[])'. 227An OS kernel would be a freestanding environment; a program using the 228facilities of an operating system would normally be in a hosted 229implementation. 230 231 GCC aims towards being usable as a conforming freestanding 232implementation, or as the compiler for a conforming hosted 233implementation. By default, it will act as the compiler for a hosted 234implementation, defining `__STDC_HOSTED__' as `1' and presuming that 235when the names of ISO C functions are used, they have the semantics 236defined in the standard. To make it act as a conforming freestanding 237implementation for a freestanding environment, use the option 238`-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not 239make assumptions about the meanings of function names from the standard 240library, with exceptions noted below. To build an OS kernel, you may 241well still need to make your own arrangements for linking and startup. 242*Note Options Controlling C Dialect: C Dialect Options. 243 244 GCC does not provide the library facilities required only of hosted 245implementations, nor yet all the facilities required by C99 of 246freestanding implementations on all platforms; to use the facilities of 247a hosted environment, you will need to find them elsewhere (for 248example, in the GNU C library). *Note Standard Libraries: Standard 249Libraries. 250 251 Most of the compiler support routines used by GCC are present in 252`libgcc', but there are a few exceptions. GCC requires the 253freestanding environment provide `memcpy', `memmove', `memset' and 254`memcmp'. Finally, if `__builtin_trap' is used, and the target does 255not implement the `trap' pattern, then GCC will emit a call to `abort'. 256 257 For references to Technical Corrigenda, Rationale documents and 258information concerning the history of C that is available online, see 259`http://gcc.gnu.org/readings.html' 260 2612.2 C++ Language 262================ 263 264GCC supports the original ISO C++ standard (1998) and contains 265experimental support for the second ISO C++ standard (2011). 266 267 The original ISO C++ standard was published as the ISO standard 268(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in 2692003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and 270C++03, respectively. GCC implements the majority of C++98 (`export' is 271a notable exception) and most of the changes in C++03. To select this 272standard in GCC, use one of the options `-ansi', `-std=c++98', or 273`-std=c++03'; to obtain all the diagnostics required by the standard, 274you should also specify `-pedantic' (or `-pedantic-errors' if you want 275them to be errors rather than warnings). 276 277 A revised ISO C++ standard was published in 2011 as ISO/IEC 27814882:2011, and is referred to as C++11; before its publication it was 279commonly referred to as C++0x. C++11 contains several changes to the 280C++ language, most of which have been implemented in an experimental 281C++11 mode in GCC. For information regarding the C++11 features 282available in the experimental C++11 mode, see 283`http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in 284GCC, use the option `-std=c++11'; to obtain all the diagnostics 285required by the standard, you should also specify `-pedantic' (or 286`-pedantic-errors' if you want them to be errors rather than warnings). 287 288 More information about the C++ standards is available on the ISO C++ 289committee's web site at `http://www.open-std.org/jtc1/sc22/wg21/'. 290 291 By default, GCC provides some extensions to the C++ language; *Note 292Options Controlling C++ Dialect: C++ Dialect Options. Use of the 293`-std' option listed above will disable these extensions. You may also 294select an extended version of the C++ language explicitly with 295`-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++11' (for 296C++11 with GNU extensions). The default, if no C++ language dialect 297options are given, is `-std=gnu++98'. 298 2992.3 Objective-C and Objective-C++ Languages 300=========================================== 301 302GCC supports "traditional" Objective-C (also known as "Objective-C 3031.0") and contains support for the Objective-C exception and 304synchronization syntax. It has also support for a number of 305"Objective-C 2.0" language extensions, including properties, fast 306enumeration (only for Objective-C), method attributes and the @optional 307and @required keywords in protocols. GCC supports Objective-C++ and 308features available in Objective-C are also available in Objective-C++. 309 310 GCC by default uses the GNU Objective-C runtime library, which is part 311of GCC and is not the same as the Apple/NeXT Objective-C runtime 312library used on Apple systems. There are a number of differences 313documented in this manual. The options `-fgnu-runtime' and 314`-fnext-runtime' allow you to switch between producing output that 315works with the GNU Objective-C runtime library and output that works 316with the Apple/NeXT Objective-C runtime library. 317 318 There is no formal written standard for Objective-C or Objective-C++. 319The authoritative manual on traditional Objective-C (1.0) is 320"Object-Oriented Programming and the Objective-C Language", available 321at a number of web sites: 322 * `http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf' 323 is the original NeXTstep document; 324 325 * `http://objc.toodarkpark.net' is the same document in another 326 format; 327 328 * 329 `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/' 330 has an updated version but make sure you search for "Object 331 Oriented Programming and the Objective-C Programming Language 1.0", 332 not documentation on the newer "Objective-C 2.0" language 333 334 The Objective-C exception and synchronization syntax (that is, the 335keywords @try, @throw, @catch, @finally and @synchronized) is supported 336by GCC and is enabled with the option `-fobjc-exceptions'. The syntax 337is briefly documented in this manual and in the Objective-C 2.0 manuals 338from Apple. 339 340 The Objective-C 2.0 language extensions and features are automatically 341enabled; they include properties (via the @property, @synthesize and 342@dynamic keywords), fast enumeration (not available in Objective-C++), 343attributes for methods (such as deprecated, noreturn, sentinel, 344format), the unused attribute for method arguments, the @package 345keyword for instance variables and the @optional and @required keywords 346in protocols. You can disable all these Objective-C 2.0 language 347extensions with the option `-fobjc-std=objc1', which causes the 348compiler to recognize the same Objective-C language syntax recognized 349by GCC 4.0, and to produce an error if one of the new features is used. 350 351 GCC has currently no support for non-fragile instance variables. 352 353 The authoritative manual on Objective-C 2.0 is available from Apple: 354 * 355 `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/' 356 357 For more information concerning the history of Objective-C that is 358available online, see `http://gcc.gnu.org/readings.html' 359 3602.4 Go Language 361=============== 362 363As of the GCC 4.7.1 release, GCC supports the Go 1 language standard, 364described at `http://golang.org/doc/go1.html'. 365 3662.5 References for Other Languages 367================================== 368 369*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard 370conformance and compatibility of the Ada compiler. 371 372 *Note Standards: (gfortran)Standards, for details of standards 373supported by GNU Fortran. 374 375 *Note Compatibility with the Java Platform: (gcj)Compatibility, for 376details of compatibility between `gcj' and the Java Platform. 377 378 379File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top 380 3813 GCC Command Options 382********************* 383 384When you invoke GCC, it normally does preprocessing, compilation, 385assembly and linking. The "overall options" allow you to stop this 386process at an intermediate stage. For example, the `-c' option says 387not to run the linker. Then the output consists of object files output 388by the assembler. 389 390 Other options are passed on to one stage of processing. Some options 391control the preprocessor and others the compiler itself. Yet other 392options control the assembler and linker; most of these are not 393documented here, since you rarely need to use any of them. 394 395 Most of the command-line options that you can use with GCC are useful 396for C programs; when an option is only useful with another language 397(usually C++), the explanation says so explicitly. If the description 398for a particular option does not mention a source language, you can use 399that option with all supported languages. 400 401 *Note Compiling C++ Programs: Invoking G++, for a summary of special 402options for compiling C++ programs. 403 404 The `gcc' program accepts options and file names as operands. Many 405options have multi-letter names; therefore multiple single-letter 406options may _not_ be grouped: `-dv' is very different from `-d -v'. 407 408 You can mix options and other arguments. For the most part, the order 409you use doesn't matter. Order does matter when you use several options 410of the same kind; for example, if you specify `-L' more than once, the 411directories are searched in the order specified. Also, the placement 412of the `-l' option is significant. 413 414 Many options have long names starting with `-f' or with `-W'--for 415example, `-fmove-loop-invariants', `-Wformat' and so on. Most of these 416have both positive and negative forms; the negative form of `-ffoo' is 417`-fno-foo'. This manual documents only one of these two forms, 418whichever one is not the default. 419 420 *Note Option Index::, for an index to GCC's options. 421 422* Menu: 423 424* Option Summary:: Brief list of all options, without explanations. 425* Overall Options:: Controlling the kind of output: 426 an executable, object files, assembler files, 427 or preprocessed source. 428* Invoking G++:: Compiling C++ programs. 429* C Dialect Options:: Controlling the variant of C language compiled. 430* C++ Dialect Options:: Variations on C++. 431* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 432 and Objective-C++. 433* Language Independent Options:: Controlling how diagnostics should be 434 formatted. 435* Warning Options:: How picky should the compiler be? 436* Debugging Options:: Symbol tables, measurements, and debugging dumps. 437* Optimize Options:: How much optimization? 438* Preprocessor Options:: Controlling header files and macro definitions. 439 Also, getting dependency information for Make. 440* Assembler Options:: Passing options to the assembler. 441* Link Options:: Specifying libraries and so on. 442* Directory Options:: Where to find header files and libraries. 443 Where to find the compiler executable files. 444* Spec Files:: How to pass switches to sub-processes. 445* Target Options:: Running a cross-compiler, or an old version of GCC. 446* Submodel Options:: Specifying minor hardware or convention variations, 447 such as 68010 vs 68020. 448* Code Gen Options:: Specifying conventions for function calls, data layout 449 and register usage. 450* Environment Variables:: Env vars that affect GCC. 451* Precompiled Headers:: Compiling a header once, and using it many times. 452 453 454File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 455 4563.1 Option Summary 457================== 458 459Here is a summary of all the options, grouped by type. Explanations are 460in the following sections. 461 462_Overall Options_ 463 *Note Options Controlling the Kind of Output: Overall Options. 464 -c -S -E -o FILE -no-canonical-prefixes 465 -pipe -pass-exit-codes 466 -x LANGUAGE -v -### --help[=CLASS[,...]] --target-help 467 --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG 468 -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE 469 470_C Language Options_ 471 *Note Options Controlling C Dialect: C Dialect Options. 472 -ansi -std=STANDARD -fgnu89-inline 473 -aux-info FILENAME -fallow-parameterless-variadic-functions 474 -fno-asm -fno-builtin -fno-builtin-FUNCTION 475 -fhosted -ffreestanding -fopenacc -fopenmp -fopenmp-simd 476 -fms-extensions -fplan9-extensions -trigraphs -traditional -traditional-cpp 477 -fallow-single-precision -fcond-mismatch -flax-vector-conversions 478 -fsigned-bitfields -fsigned-char 479 -funsigned-bitfields -funsigned-char 480 481_C++ Language Options_ 482 *Note Options Controlling C++ Dialect: C++ Dialect Options. 483 -fabi-version=N -fno-access-control -fcheck-new 484 -fconstexpr-depth=N -ffriend-injection 485 -fno-elide-constructors 486 -fno-enforce-eh-specs 487 -ffor-scope -fno-for-scope -fno-gnu-keywords 488 -fno-implicit-templates 489 -fno-implicit-inline-templates 490 -fno-implement-inlines -fms-extensions 491 -fno-nonansi-builtins -fnothrow-opt -fno-operator-names 492 -fno-optional-diags -fpermissive 493 -fno-pretty-templates 494 -frepo -fno-rtti -fsized-deallocation 495 -fstats -ftemplate-backtrace-limit=N 496 -ftemplate-depth=N 497 -fno-threadsafe-statics -fuse-cxa-atexit 498 -fno-weak -nostdinc++ 499 -fvisibility-inlines-hidden 500 -fvtable-verify=[std|preinit|none] 501 -fvtv-counts -fvtv-debug 502 -fvisibility-ms-compat 503 -fext-numeric-literals 504 -Wabi=N -Wabi-tag -Wconversion-null -Wctor-dtor-privacy 505 -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing 506 -Wnoexcept -Wnon-virtual-dtor -Wreorder 507 -Weffc++ -Wstrict-null-sentinel 508 -Wno-non-template-friend -Wold-style-cast 509 -Woverloaded-virtual -Wno-pmf-conversions 510 -Wsign-promo 511 512_Objective-C and Objective-C++ Language Options_ 513 *Note Options Controlling Objective-C and Objective-C++ Dialects: 514 Objective-C and Objective-C++ Dialect Options. 515 -fconstant-string-class=CLASS-NAME 516 -fgnu-runtime -fnext-runtime 517 -fno-nil-receivers 518 -fobjc-abi-version=N 519 -fobjc-call-cxx-cdtors 520 -fobjc-direct-dispatch 521 -fobjc-exceptions 522 -fobjc-gc 523 -fobjc-nilcheck 524 -fobjc-std=objc1 525 -fno-local-ivars 526 -fivar-visibility=[public|protected|private|package] 527 -freplace-objc-classes 528 -fzero-link 529 -gen-decls 530 -Wassign-intercept 531 -Wno-protocol -Wselector 532 -Wstrict-selector-match 533 -Wundeclared-selector 534 535_Language Independent Options_ 536 *Note Options to Control Diagnostic Messages Formatting: Language 537 Independent Options. 538 -fmessage-length=N 539 -fdiagnostics-show-location=[once|every-line] 540 -fdiagnostics-color=[auto|never|always] 541 -fno-diagnostics-show-option -fno-diagnostics-show-caret 542 543_Warning Options_ 544 *Note Options to Request or Suppress Warnings: Warning Options. 545 -fsyntax-only -fmax-errors=N -Wpedantic 546 -pedantic-errors 547 -w -Wextra -Wall -Waddress -Waggregate-return 548 -Waggressive-loop-optimizations -Warray-bounds -Warray-bounds=N 549 -Wbool-compare 550 -Wno-attributes -Wno-builtin-macro-redefined 551 -Wc90-c99-compat -Wc99-c11-compat 552 -Wc++-compat -Wc++11-compat -Wc++14-compat -Wcast-align -Wcast-qual 553 -Wchar-subscripts -Wclobbered -Wcomment -Wconditionally-supported 554 -Wconversion -Wcoverage-mismatch -Wdate-time -Wdelete-incomplete -Wno-cpp 555 -Wno-deprecated -Wno-deprecated-declarations -Wno-designated-init 556 -Wdisabled-optimization 557 -Wno-discarded-qualifiers -Wno-discarded-array-qualifiers 558 -Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare 559 -Wno-endif-labels -Werror -Werror=* 560 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 561 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral 562 -Wformat-security -Wformat-signedness -Wformat-y2k 563 -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init 564 -Wignored-qualifiers -Wincompatible-pointer-types 565 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 566 -Winit-self -Winline -Wno-int-conversion 567 -Wno-int-to-pointer-cast -Wno-invalid-offsetof 568 -Winvalid-pch -Wlarger-than=LEN -Wunsafe-loop-optimizations 569 -Wlogical-op -Wlogical-not-parentheses -Wlong-long 570 -Wmain -Wmaybe-uninitialized -Wmemset-transposed-args -Wmissing-braces 571 -Wmissing-field-initializers -Wmissing-include-dirs 572 -Wno-multichar -Wnonnull -Wnormalized=[none|id|nfc|nfkc] 573 -Wodr -Wno-overflow -Wopenmp-simd 574 -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded 575 -Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format 576 -Wpointer-arith -Wno-pointer-to-int-cast 577 -Wredundant-decls -Wno-return-local-addr 578 -Wreturn-type -Wsequence-point -Wshadow -Wno-shadow-ivar 579 -Wshift-count-negative -Wshift-count-overflow 580 -Wsign-compare -Wsign-conversion -Wfloat-conversion 581 -Wsizeof-pointer-memaccess -Wsizeof-array-argument 582 -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing 583 -Wstrict-aliasing=n -Wstrict-overflow -Wstrict-overflow=N 584 -Wsuggest-attribute=[pure|const|noreturn|format] 585 -Wsuggest-final-types -Wsuggest-final-methods -Wsuggest-override 586 -Wmissing-format-attribute 587 -Wswitch -Wswitch-default -Wswitch-enum -Wswitch-bool -Wsync-nand 588 -Wsystem-headers -Wtrampolines -Wtrigraphs -Wtype-limits -Wundef 589 -Wuninitialized -Wunknown-pragmas -Wno-pragmas 590 -Wunsuffixed-float-constants -Wunused -Wunused-function 591 -Wunused-label -Wunused-local-typedefs -Wunused-parameter 592 -Wno-unused-result -Wunused-value -Wunused-variable 593 -Wunused-but-set-parameter -Wunused-but-set-variable 594 -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance 595 -Wvla -Wvolatile-register-var -Wwrite-strings 596 -Wzero-as-null-pointer-constant 597 598_C and Objective-C-only Warning Options_ 599 -Wbad-function-cast -Wmissing-declarations 600 -Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs 601 -Wold-style-declaration -Wold-style-definition 602 -Wstrict-prototypes -Wtraditional -Wtraditional-conversion 603 -Wdeclaration-after-statement -Wpointer-sign 604 605_Debugging Options_ 606 *Note Options for Debugging Your Program or GCC: Debugging Options. 607 -dLETTERS -dumpspecs -dumpmachine -dumpversion 608 -fsanitize=STYLE -fsanitize-recover -fsanitize-recover=STYLE 609 -fasan-shadow-offset=NUMBER -fsanitize-undefined-trap-on-error 610 -fcheck-pointer-bounds -fchkp-check-incomplete-type 611 -fchkp-first-field-has-own-bounds -fchkp-narrow-bounds 612 -fchkp-narrow-to-innermost-array -fchkp-optimize 613 -fchkp-use-fast-string-functions -fchkp-use-nochk-string-functions 614 -fchkp-use-static-bounds -fchkp-use-static-const-bounds 615 -fchkp-treat-zero-dynamic-size-as-infinite -fchkp-check-read 616 -fchkp-check-read -fchkp-check-write -fchkp-store-bounds 617 -fchkp-instrument-calls -fchkp-instrument-marked-only 618 -fchkp-use-wrappers 619 -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST 620 -fdisable-ipa-PASS_NAME 621 -fdisable-rtl-PASS_NAME 622 -fdisable-rtl-PASS-NAME=RANGE-LIST 623 -fdisable-tree-PASS_NAME 624 -fdisable-tree-PASS-NAME=RANGE-LIST 625 -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links 626 -fdump-translation-unit[-N] 627 -fdump-class-hierarchy[-N] 628 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline 629 -fdump-passes 630 -fdump-statistics 631 -fdump-tree-all 632 -fdump-tree-original[-N] 633 -fdump-tree-optimized[-N] 634 -fdump-tree-cfg -fdump-tree-alias 635 -fdump-tree-ch 636 -fdump-tree-ssa[-N] -fdump-tree-pre[-N] 637 -fdump-tree-ccp[-N] -fdump-tree-dce[-N] 638 -fdump-tree-gimple[-raw] 639 -fdump-tree-dom[-N] 640 -fdump-tree-dse[-N] 641 -fdump-tree-phiprop[-N] 642 -fdump-tree-phiopt[-N] 643 -fdump-tree-forwprop[-N] 644 -fdump-tree-copyrename[-N] 645 -fdump-tree-nrv -fdump-tree-vect 646 -fdump-tree-sink 647 -fdump-tree-sra[-N] 648 -fdump-tree-forwprop[-N] 649 -fdump-tree-fre[-N] 650 -fdump-tree-vtable-verify 651 -fdump-tree-vrp[-N] 652 -fdump-tree-storeccp[-N] 653 -fdump-final-insns=FILE 654 -fcompare-debug[=OPTS] -fcompare-debug-second 655 -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types 656 -feliminate-unused-debug-symbols -femit-class-debug-always 657 -fenable-KIND-PASS 658 -fenable-KIND-PASS=RANGE-LIST 659 -fdebug-types-section -fmem-report-wpa 660 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs 661 -fopt-info 662 -fopt-info-OPTIONS[=FILE] 663 -frandom-seed=STRING -fsched-verbose=N 664 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose 665 -fstack-usage -ftest-coverage -ftime-report -fvar-tracking 666 -fvar-tracking-assignments -fvar-tracking-assignments-toggle 667 -g -gLEVEL -gtoggle -gcoff -gdwarf-VERSION 668 -ggdb -grecord-gcc-switches -gno-record-gcc-switches 669 -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf 670 -gvms -gxcoff -gxcoff+ -gz[=TYPE] 671 -fno-merge-debug-strings -fno-dwarf2-cfi-asm 672 -fdebug-prefix-map=OLD=NEW 673 -femit-struct-debug-baseonly -femit-struct-debug-reduced 674 -femit-struct-debug-detailed[=SPEC-LIST] 675 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 676 -print-multi-directory -print-multi-lib -print-multi-os-directory 677 -print-prog-name=PROGRAM -print-search-dirs -Q 678 -print-sysroot -print-sysroot-headers-suffix 679 -save-temps -save-temps=cwd -save-temps=obj -time[=FILE] 680 681_Optimization Options_ 682 *Note Options that Control Optimization: Optimize Options. 683 -faggressive-loop-optimizations -falign-functions[=N] 684 -falign-jumps[=N] 685 -falign-labels[=N] -falign-loops[=N] 686 -fassociative-math -fauto-profile -fauto-profile[=PATH] 687 -fauto-inc-dec -fbranch-probabilities 688 -fbranch-target-load-optimize -fbranch-target-load-optimize2 689 -fbtr-bb-exclusive -fcaller-saves 690 -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack 691 -fcompare-elim -fcprop-registers -fcrossjumping 692 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules 693 -fcx-limited-range 694 -fdata-sections -fdce -fdelayed-branch 695 -fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively 696 -fdevirtualize-at-ltrans -fdse 697 -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects 698 -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE 699 -fforward-propagate -ffp-contract=STYLE -ffunction-sections 700 -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity 701 -fgcse-sm -fhoist-adjacent-loads -fif-conversion 702 -fif-conversion2 -findirect-inlining 703 -finline-functions -finline-functions-called-once -finline-limit=N 704 -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-cp-alignment 705 -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference -fipa-icf 706 -fira-algorithm=ALGORITHM 707 -fira-region=REGION -fira-hoist-pressure 708 -fira-loop-pressure -fno-ira-share-save-slots 709 -fno-ira-share-spill-slots -fira-verbose=N 710 -fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute 711 -fivopts -fkeep-inline-functions -fkeep-static-consts 712 -flive-range-shrinkage 713 -floop-block -floop-interchange -floop-strip-mine 714 -floop-unroll-and-jam -floop-nest-optimize 715 -floop-parallelize-all -flra-remat -flto -flto-compression-level 716 -flto-partition=ALG -flto-report -flto-report-wpa -fmerge-all-constants 717 -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves 718 -fmove-loop-invariants -fno-branch-count-reg 719 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability 720 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 721 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros 722 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss 723 -fomit-frame-pointer -foptimize-sibling-calls 724 -fpartial-inlining -fpeel-loops -fpredictive-commoning 725 -fprefetch-loop-arrays -fprofile-report 726 -fprofile-correction -fprofile-dir=PATH -fprofile-generate 727 -fprofile-generate=PATH 728 -fprofile-use -fprofile-use=PATH -fprofile-values 729 -fprofile-reorder-functions 730 -freciprocal-math -free -frename-registers -freorder-blocks 731 -freorder-blocks-and-partition -freorder-functions 732 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops 733 -frounding-math -fsched2-use-superblocks -fsched-pressure 734 -fsched-spec-load -fsched-spec-load-dangerous 735 -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N] 736 -fsched-group-heuristic -fsched-critical-path-heuristic 737 -fsched-spec-insn-heuristic -fsched-rank-heuristic 738 -fsched-last-insn-heuristic -fsched-dep-count-heuristic 739 -fschedule-fusion 740 -fschedule-insns -fschedule-insns2 -fsection-anchors 741 -fselective-scheduling -fselective-scheduling2 742 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops 743 -fsemantic-interposition 744 -fshrink-wrap -fsignaling-nans -fsingle-precision-constant 745 -fsplit-ivs-in-unroller -fsplit-wide-types -fssa-phiopt 746 -fstack-protector -fstack-protector-all -fstack-protector-strong 747 -fstack-protector-explicit -fstdarg-opt -fstrict-aliasing 748 -fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp 749 -ftree-builtin-call-dce -ftree-ccp -ftree-ch 750 -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop 751 -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse 752 -ftree-forwprop -ftree-fre -ftree-loop-if-convert 753 -ftree-loop-if-convert-stores -ftree-loop-im 754 -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns 755 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize 756 -ftree-loop-vectorize 757 -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta 758 -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra 759 -ftree-switch-conversion -ftree-tail-merge -ftree-ter 760 -ftree-vectorize -ftree-vrp 761 -funit-at-a-time -funroll-all-loops -funroll-loops 762 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops 763 -fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt 764 -fweb -fwhole-program -fwpa -fuse-linker-plugin 765 --param NAME=VALUE 766 -O -O0 -O1 -O2 -O3 -Os -Ofast -Og 767 768_Preprocessor Options_ 769 *Note Options Controlling the Preprocessor: Preprocessor Options. 770 -AQUESTION=ANSWER 771 -A-QUESTION[=ANSWER] 772 -C -dD -dI -dM -dN 773 -DMACRO[=DEFN] -E -H 774 -idirafter DIR 775 -include FILE -imacros FILE 776 -iprefix FILE -iwithprefix DIR 777 -iwithprefixbefore DIR -isystem DIR 778 -imultilib DIR -isysroot DIR 779 -M -MM -MF -MG -MP -MQ -MT -nostdinc 780 -P -fdebug-cpp -ftrack-macro-expansion -fworking-directory 781 -remap -trigraphs -undef -UMACRO 782 -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp 783 784_Assembler Option_ 785 *Note Passing Options to the Assembler: Assembler Options. 786 -Wa,OPTION -Xassembler OPTION 787 788_Linker Options_ 789 *Note Options for Linking: Link Options. 790 OBJECT-FILE-NAME -fuse-ld=LINKER -lLIBRARY 791 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 792 -s -static -static-libgcc -static-libstdc++ 793 -static-libasan -static-libtsan -static-liblsan -static-libubsan 794 -static-libmpx -static-libmpxwrappers 795 -shared -shared-libgcc -symbolic 796 -T SCRIPT -Wl,OPTION -Xlinker OPTION 797 -u SYMBOL -z KEYWORD 798 799_Directory Options_ 800 *Note Options for Directory Search: Directory Options. 801 -BPREFIX -IDIR -iplugindir=DIR 802 -iquoteDIR -LDIR -specs=FILE -I- 803 --sysroot=DIR --no-sysroot-suffix 804 805_Machine Dependent Options_ 806 *Note Hardware Models and Configurations: Submodel Options. 807 808 _AArch64 Options_ 809 -mabi=NAME -mbig-endian -mlittle-endian 810 -mgeneral-regs-only 811 -mcmodel=tiny -mcmodel=small -mcmodel=large 812 -mstrict-align 813 -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 814 -mtls-dialect=desc -mtls-dialect=traditional 815 -mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 816 -mfix-cortex-a53-843419 -mno-fix-cortex-a53-843419 817 -march=NAME -mcpu=NAME -mtune=NAME 818 819 _Adapteva Epiphany Options_ 820 -mhalf-reg-file -mprefer-short-insn-regs 821 -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf 822 -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM 823 -mround-nearest -mlong-calls -mshort-calls -msmall16 824 -mfp-mode=MODE -mvect-double -max-vect-align=NUM 825 -msplit-vecmove-early -m1reg-REG 826 827 _ARC Options_ 828 -mbarrel-shifter 829 -mcpu=CPU -mA6 -mARC600 -mA7 -mARC700 830 -mdpfp -mdpfp-compact -mdpfp-fast -mno-dpfp-lrsr 831 -mea -mno-mpy -mmul32x16 -mmul64 832 -mnorm -mspfp -mspfp-compact -mspfp-fast -msimd -msoft-float -mswap 833 -mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape 834 -mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof 835 -mepilogue-cfi -mlong-calls -mmedium-calls -msdata 836 -mucb-mcount -mvolatile-cache 837 -malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc 838 -mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi 839 -mexpand-adddi -mindexed-loads -mlra -mlra-priority-none 840 -mlra-priority-compact mlra-priority-noncompact -mno-millicode 841 -mmixed-code -mq-class -mRcq -mRcw -msize-level=LEVEL 842 -mtune=CPU -mmultcost=NUM -munalign-prob-threshold=PROBABILITY 843 844 _ARM Options_ 845 -mapcs-frame -mno-apcs-frame 846 -mabi=NAME 847 -mapcs-stack-check -mno-apcs-stack-check 848 -mapcs-float -mno-apcs-float 849 -mapcs-reentrant -mno-apcs-reentrant 850 -msched-prolog -mno-sched-prolog 851 -mlittle-endian -mbig-endian 852 -mfloat-abi=NAME 853 -mfp16-format=NAME 854 -mthumb-interwork -mno-thumb-interwork 855 -mcpu=NAME -march=NAME -mfpu=NAME 856 -mtune=NAME -mprint-tune-info 857 -mstructure-size-boundary=N 858 -mabort-on-noreturn 859 -mlong-calls -mno-long-calls 860 -msingle-pic-base -mno-single-pic-base 861 -mpic-register=REG 862 -mnop-fun-dllimport 863 -mpoke-function-name 864 -mthumb -marm 865 -mtpcs-frame -mtpcs-leaf-frame 866 -mcaller-super-interworking -mcallee-super-interworking 867 -mtp=NAME -mtls-dialect=DIALECT 868 -mword-relocations 869 -mfix-cortex-m3-ldrd 870 -munaligned-access 871 -mneon-for-64bits 872 -mslow-flash-data 873 -masm-syntax-unified 874 -mrestrict-it 875 876 _AVR Options_ 877 -mmcu=MCU -maccumulate-args -mbranch-cost=COST 878 -mcall-prologues -mint8 -mn_flash=SIZE -mno-interrupts 879 -mrelax -mrmw -mstrict-X -mtiny-stack -nodevicelib -Waddr-space-convert 880 881 _Blackfin Options_ 882 -mcpu=CPU[-SIREVISION] 883 -msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 884 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 885 -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library 886 -mno-id-shared-library -mshared-library-id=N 887 -mleaf-id-shared-library -mno-leaf-id-shared-library 888 -msep-data -mno-sep-data -mlong-calls -mno-long-calls 889 -mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram 890 -micplb 891 892 _C6X Options_ 893 -mbig-endian -mlittle-endian -march=CPU 894 -msim -msdata=SDATA-TYPE 895 896 _CRIS Options_ 897 -mcpu=CPU -march=CPU -mtune=CPU 898 -mmax-stack-frame=N -melinux-stacksize=N 899 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 900 -mstack-align -mdata-align -mconst-align 901 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 902 -melf -maout -melinux -mlinux -sim -sim2 903 -mmul-bug-workaround -mno-mul-bug-workaround 904 905 _CR16 Options_ 906 -mmac 907 -mcr16cplus -mcr16c 908 -msim -mint32 -mbit-ops 909 -mdata-model=MODEL 910 911 _Darwin Options_ 912 -all_load -allowable_client -arch -arch_errors_fatal 913 -arch_only -bind_at_load -bundle -bundle_loader 914 -client_name -compatibility_version -current_version 915 -dead_strip 916 -dependency-file -dylib_file -dylinker_install_name 917 -dynamic -dynamiclib -exported_symbols_list 918 -filelist -flat_namespace -force_cpusubtype_ALL 919 -force_flat_namespace -headerpad_max_install_names 920 -iframework 921 -image_base -init -install_name -keep_private_externs 922 -multi_module -multiply_defined -multiply_defined_unused 923 -noall_load -no_dead_strip_inits_and_terms 924 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 925 -pagezero_size -prebind -prebind_all_twolevel_modules 926 -private_bundle -read_only_relocs -sectalign 927 -sectobjectsymbols -whyload -seg1addr 928 -sectcreate -sectobjectsymbols -sectorder 929 -segaddr -segs_read_only_addr -segs_read_write_addr 930 -seg_addr_table -seg_addr_table_filename -seglinkedit 931 -segprot -segs_read_only_addr -segs_read_write_addr 932 -single_module -static -sub_library -sub_umbrella 933 -twolevel_namespace -umbrella -undefined 934 -unexported_symbols_list -weak_reference_mismatches 935 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 936 -mkernel -mone-byte-bool 937 938 _DEC Alpha Options_ 939 -mno-fp-regs -msoft-float 940 -mieee -mieee-with-inexact -mieee-conformant 941 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 942 -mtrap-precision=MODE -mbuild-constants 943 -mcpu=CPU-TYPE -mtune=CPU-TYPE 944 -mbwx -mmax -mfix -mcix 945 -mfloat-vax -mfloat-ieee 946 -mexplicit-relocs -msmall-data -mlarge-data 947 -msmall-text -mlarge-text 948 -mmemory-latency=TIME 949 950 _FR30 Options_ 951 -msmall-model -mno-lsim 952 953 _FRV Options_ 954 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 955 -mhard-float -msoft-float 956 -malloc-cc -mfixed-cc -mdword -mno-dword 957 -mdouble -mno-double 958 -mmedia -mno-media -mmuladd -mno-muladd 959 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 960 -mlinked-fp -mlong-calls -malign-labels 961 -mlibrary-pic -macc-4 -macc-8 962 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 963 -moptimize-membar -mno-optimize-membar 964 -mscc -mno-scc -mcond-exec -mno-cond-exec 965 -mvliw-branch -mno-vliw-branch 966 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 967 -mno-nested-cond-exec -mtomcat-stats 968 -mTLS -mtls 969 -mcpu=CPU 970 971 _GNU/Linux Options_ 972 -mglibc -muclibc -mbionic -mandroid 973 -tno-android-cc -tno-android-ld 974 975 _H8/300 Options_ 976 -mrelax -mh -ms -mn -mexr -mno-exr -mint32 -malign-300 977 978 _HPPA Options_ 979 -march=ARCHITECTURE-TYPE 980 -mdisable-fpregs -mdisable-indexing 981 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 982 -mfixed-range=REGISTER-RANGE 983 -mjump-in-delay -mlinker-opt -mlong-calls 984 -mlong-load-store -mno-disable-fpregs 985 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 986 -mno-jump-in-delay -mno-long-load-store 987 -mno-portable-runtime -mno-soft-float 988 -mno-space-regs -msoft-float -mpa-risc-1-0 989 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 990 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 991 -munix=UNIX-STD -nolibdld -static -threads 992 993 _IA-64 Options_ 994 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 995 -mvolatile-asm-stop -mregister-names -msdata -mno-sdata 996 -mconstant-gp -mauto-pic -mfused-madd 997 -minline-float-divide-min-latency 998 -minline-float-divide-max-throughput 999 -mno-inline-float-divide 1000 -minline-int-divide-min-latency 1001 -minline-int-divide-max-throughput 1002 -mno-inline-int-divide 1003 -minline-sqrt-min-latency -minline-sqrt-max-throughput 1004 -mno-inline-sqrt 1005 -mdwarf2-asm -mearly-stop-bits 1006 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 1007 -mtune=CPU-TYPE -milp32 -mlp64 1008 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec 1009 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 1010 -msched-spec-ldc -msched-spec-control-ldc 1011 -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns 1012 -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path 1013 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost 1014 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS 1015 1016 _LM32 Options_ 1017 -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled 1018 -msign-extend-enabled -muser-enabled 1019 1020 _M32R/D Options_ 1021 -m32r2 -m32rx -m32r 1022 -mdebug 1023 -malign-loops -mno-align-loops 1024 -missue-rate=NUMBER 1025 -mbranch-cost=NUMBER 1026 -mmodel=CODE-SIZE-MODEL-TYPE 1027 -msdata=SDATA-TYPE 1028 -mno-flush-func -mflush-func=NAME 1029 -mno-flush-trap -mflush-trap=NUMBER 1030 -G NUM 1031 1032 _M32C Options_ 1033 -mcpu=CPU -msim -memregs=NUMBER 1034 1035 _M680x0 Options_ 1036 -march=ARCH -mcpu=CPU -mtune=TUNE 1037 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 1038 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 1039 -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 1040 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort 1041 -mno-short -mhard-float -m68881 -msoft-float -mpcrel 1042 -malign-int -mstrict-align -msep-data -mno-sep-data 1043 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 1044 -mxgot -mno-xgot 1045 1046 _MCore Options_ 1047 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 1048 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 1049 -m4byte-functions -mno-4byte-functions -mcallgraph-data 1050 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 1051 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 1052 1053 _MeP Options_ 1054 -mabsdiff -mall-opts -maverage -mbased=N -mbitops 1055 -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2 1056 -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax 1057 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf 1058 -mtiny=N 1059 1060 _MicroBlaze Options_ 1061 -msoft-float -mhard-float -msmall-divides -mcpu=CPU 1062 -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift 1063 -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss 1064 -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt 1065 -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL 1066 1067 _MIPS Options_ 1068 -EL -EB -march=ARCH -mtune=ARCH 1069 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips32r3 -mips32r5 1070 -mips32r6 -mips64 -mips64r2 -mips64r3 -mips64r5 -mips64r6 1071 -mips16 -mno-mips16 -mflip-mips16 1072 -minterlink-compressed -mno-interlink-compressed 1073 -minterlink-mips16 -mno-interlink-mips16 1074 -mabi=ABI -mabicalls -mno-abicalls 1075 -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot 1076 -mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-float -msoft-float 1077 -mno-float -msingle-float -mdouble-float 1078 -modd-spreg -mno-odd-spreg 1079 -mabs=MODE -mnan=ENCODING 1080 -mdsp -mno-dsp -mdspr2 -mno-dspr2 1081 -mmcu -mmno-mcu 1082 -meva -mno-eva 1083 -mvirt -mno-virt 1084 -mxpa -mno-xpa 1085 -mmicromips -mno-micromips 1086 -mfpu=FPU-TYPE 1087 -msmartmips -mno-smartmips 1088 -mpaired-single -mno-paired-single -mdmx -mno-mdmx 1089 -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc 1090 -mlong64 -mlong32 -msym32 -mno-sym32 1091 -GNUM -mlocal-sdata -mno-local-sdata 1092 -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt 1093 -membedded-data -mno-embedded-data 1094 -muninit-const-in-rodata -mno-uninit-const-in-rodata 1095 -mcode-readable=SETTING 1096 -msplit-addresses -mno-split-addresses 1097 -mexplicit-relocs -mno-explicit-relocs 1098 -mcheck-zero-division -mno-check-zero-division 1099 -mdivide-traps -mdivide-breaks 1100 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 1101 -mmad -mno-mad -mimadd -mno-imadd -mfused-madd -mno-fused-madd -nocpp 1102 -mfix-24k -mno-fix-24k 1103 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 1104 -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000 1105 -mfix-vr4120 -mno-fix-vr4120 1106 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 1107 -mflush-func=FUNC -mno-flush-func 1108 -mbranch-cost=NUM -mbranch-likely -mno-branch-likely 1109 -mfp-exceptions -mno-fp-exceptions 1110 -mvr4130-align -mno-vr4130-align -msynci -mno-synci 1111 -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address 1112 1113 _MMIX Options_ 1114 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 1115 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 1116 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 1117 -mno-base-addresses -msingle-exit -mno-single-exit 1118 1119 _MN10300 Options_ 1120 -mmult-bug -mno-mult-bug 1121 -mno-am33 -mam33 -mam33-2 -mam34 1122 -mtune=CPU-TYPE 1123 -mreturn-pointer-on-d0 1124 -mno-crt0 -mrelax -mliw -msetlb 1125 1126 _Moxie Options_ 1127 -meb -mel -mmul.x -mno-crt0 1128 1129 _MSP430 Options_ 1130 -msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax 1131 -mhwmult= -minrt 1132 1133 _NDS32 Options_ 1134 -mbig-endian -mlittle-endian 1135 -mreduced-regs -mfull-regs 1136 -mcmov -mno-cmov 1137 -mperf-ext -mno-perf-ext 1138 -mv3push -mno-v3push 1139 -m16bit -mno-16bit 1140 -misr-vector-size=NUM 1141 -mcache-block-size=NUM 1142 -march=ARCH 1143 -mcmodel=CODE-MODEL 1144 -mctor-dtor -mrelax 1145 1146 _Nios II Options_ 1147 -G NUM -mgpopt=OPTION -mgpopt -mno-gpopt 1148 -mel -meb 1149 -mno-bypass-cache -mbypass-cache 1150 -mno-cache-volatile -mcache-volatile 1151 -mno-fast-sw-div -mfast-sw-div 1152 -mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div 1153 -mcustom-INSN=N -mno-custom-INSN 1154 -mcustom-fpu-cfg=NAME 1155 -mhal -msmallc -msys-crt0=NAME -msys-lib=NAME 1156 1157 _Nvidia PTX Options_ 1158 -m32 -m64 -mmainkernel 1159 1160 _PDP-11 Options_ 1161 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 1162 -mbcopy -mbcopy-builtin -mint32 -mno-int16 1163 -mint16 -mno-int32 -mfloat32 -mno-float64 1164 -mfloat64 -mno-float32 -mabshi -mno-abshi 1165 -mbranch-expensive -mbranch-cheap 1166 -munix-asm -mdec-asm 1167 1168 _picoChip Options_ 1169 -mae=AE_TYPE -mvliw-lookahead=N 1170 -msymbol-as-address -mno-inefficient-warnings 1171 1172 _PowerPC Options_ See RS/6000 and PowerPC Options. 1173 1174 _RL78 Options_ 1175 -msim -mmul=none -mmul=g13 -mmul=rl78 1176 -m64bit-doubles -m32bit-doubles 1177 1178 _RS/6000 and PowerPC Options_ 1179 -mcpu=CPU-TYPE 1180 -mtune=CPU-TYPE 1181 -mcmodel=CODE-MODEL 1182 -mpowerpc64 1183 -maltivec -mno-altivec 1184 -mpowerpc-gpopt -mno-powerpc-gpopt 1185 -mpowerpc-gfxopt -mno-powerpc-gfxopt 1186 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd 1187 -mfprnd -mno-fprnd 1188 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp 1189 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 1190 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 1191 -malign-power -malign-natural 1192 -msoft-float -mhard-float -mmultiple -mno-multiple 1193 -msingle-float -mdouble-float -msimple-fpu 1194 -mstring -mno-string -mupdate -mno-update 1195 -mavoid-indexed-addresses -mno-avoid-indexed-addresses 1196 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 1197 -mstrict-align -mno-strict-align -mrelocatable 1198 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 1199 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 1200 -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base 1201 -mprioritize-restricted-insns=PRIORITY 1202 -msched-costly-dep=DEPENDENCE_TYPE 1203 -minsert-sched-nops=SCHEME 1204 -mcall-sysv -mcall-netbsd 1205 -maix-struct-return -msvr4-struct-return 1206 -mabi=ABI-TYPE -msecure-plt -mbss-plt 1207 -mblock-move-inline-limit=NUM 1208 -misel -mno-isel 1209 -misel=yes -misel=no 1210 -mspe -mno-spe 1211 -mspe=yes -mspe=no 1212 -mpaired 1213 -mgen-cell-microcode -mwarn-cell-microcode 1214 -mvrsave -mno-vrsave 1215 -mmulhw -mno-mulhw 1216 -mdlmzb -mno-dlmzb 1217 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 1218 -mprototype -mno-prototype 1219 -msim -mmvme -mads -myellowknife -memb -msdata 1220 -msdata=OPT -mvxworks -G NUM -pthread 1221 -mrecip -mrecip=OPT -mno-recip -mrecip-precision 1222 -mno-recip-precision 1223 -mveclibabi=TYPE -mfriz -mno-friz 1224 -mpointers-to-nested-functions -mno-pointers-to-nested-functions 1225 -msave-toc-indirect -mno-save-toc-indirect 1226 -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector 1227 -mcrypto -mno-crypto -mdirect-move -mno-direct-move 1228 -mquad-memory -mno-quad-memory 1229 -mquad-memory-atomic -mno-quad-memory-atomic 1230 -mcompat-align-parm -mno-compat-align-parm 1231 -mupper-regs-df -mno-upper-regs-df -mupper-regs-sf -mno-upper-regs-sf 1232 -mupper-regs -mno-upper-regs 1233 1234 _RX Options_ 1235 -m64bit-doubles -m32bit-doubles -fpu -nofpu 1236 -mcpu= 1237 -mbig-endian-data -mlittle-endian-data 1238 -msmall-data 1239 -msim -mno-sim 1240 -mas100-syntax -mno-as100-syntax 1241 -mrelax 1242 -mmax-constant-size= 1243 -mint-register= 1244 -mpid 1245 -mno-warn-multiple-fast-interrupts 1246 -msave-acc-in-interrupts 1247 1248 _S/390 and zSeries Options_ 1249 -mtune=CPU-TYPE -march=CPU-TYPE 1250 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp 1251 -mlong-double-64 -mlong-double-128 1252 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 1253 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 1254 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 1255 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 1256 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 1257 -mhotpatch=HALFWORDS,HALFWORDS 1258 1259 _Score Options_ 1260 -meb -mel 1261 -mnhwloop 1262 -muls 1263 -mmac 1264 -mscore5 -mscore5u -mscore7 -mscore7d 1265 1266 _SH Options_ 1267 -m1 -m2 -m2e 1268 -m2a-nofpu -m2a-single-only -m2a-single -m2a 1269 -m3 -m3e 1270 -m4-nofpu -m4-single-only -m4-single -m4 1271 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 1272 -m5-64media -m5-64media-nofpu 1273 -m5-32media -m5-32media-nofpu 1274 -m5-compact -m5-compact-nofpu 1275 -mb -ml -mdalign -mrelax 1276 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 1277 -mieee -mno-ieee -mbitops -misize -minline-ic_invalidate -mpadstruct 1278 -mspace -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 1279 -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE 1280 -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 1281 -maccumulate-outgoing-args -minvalid-symbols 1282 -matomic-model=ATOMIC-MODEL 1283 -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch 1284 -mcbranch-force-delay-slot 1285 -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra 1286 -mpretend-cmove -mtas 1287 1288 _Solaris 2 Options_ 1289 -mclear-hwcap -mno-clear-hwcap -mimpure-text -mno-impure-text 1290 -pthreads -pthread 1291 1292 _SPARC Options_ 1293 -mcpu=CPU-TYPE 1294 -mtune=CPU-TYPE 1295 -mcmodel=CODE-MODEL 1296 -mmemory-model=MEM-MODEL 1297 -m32 -m64 -mapp-regs -mno-app-regs 1298 -mfaster-structs -mno-faster-structs -mflat -mno-flat 1299 -mfpu -mno-fpu -mhard-float -msoft-float 1300 -mhard-quad-float -msoft-quad-float 1301 -mstack-bias -mno-stack-bias 1302 -munaligned-doubles -mno-unaligned-doubles 1303 -muser-mode -mno-user-mode 1304 -mv8plus -mno-v8plus -mvis -mno-vis 1305 -mvis2 -mno-vis2 -mvis3 -mno-vis3 1306 -mcbcond -mno-cbcond 1307 -mfmaf -mno-fmaf -mpopc -mno-popc 1308 -mfix-at697f -mfix-ut699 1309 1310 _SPU Options_ 1311 -mwarn-reloc -merror-reloc 1312 -msafe-dma -munsafe-dma 1313 -mbranch-hints 1314 -msmall-mem -mlarge-mem -mstdmain 1315 -mfixed-range=REGISTER-RANGE 1316 -mea32 -mea64 1317 -maddress-space-conversion -mno-address-space-conversion 1318 -mcache-size=CACHE-SIZE 1319 -matomic-updates -mno-atomic-updates 1320 1321 _System V Options_ 1322 -Qy -Qn -YP,PATHS -Ym,DIR 1323 1324 _TILE-Gx Options_ 1325 -mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian 1326 -mcmodel=CODE-MODEL 1327 1328 _TILEPro Options_ 1329 -mcpu=CPU -m32 1330 1331 _V850 Options_ 1332 -mlong-calls -mno-long-calls -mep -mno-ep 1333 -mprolog-function -mno-prolog-function -mspace 1334 -mtda=N -msda=N -mzda=N 1335 -mapp-regs -mno-app-regs 1336 -mdisable-callt -mno-disable-callt 1337 -mv850e2v3 -mv850e2 -mv850e1 -mv850es 1338 -mv850e -mv850 -mv850e3v5 1339 -mloop 1340 -mrelax 1341 -mlong-jumps 1342 -msoft-float 1343 -mhard-float 1344 -mgcc-abi 1345 -mrh850-abi 1346 -mbig-switch 1347 1348 _VAX Options_ 1349 -mg -mgnu -munix 1350 1351 _Visium Options_ 1352 -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float 1353 -mcpu=CPU-TYPE -mtune=CPU-TYPE -msv-mode -muser-mode 1354 1355 _VMS Options_ 1356 -mvms-return-codes -mdebug-main=PREFIX -mmalloc64 1357 -mpointer-size=SIZE 1358 1359 _VxWorks Options_ 1360 -mrtp -non-static -Bstatic -Bdynamic 1361 -Xbind-lazy -Xbind-now 1362 1363 _x86 Options_ 1364 -mtune=CPU-TYPE -march=CPU-TYPE 1365 -mtune-ctrl=FEATURE-LIST -mdump-tune-features -mno-default 1366 -mfpmath=UNIT 1367 -masm=DIALECT -mno-fancy-math-387 1368 -mno-fp-ret-in-387 -msoft-float 1369 -mno-wide-multiply -mrtd -malign-double 1370 -mpreferred-stack-boundary=NUM 1371 -mincoming-stack-boundary=NUM 1372 -mcld -mcx16 -msahf -mmovbe -mcrc32 1373 -mrecip -mrecip=OPT 1374 -mvzeroupper -mprefer-avx128 1375 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx 1376 -mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -msha 1377 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1 1378 -mclflushopt -mxsavec -mxsaves 1379 -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt 1380 -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mthreads 1381 -mno-align-stringops -minline-all-stringops 1382 -minline-stringops-dynamically -mstringop-strategy=ALG 1383 -mmemcpy-strategy=STRATEGY -mmemset-strategy=STRATEGY 1384 -mpush-args -maccumulate-outgoing-args -m128bit-long-double 1385 -m96bit-long-double -mlong-double-64 -mlong-double-80 -mlong-double-128 1386 -mregparm=NUM -msseregparm 1387 -mveclibabi=TYPE -mvect8-ret-in-mem 1388 -mpc32 -mpc64 -mpc80 -mstackrealign 1389 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 1390 -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE 1391 -m32 -m64 -mx32 -m16 -mlarge-data-threshold=NUM 1392 -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv 1393 -mavx256-split-unaligned-load -mavx256-split-unaligned-store 1394 -malign-data=TYPE -mstack-protector-guard=GUARD 1395 1396 _x86 Windows Options_ 1397 -mconsole -mcygwin -mno-cygwin -mdll 1398 -mnop-fun-dllimport -mthread 1399 -municode -mwin32 -mwindows -fno-set-stack-executable 1400 1401 _Xstormy16 Options_ 1402 -msim 1403 1404 _Xtensa Options_ 1405 -mconst16 -mno-const16 1406 -mfused-madd -mno-fused-madd 1407 -mforce-no-pic 1408 -mserialize-volatile -mno-serialize-volatile 1409 -mtext-section-literals -mno-text-section-literals 1410 -mtarget-align -mno-target-align 1411 -mlongcalls -mno-longcalls 1412 1413 _zSeries Options_ See S/390 and zSeries Options. 1414 1415_Code Generation Options_ 1416 *Note Options for Code Generation Conventions: Code Gen Options. 1417 -fcall-saved-REG -fcall-used-REG 1418 -ffixed-REG -fexceptions 1419 -fnon-call-exceptions -fdelete-dead-exceptions -funwind-tables 1420 -fasynchronous-unwind-tables 1421 -fno-gnu-unique 1422 -finhibit-size-directive -finstrument-functions 1423 -finstrument-functions-exclude-function-list=SYM,SYM,... 1424 -finstrument-functions-exclude-file-list=FILE,FILE,... 1425 -fno-common -fno-ident 1426 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 1427 -fno-jump-tables 1428 -frecord-gcc-switches 1429 -freg-struct-return -fshort-enums 1430 -fshort-double -fshort-wchar 1431 -fverbose-asm -fpack-struct[=N] -fstack-check 1432 -fstack-limit-register=REG -fstack-limit-symbol=SYM 1433 -fno-stack-limit -fsplit-stack 1434 -fleading-underscore -ftls-model=MODEL 1435 -fstack-reuse=REUSE_LEVEL 1436 -ftrapv -fwrapv -fbounds-check 1437 -fvisibility=[default|internal|hidden|protected] 1438 -fstrict-volatile-bitfields -fsync-libcalls 1439 1440 1441 1442File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1443 14443.2 Options Controlling the Kind of Output 1445========================================== 1446 1447Compilation can involve up to four stages: preprocessing, compilation 1448proper, assembly and linking, always in that order. GCC is capable of 1449preprocessing and compiling several files either into several assembler 1450input files, or into one assembler input file; then each assembler 1451input file produces an object file, and linking combines all the object 1452files (those newly compiled, and those specified as input) into an 1453executable file. 1454 1455 For any given input file, the file name suffix determines what kind of 1456compilation is done: 1457 1458`FILE.c' 1459 C source code that must be preprocessed. 1460 1461`FILE.i' 1462 C source code that should not be preprocessed. 1463 1464`FILE.ii' 1465 C++ source code that should not be preprocessed. 1466 1467`FILE.m' 1468 Objective-C source code. Note that you must link with the 1469 `libobjc' library to make an Objective-C program work. 1470 1471`FILE.mi' 1472 Objective-C source code that should not be preprocessed. 1473 1474`FILE.mm' 1475`FILE.M' 1476 Objective-C++ source code. Note that you must link with the 1477 `libobjc' library to make an Objective-C++ program work. Note 1478 that `.M' refers to a literal capital M. 1479 1480`FILE.mii' 1481 Objective-C++ source code that should not be preprocessed. 1482 1483`FILE.h' 1484 C, C++, Objective-C or Objective-C++ header file to be turned into 1485 a precompiled header (default), or C, C++ header file to be turned 1486 into an Ada spec (via the `-fdump-ada-spec' switch). 1487 1488`FILE.cc' 1489`FILE.cp' 1490`FILE.cxx' 1491`FILE.cpp' 1492`FILE.CPP' 1493`FILE.c++' 1494`FILE.C' 1495 C++ source code that must be preprocessed. Note that in `.cxx', 1496 the last two letters must both be literally `x'. Likewise, `.C' 1497 refers to a literal capital C. 1498 1499`FILE.mm' 1500`FILE.M' 1501 Objective-C++ source code that must be preprocessed. 1502 1503`FILE.mii' 1504 Objective-C++ source code that should not be preprocessed. 1505 1506`FILE.hh' 1507`FILE.H' 1508`FILE.hp' 1509`FILE.hxx' 1510`FILE.hpp' 1511`FILE.HPP' 1512`FILE.h++' 1513`FILE.tcc' 1514 C++ header file to be turned into a precompiled header or Ada spec. 1515 1516`FILE.f' 1517`FILE.for' 1518`FILE.ftn' 1519 Fixed form Fortran source code that should not be preprocessed. 1520 1521`FILE.F' 1522`FILE.FOR' 1523`FILE.fpp' 1524`FILE.FPP' 1525`FILE.FTN' 1526 Fixed form Fortran source code that must be preprocessed (with the 1527 traditional preprocessor). 1528 1529`FILE.f90' 1530`FILE.f95' 1531`FILE.f03' 1532`FILE.f08' 1533 Free form Fortran source code that should not be preprocessed. 1534 1535`FILE.F90' 1536`FILE.F95' 1537`FILE.F03' 1538`FILE.F08' 1539 Free form Fortran source code that must be preprocessed (with the 1540 traditional preprocessor). 1541 1542`FILE.go' 1543 Go source code. 1544 1545`FILE.ads' 1546 Ada source code file that contains a library unit declaration (a 1547 declaration of a package, subprogram, or generic, or a generic 1548 instantiation), or a library unit renaming declaration (a package, 1549 generic, or subprogram renaming declaration). Such files are also 1550 called "specs". 1551 1552`FILE.adb' 1553 Ada source code file containing a library unit body (a subprogram 1554 or package body). Such files are also called "bodies". 1555 1556`FILE.s' 1557 Assembler code. 1558 1559`FILE.S' 1560`FILE.sx' 1561 Assembler code that must be preprocessed. 1562 1563`OTHER' 1564 An object file to be fed straight into linking. Any file name 1565 with no recognized suffix is treated this way. 1566 1567 You can specify the input language explicitly with the `-x' option: 1568 1569`-x LANGUAGE' 1570 Specify explicitly the LANGUAGE for the following input files 1571 (rather than letting the compiler choose a default based on the 1572 file name suffix). This option applies to all following input 1573 files until the next `-x' option. Possible values for LANGUAGE 1574 are: 1575 c c-header cpp-output 1576 c++ c++-header c++-cpp-output 1577 objective-c objective-c-header objective-c-cpp-output 1578 objective-c++ objective-c++-header objective-c++-cpp-output 1579 assembler assembler-with-cpp 1580 ada 1581 f77 f77-cpp-input f95 f95-cpp-input 1582 go 1583 java 1584 1585`-x none' 1586 Turn off any specification of a language, so that subsequent files 1587 are handled according to their file name suffixes (as they are if 1588 `-x' has not been used at all). 1589 1590`-pass-exit-codes' 1591 Normally the `gcc' program exits with the code of 1 if any phase 1592 of the compiler returns a non-success return code. If you specify 1593 `-pass-exit-codes', the `gcc' program instead returns with the 1594 numerically highest error produced by any phase returning an error 1595 indication. The C, C++, and Fortran front ends return 4 if an 1596 internal compiler error is encountered. 1597 1598 If you only want some of the stages of compilation, you can use `-x' 1599(or filename suffixes) to tell `gcc' where to start, and one of the 1600options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that 1601some combinations (for example, `-x cpp-output -E') instruct `gcc' to 1602do nothing at all. 1603 1604`-c' 1605 Compile or assemble the source files, but do not link. The linking 1606 stage simply is not done. The ultimate output is in the form of an 1607 object file for each source file. 1608 1609 By default, the object file name for a source file is made by 1610 replacing the suffix `.c', `.i', `.s', etc., with `.o'. 1611 1612 Unrecognized input files, not requiring compilation or assembly, 1613 are ignored. 1614 1615`-S' 1616 Stop after the stage of compilation proper; do not assemble. The 1617 output is in the form of an assembler code file for each 1618 non-assembler input file specified. 1619 1620 By default, the assembler file name for a source file is made by 1621 replacing the suffix `.c', `.i', etc., with `.s'. 1622 1623 Input files that don't require compilation are ignored. 1624 1625`-E' 1626 Stop after the preprocessing stage; do not run the compiler 1627 proper. The output is in the form of preprocessed source code, 1628 which is sent to the standard output. 1629 1630 Input files that don't require preprocessing are ignored. 1631 1632`-o FILE' 1633 Place output in file FILE. This applies to whatever sort of 1634 output is being produced, whether it be an executable file, an 1635 object file, an assembler file or preprocessed C code. 1636 1637 If `-o' is not specified, the default is to put an executable file 1638 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its 1639 assembler file in `SOURCE.s', a precompiled header file in 1640 `SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1641 output. 1642 1643`-v' 1644 Print (on standard error output) the commands executed to run the 1645 stages of compilation. Also print the version number of the 1646 compiler driver program and of the preprocessor and the compiler 1647 proper. 1648 1649`-###' 1650 Like `-v' except the commands are not executed and arguments are 1651 quoted unless they contain only alphanumeric characters or `./-_'. 1652 This is useful for shell scripts to capture the driver-generated 1653 command lines. 1654 1655`-pipe' 1656 Use pipes rather than temporary files for communication between the 1657 various stages of compilation. This fails to work on some systems 1658 where the assembler is unable to read from a pipe; but the GNU 1659 assembler has no trouble. 1660 1661`--help' 1662 Print (on the standard output) a description of the command-line 1663 options understood by `gcc'. If the `-v' option is also specified 1664 then `--help' is also passed on to the various processes invoked 1665 by `gcc', so that they can display the command-line options they 1666 accept. If the `-Wextra' option has also been specified (prior to 1667 the `--help' option), then command-line options that have no 1668 documentation associated with them are also displayed. 1669 1670`--target-help' 1671 Print (on the standard output) a description of target-specific 1672 command-line options for each tool. For some targets extra 1673 target-specific information may also be printed. 1674 1675`--help={CLASS|[^]QUALIFIER}[,...]' 1676 Print (on the standard output) a description of the command-line 1677 options understood by the compiler that fit into all specified 1678 classes and qualifiers. These are the supported classes: 1679 1680 `optimizers' 1681 Display all of the optimization options supported by the 1682 compiler. 1683 1684 `warnings' 1685 Display all of the options controlling warning messages 1686 produced by the compiler. 1687 1688 `target' 1689 Display target-specific options. Unlike the `--target-help' 1690 option however, target-specific options of the linker and 1691 assembler are not displayed. This is because those tools do 1692 not currently support the extended `--help=' syntax. 1693 1694 `params' 1695 Display the values recognized by the `--param' option. 1696 1697 LANGUAGE 1698 Display the options supported for LANGUAGE, where LANGUAGE is 1699 the name of one of the languages supported in this version of 1700 GCC. 1701 1702 `common' 1703 Display the options that are common to all languages. 1704 1705 These are the supported qualifiers: 1706 1707 `undocumented' 1708 Display only those options that are undocumented. 1709 1710 `joined' 1711 Display options taking an argument that appears after an equal 1712 sign in the same continuous piece of text, such as: 1713 `--help=target'. 1714 1715 `separate' 1716 Display options taking an argument that appears as a separate 1717 word following the original option, such as: `-o output-file'. 1718 1719 Thus for example to display all the undocumented target-specific 1720 switches supported by the compiler, use: 1721 1722 --help=target,undocumented 1723 1724 The sense of a qualifier can be inverted by prefixing it with the 1725 `^' character, so for example to display all binary warning 1726 options (i.e., ones that are either on or off and that do not take 1727 an argument) that have a description, use: 1728 1729 --help=warnings,^joined,^undocumented 1730 1731 The argument to `--help=' should not consist solely of inverted 1732 qualifiers. 1733 1734 Combining several classes is possible, although this usually 1735 restricts the output so much that there is nothing to display. One 1736 case where it does work, however, is when one of the classes is 1737 TARGET. For example, to display all the target-specific 1738 optimization options, use: 1739 1740 --help=target,optimizers 1741 1742 The `--help=' option can be repeated on the command line. Each 1743 successive use displays its requested class of options, skipping 1744 those that have already been displayed. 1745 1746 If the `-Q' option appears on the command line before the 1747 `--help=' option, then the descriptive text displayed by `--help=' 1748 is changed. Instead of describing the displayed options, an 1749 indication is given as to whether the option is enabled, disabled 1750 or set to a specific value (assuming that the compiler knows this 1751 at the point where the `--help=' option is used). 1752 1753 Here is a truncated example from the ARM port of `gcc': 1754 1755 % gcc -Q -mabi=2 --help=target -c 1756 The following options are target specific: 1757 -mabi= 2 1758 -mabort-on-noreturn [disabled] 1759 -mapcs [disabled] 1760 1761 The output is sensitive to the effects of previous command-line 1762 options, so for example it is possible to find out which 1763 optimizations are enabled at `-O2' by using: 1764 1765 -Q -O2 --help=optimizers 1766 1767 Alternatively you can discover which binary optimizations are 1768 enabled by `-O3' by using: 1769 1770 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 1771 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 1772 diff /tmp/O2-opts /tmp/O3-opts | grep enabled 1773 1774`-no-canonical-prefixes' 1775 Do not expand any symbolic links, resolve references to `/../' or 1776 `/./', or make the path absolute when generating a relative prefix. 1777 1778`--version' 1779 Display the version number and copyrights of the invoked GCC. 1780 1781`-wrapper' 1782 Invoke all subcommands under a wrapper program. The name of the 1783 wrapper program and its parameters are passed as a comma separated 1784 list. 1785 1786 gcc -c t.c -wrapper gdb,--args 1787 1788 This invokes all subprograms of `gcc' under `gdb --args', thus the 1789 invocation of `cc1' is `gdb --args cc1 ...'. 1790 1791`-fplugin=NAME.so' 1792 Load the plugin code in file NAME.so, assumed to be a shared 1793 object to be dlopen'd by the compiler. The base name of the 1794 shared object file is used to identify the plugin for the purposes 1795 of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below). 1796 Each plugin should define the callback functions specified in the 1797 Plugins API. 1798 1799`-fplugin-arg-NAME-KEY=VALUE' 1800 Define an argument called KEY with a value of VALUE for the plugin 1801 called NAME. 1802 1803`-fdump-ada-spec[-slim]' 1804 For C and C++ source and include files, generate corresponding Ada 1805 specs. *Note Generating Ada Bindings for C and C++ headers: 1806 (gnat_ugn)Generating Ada Bindings for C and C++ headers, which 1807 provides detailed documentation on this feature. 1808 1809`-fada-spec-parent=UNIT' 1810 In conjunction with `-fdump-ada-spec[-slim]' above, generate Ada 1811 specs as child units of parent UNIT. 1812 1813`-fdump-go-spec=FILE' 1814 For input files in any language, generate corresponding Go 1815 declarations in FILE. This generates Go `const', `type', `var', 1816 and `func' declarations which may be a useful way to start writing 1817 a Go interface to code written in some other language. 1818 1819`@FILE' 1820 Read command-line options from FILE. The options read are 1821 inserted in place of the original @FILE option. If FILE does not 1822 exist, or cannot be read, then the option will be treated 1823 literally, and not removed. 1824 1825 Options in FILE are separated by whitespace. A whitespace 1826 character may be included in an option by surrounding the entire 1827 option in either single or double quotes. Any character 1828 (including a backslash) may be included by prefixing the character 1829 to be included with a backslash. The FILE may itself contain 1830 additional @FILE options; any such options will be processed 1831 recursively. 1832 1833 1834File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1835 18363.3 Compiling C++ Programs 1837========================== 1838 1839C++ source files conventionally use one of the suffixes `.C', `.cc', 1840`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use 1841`.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and 1842preprocessed C++ files use the suffix `.ii'. GCC recognizes files with 1843these names and compiles them as C++ programs even if you call the 1844compiler the same way as for compiling C programs (usually with the 1845name `gcc'). 1846 1847 However, the use of `gcc' does not add the C++ library. `g++' is a 1848program that calls GCC and automatically specifies linking against the 1849C++ library. It treats `.c', `.h' and `.i' files as C++ source files 1850instead of C source files unless `-x' is used. This program is also 1851useful when precompiling a C header file with a `.h' extension for use 1852in C++ compilations. On many systems, `g++' is also installed with the 1853name `c++'. 1854 1855 When you compile C++ programs, you may specify many of the same 1856command-line options that you use for compiling programs in any 1857language; or command-line options meaningful for C and related 1858languages; or options that are meaningful only for C++ programs. *Note 1859Options Controlling C Dialect: C Dialect Options, for explanations of 1860options for languages related to C. *Note Options Controlling C++ 1861Dialect: C++ Dialect Options, for explanations of options that are 1862meaningful only for C++ programs. 1863 1864 1865File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1866 18673.4 Options Controlling C Dialect 1868================================= 1869 1870The following options control the dialect of C (or languages derived 1871from C, such as C++, Objective-C and Objective-C++) that the compiler 1872accepts: 1873 1874`-ansi' 1875 In C mode, this is equivalent to `-std=c90'. In C++ mode, it is 1876 equivalent to `-std=c++98'. 1877 1878 This turns off certain features of GCC that are incompatible with 1879 ISO C90 (when compiling C code), or of standard C++ (when 1880 compiling C++ code), such as the `asm' and `typeof' keywords, and 1881 predefined macros such as `unix' and `vax' that identify the type 1882 of system you are using. It also enables the undesirable and 1883 rarely used ISO trigraph feature. For the C compiler, it disables 1884 recognition of C++ style `//' comments as well as the `inline' 1885 keyword. 1886 1887 The alternate keywords `__asm__', `__extension__', `__inline__' 1888 and `__typeof__' continue to work despite `-ansi'. You would not 1889 want to use them in an ISO C program, of course, but it is useful 1890 to put them in header files that might be included in compilations 1891 done with `-ansi'. Alternate predefined macros such as `__unix__' 1892 and `__vax__' are also available, with or without `-ansi'. 1893 1894 The `-ansi' option does not cause non-ISO programs to be rejected 1895 gratuitously. For that, `-Wpedantic' is required in addition to 1896 `-ansi'. *Note Warning Options::. 1897 1898 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option 1899 is used. Some header files may notice this macro and refrain from 1900 declaring certain functions or defining certain macros that the 1901 ISO standard doesn't call for; this is to avoid interfering with 1902 any programs that might use these names for other things. 1903 1904 Functions that are normally built in but do not have semantics 1905 defined by ISO C (such as `alloca' and `ffs') are not built-in 1906 functions when `-ansi' is used. *Note Other built-in functions 1907 provided by GCC: Other Builtins, for details of the functions 1908 affected. 1909 1910`-std=' 1911 Determine the language standard. *Note Language Standards 1912 Supported by GCC: Standards, for details of these standard 1913 versions. This option is currently only supported when compiling 1914 C or C++. 1915 1916 The compiler can accept several base standards, such as `c90' or 1917 `c++98', and GNU dialects of those standards, such as `gnu90' or 1918 `gnu++98'. When a base standard is specified, the compiler 1919 accepts all programs following that standard plus those using GNU 1920 extensions that do not contradict it. For example, `-std=c90' 1921 turns off certain features of GCC that are incompatible with ISO 1922 C90, such as the `asm' and `typeof' keywords, but not other GNU 1923 extensions that do not have a meaning in ISO C90, such as omitting 1924 the middle term of a `?:' expression. On the other hand, when a 1925 GNU dialect of a standard is specified, all features supported by 1926 the compiler are enabled, even when those features change the 1927 meaning of the base standard. As a result, some strict-conforming 1928 programs may be rejected. The particular standard is used by 1929 `-Wpedantic' to identify which features are GNU extensions given 1930 that version of the standard. For example `-std=gnu90 -Wpedantic' 1931 warns about C++ style `//' comments, while `-std=gnu99 -Wpedantic' 1932 does not. 1933 1934 A value for this option must be provided; possible values are 1935 1936 `c90' 1937 `c89' 1938 `iso9899:1990' 1939 Support all ISO C90 programs (certain GNU extensions that 1940 conflict with ISO C90 are disabled). Same as `-ansi' for C 1941 code. 1942 1943 `iso9899:199409' 1944 ISO C90 as modified in amendment 1. 1945 1946 `c99' 1947 `c9x' 1948 `iso9899:1999' 1949 `iso9899:199x' 1950 ISO C99. This standard is substantially completely 1951 supported, modulo bugs and floating-point issues (mainly but 1952 not entirely relating to optional C99 features from Annexes F 1953 and G). See `http://gcc.gnu.org/c99status.html' for more 1954 information. The names `c9x' and `iso9899:199x' are 1955 deprecated. 1956 1957 `c11' 1958 `c1x' 1959 `iso9899:2011' 1960 ISO C11, the 2011 revision of the ISO C standard. This 1961 standard is substantially completely supported, modulo bugs, 1962 floating-point issues (mainly but not entirely relating to 1963 optional C11 features from Annexes F and G) and the optional 1964 Annexes K (Bounds-checking interfaces) and L (Analyzability). 1965 The name `c1x' is deprecated. 1966 1967 `gnu90' 1968 `gnu89' 1969 GNU dialect of ISO C90 (including some C99 features). 1970 1971 `gnu99' 1972 `gnu9x' 1973 GNU dialect of ISO C99. The name `gnu9x' is deprecated. 1974 1975 `gnu11' 1976 `gnu1x' 1977 GNU dialect of ISO C11. This is the default for C code. The 1978 name `gnu1x' is deprecated. 1979 1980 `c++98' 1981 `c++03' 1982 The 1998 ISO C++ standard plus the 2003 technical corrigendum 1983 and some additional defect reports. Same as `-ansi' for C++ 1984 code. 1985 1986 `gnu++98' 1987 `gnu++03' 1988 GNU dialect of `-std=c++98'. This is the default for C++ 1989 code. 1990 1991 `c++11' 1992 `c++0x' 1993 The 2011 ISO C++ standard plus amendments. The name `c++0x' 1994 is deprecated. 1995 1996 `gnu++11' 1997 `gnu++0x' 1998 GNU dialect of `-std=c++11'. The name `gnu++0x' is 1999 deprecated. 2000 2001 `c++14' 2002 `c++1y' 2003 The 2014 ISO C++ standard plus amendments. The name `c++1y' 2004 is deprecated. 2005 2006 `gnu++14' 2007 `gnu++1y' 2008 GNU dialect of `-std=c++14'. The name `gnu++1y' is 2009 deprecated. 2010 2011 `c++1z' 2012 The next revision of the ISO C++ standard, tentatively 2013 planned for 2017. Support is highly experimental, and will 2014 almost certainly change in incompatible ways in future 2015 releases. 2016 2017 `gnu++1z' 2018 GNU dialect of `-std=c++1z'. Support is highly experimental, 2019 and will almost certainly change in incompatible ways in 2020 future releases. 2021 2022`-fgnu89-inline' 2023 The option `-fgnu89-inline' tells GCC to use the traditional GNU 2024 semantics for `inline' functions when in C99 mode. *Note An 2025 Inline Function is As Fast As a Macro: Inline. Using this option 2026 is roughly equivalent to adding the `gnu_inline' function 2027 attribute to all inline functions (*note Function Attributes::). 2028 2029 The option `-fno-gnu89-inline' explicitly tells GCC to use the C99 2030 semantics for `inline' when in C99 or gnu99 mode (i.e., it 2031 specifies the default behavior). This option is not supported in 2032 `-std=c90' or `-std=gnu90' mode. 2033 2034 The preprocessor macros `__GNUC_GNU_INLINE__' and 2035 `__GNUC_STDC_INLINE__' may be used to check which semantics are in 2036 effect for `inline' functions. *Note Common Predefined Macros: 2037 (cpp)Common Predefined Macros. 2038 2039`-aux-info FILENAME' 2040 Output to the given filename prototyped declarations for all 2041 functions declared and/or defined in a translation unit, including 2042 those in header files. This option is silently ignored in any 2043 language other than C. 2044 2045 Besides declarations, the file indicates, in comments, the origin 2046 of each declaration (source file and line), whether the 2047 declaration was implicit, prototyped or unprototyped (`I', `N' for 2048 new or `O' for old, respectively, in the first character after the 2049 line number and the colon), and whether it came from a declaration 2050 or a definition (`C' or `F', respectively, in the following 2051 character). In the case of function definitions, a K&R-style list 2052 of arguments followed by their declarations is also provided, 2053 inside comments, after the declaration. 2054 2055`-fallow-parameterless-variadic-functions' 2056 Accept variadic functions without named parameters. 2057 2058 Although it is possible to define such a function, this is not very 2059 useful as it is not possible to read the arguments. This is only 2060 supported for C as this construct is allowed by C++. 2061 2062`-fno-asm' 2063 Do not recognize `asm', `inline' or `typeof' as a keyword, so that 2064 code can use these words as identifiers. You can use the keywords 2065 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies 2066 `-fno-asm'. 2067 2068 In C++, this switch only affects the `typeof' keyword, since `asm' 2069 and `inline' are standard keywords. You may want to use the 2070 `-fno-gnu-keywords' flag instead, which has the same effect. In 2071 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects 2072 the `asm' and `typeof' keywords, since `inline' is a standard 2073 keyword in ISO C99. 2074 2075`-fno-builtin' 2076`-fno-builtin-FUNCTION' 2077 Don't recognize built-in functions that do not begin with 2078 `__builtin_' as prefix. *Note Other built-in functions provided 2079 by GCC: Other Builtins, for details of the functions affected, 2080 including those which are not built-in functions when `-ansi' or 2081 `-std' options for strict ISO C conformance are used because they 2082 do not have an ISO standard meaning. 2083 2084 GCC normally generates special code to handle certain built-in 2085 functions more efficiently; for instance, calls to `alloca' may 2086 become single instructions which adjust the stack directly, and 2087 calls to `memcpy' may become inline copy loops. The resulting 2088 code is often both smaller and faster, but since the function 2089 calls no longer appear as such, you cannot set a breakpoint on 2090 those calls, nor can you change the behavior of the functions by 2091 linking with a different library. In addition, when a function is 2092 recognized as a built-in function, GCC may use information about 2093 that function to warn about problems with calls to that function, 2094 or to generate more efficient code, even if the resulting code 2095 still contains calls to that function. For example, warnings are 2096 given with `-Wformat' for bad calls to `printf' when `printf' is 2097 built in and `strlen' is known not to modify global memory. 2098 2099 With the `-fno-builtin-FUNCTION' option only the built-in function 2100 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'. 2101 If a function is named that is not built-in in this version of 2102 GCC, this option is ignored. There is no corresponding 2103 `-fbuiltin-FUNCTION' option; if you wish to enable built-in 2104 functions selectively when using `-fno-builtin' or 2105 `-ffreestanding', you may define macros such as: 2106 2107 #define abs(n) __builtin_abs ((n)) 2108 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 2109 2110`-fhosted' 2111 Assert that compilation targets a hosted environment. This implies 2112 `-fbuiltin'. A hosted environment is one in which the entire 2113 standard library is available, and in which `main' has a return 2114 type of `int'. Examples are nearly everything except a kernel. 2115 This is equivalent to `-fno-freestanding'. 2116 2117`-ffreestanding' 2118 Assert that compilation targets a freestanding environment. This 2119 implies `-fno-builtin'. A freestanding environment is one in 2120 which the standard library may not exist, and program startup may 2121 not necessarily be at `main'. The most obvious example is an OS 2122 kernel. This is equivalent to `-fno-hosted'. 2123 2124 *Note Language Standards Supported by GCC: Standards, for details 2125 of freestanding and hosted environments. 2126 2127`-fopenacc' 2128 Enable handling of OpenACC directives `#pragma acc' in C/C++ and 2129 `!$acc' in Fortran. When `-fopenacc' is specified, the compiler 2130 generates accelerated code according to the OpenACC Application 2131 Programming Interface v2.0 `http://www.openacc.org/'. This option 2132 implies `-pthread', and thus is only supported on targets that 2133 have support for `-pthread'. 2134 2135 Note that this is an experimental feature, incomplete, and subject 2136 to change in future versions of GCC. See 2137 `https://gcc.gnu.org/wiki/OpenACC' for more information. 2138 2139`-fopenmp' 2140 Enable handling of OpenMP directives `#pragma omp' in C/C++ and 2141 `!$omp' in Fortran. When `-fopenmp' is specified, the compiler 2142 generates parallel code according to the OpenMP Application 2143 Program Interface v4.0 `http://www.openmp.org/'. This option 2144 implies `-pthread', and thus is only supported on targets that 2145 have support for `-pthread'. `-fopenmp' implies `-fopenmp-simd'. 2146 2147`-fopenmp-simd' 2148 Enable handling of OpenMP's SIMD directives with `#pragma omp' in 2149 C/C++ and `!$omp' in Fortran. Other OpenMP directives are ignored. 2150 2151`-fcilkplus' 2152 Enable the usage of Cilk Plus language extension features for 2153 C/C++. When the option `-fcilkplus' is specified, enable the 2154 usage of the Cilk Plus Language extension features for C/C++. The 2155 present implementation follows ABI version 1.2. This is an 2156 experimental feature that is only partially complete, and whose 2157 interface may change in future versions of GCC as the official 2158 specification changes. Currently, all features but `_Cilk_for' 2159 have been implemented. 2160 2161`-fgnu-tm' 2162 When the option `-fgnu-tm' is specified, the compiler generates 2163 code for the Linux variant of Intel's current Transactional Memory 2164 ABI specification document (Revision 1.1, May 6 2009). This is an 2165 experimental feature whose interface may change in future versions 2166 of GCC, as the official specification changes. Please note that 2167 not all architectures are supported for this feature. 2168 2169 For more information on GCC's support for transactional memory, 2170 *Note The GNU Transactional Memory Library: (libitm)Enabling 2171 libitm. 2172 2173 Note that the transactional memory feature is not supported with 2174 non-call exceptions (`-fnon-call-exceptions'). 2175 2176`-fms-extensions' 2177 Accept some non-standard constructs used in Microsoft header files. 2178 2179 In C++ code, this allows member names in structures to be similar 2180 to previous types declarations. 2181 2182 typedef int UOW; 2183 struct ABC { 2184 UOW UOW; 2185 }; 2186 2187 Some cases of unnamed fields in structures and unions are only 2188 accepted with this option. *Note Unnamed struct/union fields 2189 within structs/unions: Unnamed Fields, for details. 2190 2191 Note that this option is off for all targets but x86 targets using 2192 ms-abi. 2193 2194`-fplan9-extensions' 2195 Accept some non-standard constructs used in Plan 9 code. 2196 2197 This enables `-fms-extensions', permits passing pointers to 2198 structures with anonymous fields to functions that expect pointers 2199 to elements of the type of the field, and permits referring to 2200 anonymous fields declared using a typedef. *Note Unnamed 2201 struct/union fields within structs/unions: Unnamed Fields, for 2202 details. This is only supported for C, not C++. 2203 2204`-trigraphs' 2205 Support ISO C trigraphs. The `-ansi' option (and `-std' options 2206 for strict ISO C conformance) implies `-trigraphs'. 2207 2208`-traditional' 2209`-traditional-cpp' 2210 Formerly, these options caused GCC to attempt to emulate a 2211 pre-standard C compiler. They are now only supported with the 2212 `-E' switch. The preprocessor continues to support a pre-standard 2213 mode. See the GNU CPP manual for details. 2214 2215`-fcond-mismatch' 2216 Allow conditional expressions with mismatched types in the second 2217 and third arguments. The value of such an expression is void. 2218 This option is not supported for C++. 2219 2220`-flax-vector-conversions' 2221 Allow implicit conversions between vectors with differing numbers 2222 of elements and/or incompatible element types. This option should 2223 not be used for new code. 2224 2225`-funsigned-char' 2226 Let the type `char' be unsigned, like `unsigned char'. 2227 2228 Each kind of machine has a default for what `char' should be. It 2229 is either like `unsigned char' by default or like `signed char' by 2230 default. 2231 2232 Ideally, a portable program should always use `signed char' or 2233 `unsigned char' when it depends on the signedness of an object. 2234 But many programs have been written to use plain `char' and expect 2235 it to be signed, or expect it to be unsigned, depending on the 2236 machines they were written for. This option, and its inverse, let 2237 you make such a program work with the opposite default. 2238 2239 The type `char' is always a distinct type from each of `signed 2240 char' or `unsigned char', even though its behavior is always just 2241 like one of those two. 2242 2243`-fsigned-char' 2244 Let the type `char' be signed, like `signed char'. 2245 2246 Note that this is equivalent to `-fno-unsigned-char', which is the 2247 negative form of `-funsigned-char'. Likewise, the option 2248 `-fno-signed-char' is equivalent to `-funsigned-char'. 2249 2250`-fsigned-bitfields' 2251`-funsigned-bitfields' 2252`-fno-signed-bitfields' 2253`-fno-unsigned-bitfields' 2254 These options control whether a bit-field is signed or unsigned, 2255 when the declaration does not use either `signed' or `unsigned'. 2256 By default, such a bit-field is signed, because this is 2257 consistent: the basic integer types such as `int' are signed types. 2258 2259 2260File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 2261 22623.5 Options Controlling C++ Dialect 2263=================================== 2264 2265This section describes the command-line options that are only meaningful 2266for C++ programs. You can also use most of the GNU compiler options 2267regardless of what language your program is in. For example, you might 2268compile a file `firstClass.C' like this: 2269 2270 g++ -g -frepo -O -c firstClass.C 2271 2272In this example, only `-frepo' is an option meant only for C++ 2273programs; you can use the other options with any language supported by 2274GCC. 2275 2276 Here is a list of options that are _only_ for compiling C++ programs: 2277 2278`-fabi-version=N' 2279 Use version N of the C++ ABI. The default is version 0. 2280 2281 Version 0 refers to the version conforming most closely to the C++ 2282 ABI specification. Therefore, the ABI obtained using version 0 2283 will change in different versions of G++ as ABI bugs are fixed. 2284 2285 Version 1 is the version of the C++ ABI that first appeared in G++ 2286 3.2. 2287 2288 Version 2 is the version of the C++ ABI that first appeared in G++ 2289 3.4, and was the default through G++ 4.9. 2290 2291 Version 3 corrects an error in mangling a constant address as a 2292 template argument. 2293 2294 Version 4, which first appeared in G++ 4.5, implements a standard 2295 mangling for vector types. 2296 2297 Version 5, which first appeared in G++ 4.6, corrects the mangling 2298 of attribute const/volatile on function pointer types, decltype of 2299 a plain decl, and use of a function parameter in the declaration of 2300 another parameter. 2301 2302 Version 6, which first appeared in G++ 4.7, corrects the promotion 2303 behavior of C++11 scoped enums and the mangling of template 2304 argument packs, const/static_cast, prefix ++ and -, and a class 2305 scope function used as a template argument. 2306 2307 Version 7, which first appeared in G++ 4.8, that treats nullptr_t 2308 as a builtin type and corrects the mangling of lambdas in default 2309 argument scope. 2310 2311 Version 8, which first appeared in G++ 4.9, corrects the 2312 substitution behavior of function types with 2313 function-cv-qualifiers. 2314 2315 Version 9, which first appeared in G++ 5.2, corrects the alignment 2316 of `nullptr_t'. 2317 2318 See also `-Wabi'. 2319 2320`-fabi-compat-version=N' 2321 On targets that support strong aliases, G++ works around mangling 2322 changes by creating an alias with the correct mangled name when 2323 defining a symbol with an incorrect mangled name. This switch 2324 specifies which ABI version to use for the alias. 2325 2326 With `-fabi-version=0' (the default), this defaults to 2. If 2327 another ABI version is explicitly selected, this defaults to 0. 2328 2329 The compatibility version is also set by `-Wabi=N'. 2330 2331`-fno-access-control' 2332 Turn off all access checking. This switch is mainly useful for 2333 working around bugs in the access control code. 2334 2335`-fcheck-new' 2336 Check that the pointer returned by `operator new' is non-null 2337 before attempting to modify the storage allocated. This check is 2338 normally unnecessary because the C++ standard specifies that 2339 `operator new' only returns `0' if it is declared `throw()', in 2340 which case the compiler always checks the return value even 2341 without this option. In all other cases, when `operator new' has 2342 a non-empty exception specification, memory exhaustion is 2343 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'. 2344 2345`-fconstexpr-depth=N' 2346 Set the maximum nested evaluation depth for C++11 constexpr 2347 functions to N. A limit is needed to detect endless recursion 2348 during constant expression evaluation. The minimum specified by 2349 the standard is 512. 2350 2351`-fdeduce-init-list' 2352 Enable deduction of a template type parameter as 2353 `std::initializer_list' from a brace-enclosed initializer list, 2354 i.e. 2355 2356 template <class T> auto forward(T t) -> decltype (realfn (t)) 2357 { 2358 return realfn (t); 2359 } 2360 2361 void f() 2362 { 2363 forward({1,2}); // call forward<std::initializer_list<int>> 2364 } 2365 2366 This deduction was implemented as a possible extension to the 2367 originally proposed semantics for the C++11 standard, but was not 2368 part of the final standard, so it is disabled by default. This 2369 option is deprecated, and may be removed in a future version of 2370 G++. 2371 2372`-ffriend-injection' 2373 Inject friend functions into the enclosing namespace, so that they 2374 are visible outside the scope of the class in which they are 2375 declared. Friend functions were documented to work this way in 2376 the old Annotated C++ Reference Manual. However, in ISO C++ a 2377 friend function that is not declared in an enclosing scope can 2378 only be found using argument dependent lookup. GCC defaults to 2379 the standard behavior. 2380 2381 This option is for compatibility, and may be removed in a future 2382 release of G++. 2383 2384`-fno-elide-constructors' 2385 The C++ standard allows an implementation to omit creating a 2386 temporary that is only used to initialize another object of the 2387 same type. Specifying this option disables that optimization, and 2388 forces G++ to call the copy constructor in all cases. 2389 2390`-fno-enforce-eh-specs' 2391 Don't generate code to check for violation of exception 2392 specifications at run time. This option violates the C++ 2393 standard, but may be useful for reducing code size in production 2394 builds, much like defining `NDEBUG'. This does not give user code 2395 permission to throw exceptions in violation of the exception 2396 specifications; the compiler still optimizes based on the 2397 specifications, so throwing an unexpected exception results in 2398 undefined behavior at run time. 2399 2400`-fextern-tls-init' 2401`-fno-extern-tls-init' 2402 The C++11 and OpenMP standards allow `thread_local' and 2403 `threadprivate' variables to have dynamic (runtime) 2404 initialization. To support this, any use of such a variable goes 2405 through a wrapper function that performs any necessary 2406 initialization. When the use and definition of the variable are 2407 in the same translation unit, this overhead can be optimized away, 2408 but when the use is in a different translation unit there is 2409 significant overhead even if the variable doesn't actually need 2410 dynamic initialization. If the programmer can be sure that no use 2411 of the variable in a non-defining TU needs to trigger dynamic 2412 initialization (either because the variable is statically 2413 initialized, or a use of the variable in the defining TU will be 2414 executed before any uses in another TU), they can avoid this 2415 overhead with the `-fno-extern-tls-init' option. 2416 2417 On targets that support symbol aliases, the default is 2418 `-fextern-tls-init'. On targets that do not support symbol 2419 aliases, the default is `-fno-extern-tls-init'. 2420 2421`-ffor-scope' 2422`-fno-for-scope' 2423 If `-ffor-scope' is specified, the scope of variables declared in 2424 a for-init-statement is limited to the `for' loop itself, as 2425 specified by the C++ standard. If `-fno-for-scope' is specified, 2426 the scope of variables declared in a for-init-statement extends to 2427 the end of the enclosing scope, as was the case in old versions of 2428 G++, and other (traditional) implementations of C++. 2429 2430 If neither flag is given, the default is to follow the standard, 2431 but to allow and give a warning for old-style code that would 2432 otherwise be invalid, or have different behavior. 2433 2434`-fno-gnu-keywords' 2435 Do not recognize `typeof' as a keyword, so that code can use this 2436 word as an identifier. You can use the keyword `__typeof__' 2437 instead. `-ansi' implies `-fno-gnu-keywords'. 2438 2439`-fno-implicit-templates' 2440 Never emit code for non-inline templates that are instantiated 2441 implicitly (i.e. by use); only emit code for explicit 2442 instantiations. *Note Template Instantiation::, for more 2443 information. 2444 2445`-fno-implicit-inline-templates' 2446 Don't emit code for implicit instantiations of inline templates, 2447 either. The default is to handle inlines differently so that 2448 compiles with and without optimization need the same set of 2449 explicit instantiations. 2450 2451`-fno-implement-inlines' 2452 To save space, do not emit out-of-line copies of inline functions 2453 controlled by `#pragma implementation'. This causes linker errors 2454 if these functions are not inlined everywhere they are called. 2455 2456`-fms-extensions' 2457 Disable Wpedantic warnings about constructs used in MFC, such as 2458 implicit int and getting a pointer to member function via 2459 non-standard syntax. 2460 2461`-fno-nonansi-builtins' 2462 Disable built-in declarations of functions that are not mandated by 2463 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index', 2464 `bzero', `conjf', and other related functions. 2465 2466`-fnothrow-opt' 2467 Treat a `throw()' exception specification as if it were a 2468 `noexcept' specification to reduce or eliminate the text size 2469 overhead relative to a function with no exception specification. 2470 If the function has local variables of types with non-trivial 2471 destructors, the exception specification actually makes the 2472 function smaller because the EH cleanups for those variables can be 2473 optimized away. The semantic effect is that an exception thrown 2474 out of a function with such an exception specification results in 2475 a call to `terminate' rather than `unexpected'. 2476 2477`-fno-operator-names' 2478 Do not treat the operator name keywords `and', `bitand', `bitor', 2479 `compl', `not', `or' and `xor' as synonyms as keywords. 2480 2481`-fno-optional-diags' 2482 Disable diagnostics that the standard says a compiler does not 2483 need to issue. Currently, the only such diagnostic issued by G++ 2484 is the one for a name having multiple meanings within a class. 2485 2486`-fpermissive' 2487 Downgrade some diagnostics about nonconformant code from errors to 2488 warnings. Thus, using `-fpermissive' allows some nonconforming 2489 code to compile. 2490 2491`-fno-pretty-templates' 2492 When an error message refers to a specialization of a function 2493 template, the compiler normally prints the signature of the 2494 template followed by the template arguments and any typedefs or 2495 typenames in the signature (e.g. `void f(T) [with T = int]' rather 2496 than `void f(int)') so that it's clear which template is involved. 2497 When an error message refers to a specialization of a class 2498 template, the compiler omits any template arguments that match the 2499 default template arguments for that template. If either of these 2500 behaviors make it harder to understand the error message rather 2501 than easier, you can use `-fno-pretty-templates' to disable them. 2502 2503`-frepo' 2504 Enable automatic template instantiation at link time. This option 2505 also implies `-fno-implicit-templates'. *Note Template 2506 Instantiation::, for more information. 2507 2508`-fno-rtti' 2509 Disable generation of information about every class with virtual 2510 functions for use by the C++ run-time type identification features 2511 (`dynamic_cast' and `typeid'). If you don't use those parts of 2512 the language, you can save some space by using this flag. Note 2513 that exception handling uses the same information, but G++ 2514 generates it as needed. The `dynamic_cast' operator can still be 2515 used for casts that do not require run-time type information, i.e. 2516 casts to `void *' or to unambiguous base classes. 2517 2518`-fsized-deallocation' 2519 Enable the built-in global declarations 2520 void operator delete (void *, std::size_t) noexcept; 2521 void operator delete[] (void *, std::size_t) noexcept; 2522 as introduced in C++14. This is useful for user-defined 2523 replacement deallocation functions that, for example, use the size 2524 of the object to make deallocation faster. Enabled by default 2525 under `-std=c++14' and above. The flag `-Wsized-deallocation' 2526 warns about places that might want to add a definition. 2527 2528`-fstats' 2529 Emit statistics about front-end processing at the end of the 2530 compilation. This information is generally only useful to the G++ 2531 development team. 2532 2533`-fstrict-enums' 2534 Allow the compiler to optimize using the assumption that a value of 2535 enumerated type can only be one of the values of the enumeration 2536 (as defined in the C++ standard; basically, a value that can be 2537 represented in the minimum number of bits needed to represent all 2538 the enumerators). This assumption may not be valid if the program 2539 uses a cast to convert an arbitrary integer value to the 2540 enumerated type. 2541 2542`-ftemplate-backtrace-limit=N' 2543 Set the maximum number of template instantiation notes for a single 2544 warning or error to N. The default value is 10. 2545 2546`-ftemplate-depth=N' 2547 Set the maximum instantiation depth for template classes to N. A 2548 limit on the template instantiation depth is needed to detect 2549 endless recursions during template class instantiation. ANSI/ISO 2550 C++ conforming programs must not rely on a maximum depth greater 2551 than 17 (changed to 1024 in C++11). The default value is 900, as 2552 the compiler can run out of stack space before hitting 1024 in 2553 some situations. 2554 2555`-fno-threadsafe-statics' 2556 Do not emit the extra code to use the routines specified in the C++ 2557 ABI for thread-safe initialization of local statics. You can use 2558 this option to reduce code size slightly in code that doesn't need 2559 to be thread-safe. 2560 2561`-fuse-cxa-atexit' 2562 Register destructors for objects with static storage duration with 2563 the `__cxa_atexit' function rather than the `atexit' function. 2564 This option is required for fully standards-compliant handling of 2565 static destructors, but only works if your C library supports 2566 `__cxa_atexit'. 2567 2568`-fno-use-cxa-get-exception-ptr' 2569 Don't use the `__cxa_get_exception_ptr' runtime routine. This 2570 causes `std::uncaught_exception' to be incorrect, but is necessary 2571 if the runtime routine is not available. 2572 2573`-fvisibility-inlines-hidden' 2574 This switch declares that the user does not attempt to compare 2575 pointers to inline functions or methods where the addresses of the 2576 two functions are taken in different shared objects. 2577 2578 The effect of this is that GCC may, effectively, mark inline 2579 methods with `__attribute__ ((visibility ("hidden")))' so that 2580 they do not appear in the export table of a DSO and do not require 2581 a PLT indirection when used within the DSO. Enabling this option 2582 can have a dramatic effect on load and link times of a DSO as it 2583 massively reduces the size of the dynamic export table when the 2584 library makes heavy use of templates. 2585 2586 The behavior of this switch is not quite the same as marking the 2587 methods as hidden directly, because it does not affect static 2588 variables local to the function or cause the compiler to deduce 2589 that the function is defined in only one shared object. 2590 2591 You may mark a method as having a visibility explicitly to negate 2592 the effect of the switch for that method. For example, if you do 2593 want to compare pointers to a particular inline method, you might 2594 mark it as having default visibility. Marking the enclosing class 2595 with explicit visibility has no effect. 2596 2597 Explicitly instantiated inline methods are unaffected by this 2598 option as their linkage might otherwise cross a shared library 2599 boundary. *Note Template Instantiation::. 2600 2601`-fvisibility-ms-compat' 2602 This flag attempts to use visibility settings to make GCC's C++ 2603 linkage model compatible with that of Microsoft Visual Studio. 2604 2605 The flag makes these changes to GCC's linkage model: 2606 2607 1. It sets the default visibility to `hidden', like 2608 `-fvisibility=hidden'. 2609 2610 2. Types, but not their members, are not hidden by default. 2611 2612 3. The One Definition Rule is relaxed for types without explicit 2613 visibility specifications that are defined in more than one 2614 shared object: those declarations are permitted if they are 2615 permitted when this option is not used. 2616 2617 In new code it is better to use `-fvisibility=hidden' and export 2618 those classes that are intended to be externally visible. 2619 Unfortunately it is possible for code to rely, perhaps 2620 accidentally, on the Visual Studio behavior. 2621 2622 Among the consequences of these changes are that static data 2623 members of the same type with the same name but defined in 2624 different shared objects are different, so changing one does not 2625 change the other; and that pointers to function members defined in 2626 different shared objects may not compare equal. When this flag is 2627 given, it is a violation of the ODR to define types with the same 2628 name differently. 2629 2630`-fvtable-verify=[std|preinit|none]' 2631 Turn on (or off, if using `-fvtable-verify=none') the security 2632 feature that verifies at run time, for every virtual call, that 2633 the vtable pointer through which the call is made is valid for the 2634 type of the object, and has not been corrupted or overwritten. If 2635 an invalid vtable pointer is detected at run time, an error is 2636 reported and execution of the program is immediately halted. 2637 2638 This option causes run-time data structures to be built at program 2639 startup, which are used for verifying the vtable pointers. The 2640 options `std' and `preinit' control the timing of when these data 2641 structures are built. In both cases the data structures are built 2642 before execution reaches `main'. Using `-fvtable-verify=std' 2643 causes the data structures to be built after shared libraries have 2644 been loaded and initialized. `-fvtable-verify=preinit' causes 2645 them to be built before shared libraries have been loaded and 2646 initialized. 2647 2648 If this option appears multiple times in the command line with 2649 different values specified, `none' takes highest priority over 2650 both `std' and `preinit'; `preinit' takes priority over `std'. 2651 2652`-fvtv-debug' 2653 When used in conjunction with `-fvtable-verify=std' or 2654 `-fvtable-verify=preinit', causes debug versions of the runtime 2655 functions for the vtable verification feature to be called. This 2656 flag also causes the compiler to log information about which 2657 vtable pointers it finds for each class. This information is 2658 written to a file named `vtv_set_ptr_data.log' in the directory 2659 named by the environment variable `VTV_LOGS_DIR' if that is 2660 defined or the current working directory otherwise. 2661 2662 Note: This feature _appends_ data to the log file. If you want a 2663 fresh log file, be sure to delete any existing one. 2664 2665`-fvtv-counts' 2666 This is a debugging flag. When used in conjunction with 2667 `-fvtable-verify=std' or `-fvtable-verify=preinit', this causes 2668 the compiler to keep track of the total number of virtual calls it 2669 encounters and the number of verifications it inserts. It also 2670 counts the number of calls to certain run-time library functions 2671 that it inserts and logs this information for each compilation 2672 unit. The compiler writes this information to a file named 2673 `vtv_count_data.log' in the directory named by the environment 2674 variable `VTV_LOGS_DIR' if that is defined or the current working 2675 directory otherwise. It also counts the size of the vtable 2676 pointer sets for each class, and writes this information to 2677 `vtv_class_set_sizes.log' in the same directory. 2678 2679 Note: This feature _appends_ data to the log files. To get fresh 2680 log files, be sure to delete any existing ones. 2681 2682`-fno-weak' 2683 Do not use weak symbol support, even if it is provided by the 2684 linker. By default, G++ uses weak symbols if they are available. 2685 This option exists only for testing, and should not be used by 2686 end-users; it results in inferior code and has no benefits. This 2687 option may be removed in a future release of G++. 2688 2689`-nostdinc++' 2690 Do not search for header files in the standard directories 2691 specific to C++, but do still search the other standard 2692 directories. (This option is used when building the C++ library.) 2693 2694 In addition, these optimization, warning, and code generation options 2695have meanings only for C++ programs: 2696 2697`-Wabi (C, Objective-C, C++ and Objective-C++ only)' 2698 When an explicit `-fabi-version=N' option is used, causes G++ to 2699 warn when it generates code that is probably not compatible with 2700 the vendor-neutral C++ ABI. Since G++ now defaults to 2701 `-fabi-version=0', `-Wabi' has no effect unless either an older 2702 ABI version is selected (with `-fabi-version=N') or an older 2703 compatibility version is selected (with `-Wabi=N' or 2704 `-fabi-compat-version=N'). 2705 2706 Although an effort has been made to warn about all such cases, 2707 there are probably some cases that are not warned about, even 2708 though G++ is generating incompatible code. There may also be 2709 cases where warnings are emitted even though the code that is 2710 generated is compatible. 2711 2712 You should rewrite your code to avoid these warnings if you are 2713 concerned about the fact that code generated by G++ may not be 2714 binary compatible with code generated by other compilers. 2715 2716 `-Wabi' can also be used with an explicit version number to warn 2717 about compatibility with a particular `-fabi-version' level, e.g. 2718 `-Wabi=2' to warn about changes relative to `-fabi-version=2'. 2719 Specifying a version number also sets `-fabi-compat-version=N'. 2720 2721 The known incompatibilities in `-fabi-version=2' (which was the 2722 default from GCC 3.4 to 4.9) include: 2723 2724 * A template with a non-type template parameter of reference 2725 type was mangled incorrectly: 2726 extern int N; 2727 template <int &> struct S {}; 2728 void n (S<N>) {2} 2729 2730 This was fixed in `-fabi-version=3'. 2731 2732 * SIMD vector types declared using `__attribute 2733 ((vector_size))' were mangled in a non-standard way that does 2734 not allow for overloading of functions taking vectors of 2735 different sizes. 2736 2737 The mangling was changed in `-fabi-version=4'. 2738 2739 * `__attribute ((const))' and `noreturn' were mangled as type 2740 qualifiers, and `decltype' of a plain declaration was folded 2741 away. 2742 2743 These mangling issues were fixed in `-fabi-version=5'. 2744 2745 * Scoped enumerators passed as arguments to a variadic function 2746 are promoted like unscoped enumerators, causing `va_arg' to 2747 complain. On most targets this does not actually affect the 2748 parameter passing ABI, as there is no way to pass an argument 2749 smaller than `int'. 2750 2751 Also, the ABI changed the mangling of template argument packs, 2752 `const_cast', `static_cast', prefix increment/decrement, and 2753 a class scope function used as a template argument. 2754 2755 These issues were corrected in `-fabi-version=6'. 2756 2757 * Lambdas in default argument scope were mangled incorrectly, 2758 and the ABI changed the mangling of `nullptr_t'. 2759 2760 These issues were corrected in `-fabi-version=7'. 2761 2762 * When mangling a function type with function-cv-qualifiers, the 2763 un-qualified function type was incorrectly treated as a 2764 substitution candidate. 2765 2766 This was fixed in `-fabi-version=8', the default for GCC 5.1. 2767 2768 * `decltype(nullptr)' incorrectly had an alignment of 1, 2769 leading to unaligned accesses. Note that this did not affect 2770 the ABI of a function with a `nullptr_t' parameter, as 2771 parameters have a minimum alignment. 2772 2773 This was fixed in `-fabi-version=9', the default for GCC 5.2. 2774 2775 It also warns about psABI-related changes. The known psABI 2776 changes at this point include: 2777 2778 * For SysV/x86-64, unions with `long double' members are passed 2779 in memory as specified in psABI. For example: 2780 2781 union U { 2782 long double ld; 2783 int i; 2784 }; 2785 2786 `union U' is always passed in memory. 2787 2788 2789`-Wabi-tag (C++ and Objective-C++ only)' 2790 Warn when a type with an ABI tag is used in a context that does not 2791 have that ABI tag. See *note C++ Attributes:: for more information 2792 about ABI tags. 2793 2794`-Wctor-dtor-privacy (C++ and Objective-C++ only)' 2795 Warn when a class seems unusable because all the constructors or 2796 destructors in that class are private, and it has neither friends 2797 nor public static member functions. Also warn if there are no 2798 non-private methods, and there's at least one private member 2799 function that isn't a constructor or destructor. 2800 2801`-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)' 2802 Warn when `delete' is used to destroy an instance of a class that 2803 has virtual functions and non-virtual destructor. It is unsafe to 2804 delete an instance of a derived class through a pointer to a base 2805 class if the base class does not have a virtual destructor. This 2806 warning is enabled by `-Wall'. 2807 2808`-Wliteral-suffix (C++ and Objective-C++ only)' 2809 Warn when a string or character literal is followed by a ud-suffix 2810 which does not begin with an underscore. As a conforming 2811 extension, GCC treats such suffixes as separate preprocessing 2812 tokens in order to maintain backwards compatibility with code that 2813 uses formatting macros from `<inttypes.h>'. For example: 2814 2815 #define __STDC_FORMAT_MACROS 2816 #include <inttypes.h> 2817 #include <stdio.h> 2818 2819 int main() { 2820 int64_t i64 = 123; 2821 printf("My int64: %"PRId64"\n", i64); 2822 } 2823 2824 In this case, `PRId64' is treated as a separate preprocessing 2825 token. 2826 2827 This warning is enabled by default. 2828 2829`-Wnarrowing (C++ and Objective-C++ only)' 2830 Warn when a narrowing conversion prohibited by C++11 occurs within 2831 `{ }', e.g. 2832 2833 int i = { 2.2 }; // error: narrowing from double to int 2834 2835 This flag is included in `-Wall' and `-Wc++11-compat'. 2836 2837 With `-std=c++11', `-Wno-narrowing' suppresses the diagnostic 2838 required by the standard. Note that this does not affect the 2839 meaning of well-formed code; narrowing conversions are still 2840 considered ill-formed in SFINAE context. 2841 2842`-Wnoexcept (C++ and Objective-C++ only)' 2843 Warn when a noexcept-expression evaluates to false because of a 2844 call to a function that does not have a non-throwing exception 2845 specification (i.e. `throw()' or `noexcept') but is known by the 2846 compiler to never throw an exception. 2847 2848`-Wnon-virtual-dtor (C++ and Objective-C++ only)' 2849 Warn when a class has virtual functions and an accessible 2850 non-virtual destructor itself or in an accessible polymorphic base 2851 class, in which case it is possible but unsafe to delete an 2852 instance of a derived class through a pointer to the class itself 2853 or base class. This warning is automatically enabled if 2854 `-Weffc++' is specified. 2855 2856`-Wreorder (C++ and Objective-C++ only)' 2857 Warn when the order of member initializers given in the code does 2858 not match the order in which they must be executed. For instance: 2859 2860 struct A { 2861 int i; 2862 int j; 2863 A(): j (0), i (1) { } 2864 }; 2865 2866 The compiler rearranges the member initializers for `i' and `j' to 2867 match the declaration order of the members, emitting a warning to 2868 that effect. This warning is enabled by `-Wall'. 2869 2870`-fext-numeric-literals (C++ and Objective-C++ only)' 2871 Accept imaginary, fixed-point, or machine-defined literal number 2872 suffixes as GNU extensions. When this option is turned off these 2873 suffixes are treated as C++11 user-defined literal numeric 2874 suffixes. This is on by default for all pre-C++11 dialects and 2875 all GNU dialects: `-std=c++98', `-std=gnu++98', `-std=gnu++11', 2876 `-std=gnu++14'. This option is off by default for ISO C++11 2877 onwards (`-std=c++11', ...). 2878 2879 The following `-W...' options are not affected by `-Wall'. 2880 2881`-Weffc++ (C++ and Objective-C++ only)' 2882 Warn about violations of the following style guidelines from Scott 2883 Meyers' `Effective C++' series of books: 2884 2885 * Define a copy constructor and an assignment operator for 2886 classes with dynamically-allocated memory. 2887 2888 * Prefer initialization to assignment in constructors. 2889 2890 * Have `operator=' return a reference to `*this'. 2891 2892 * Don't try to return a reference when you must return an 2893 object. 2894 2895 * Distinguish between prefix and postfix forms of increment and 2896 decrement operators. 2897 2898 * Never overload `&&', `||', or `,'. 2899 2900 2901 This option also enables `-Wnon-virtual-dtor', which is also one 2902 of the effective C++ recommendations. However, the check is 2903 extended to warn about the lack of virtual destructor in accessible 2904 non-polymorphic bases classes too. 2905 2906 When selecting this option, be aware that the standard library 2907 headers do not obey all of these guidelines; use `grep -v' to 2908 filter out those warnings. 2909 2910`-Wstrict-null-sentinel (C++ and Objective-C++ only)' 2911 Warn about the use of an uncasted `NULL' as sentinel. When 2912 compiling only with GCC this is a valid sentinel, as `NULL' is 2913 defined to `__null'. Although it is a null pointer constant 2914 rather than a null pointer, it is guaranteed to be of the same 2915 size as a pointer. But this use is not portable across different 2916 compilers. 2917 2918`-Wno-non-template-friend (C++ and Objective-C++ only)' 2919 Disable warnings when non-templatized friend functions are declared 2920 within a template. Since the advent of explicit template 2921 specification support in G++, if the name of the friend is an 2922 unqualified-id (i.e., `friend foo(int)'), the C++ language 2923 specification demands that the friend declare or define an 2924 ordinary, nontemplate function. (Section 14.5.3). Before G++ 2925 implemented explicit specification, unqualified-ids could be 2926 interpreted as a particular specialization of a templatized 2927 function. Because this non-conforming behavior is no longer the 2928 default behavior for G++, `-Wnon-template-friend' allows the 2929 compiler to check existing code for potential trouble spots and is 2930 on by default. This new compiler behavior can be turned off with 2931 `-Wno-non-template-friend', which keeps the conformant compiler 2932 code but disables the helpful warning. 2933 2934`-Wold-style-cast (C++ and Objective-C++ only)' 2935 Warn if an old-style (C-style) cast to a non-void type is used 2936 within a C++ program. The new-style casts (`dynamic_cast', 2937 `static_cast', `reinterpret_cast', and `const_cast') are less 2938 vulnerable to unintended effects and much easier to search for. 2939 2940`-Woverloaded-virtual (C++ and Objective-C++ only)' 2941 Warn when a function declaration hides virtual functions from a 2942 base class. For example, in: 2943 2944 struct A { 2945 virtual void f(); 2946 }; 2947 2948 struct B: public A { 2949 void f(int); 2950 }; 2951 2952 the `A' class version of `f' is hidden in `B', and code like: 2953 2954 B* b; 2955 b->f(); 2956 2957 fails to compile. 2958 2959`-Wno-pmf-conversions (C++ and Objective-C++ only)' 2960 Disable the diagnostic for converting a bound pointer to member 2961 function to a plain pointer. 2962 2963`-Wsign-promo (C++ and Objective-C++ only)' 2964 Warn when overload resolution chooses a promotion from unsigned or 2965 enumerated type to a signed type, over a conversion to an unsigned 2966 type of the same size. Previous versions of G++ tried to preserve 2967 unsignedness, but the standard mandates the current behavior. 2968 2969 2970File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2971 29723.6 Options Controlling Objective-C and Objective-C++ Dialects 2973============================================================== 2974 2975(NOTE: This manual does not describe the Objective-C and Objective-C++ 2976languages themselves. *Note Language Standards Supported by GCC: 2977Standards, for references.) 2978 2979 This section describes the command-line options that are only 2980meaningful for Objective-C and Objective-C++ programs. You can also 2981use most of the language-independent GNU compiler options. For 2982example, you might compile a file `some_class.m' like this: 2983 2984 gcc -g -fgnu-runtime -O -c some_class.m 2985 2986In this example, `-fgnu-runtime' is an option meant only for 2987Objective-C and Objective-C++ programs; you can use the other options 2988with any language supported by GCC. 2989 2990 Note that since Objective-C is an extension of the C language, 2991Objective-C compilations may also use options specific to the C 2992front-end (e.g., `-Wtraditional'). Similarly, Objective-C++ 2993compilations may use C++-specific options (e.g., `-Wabi'). 2994 2995 Here is a list of options that are _only_ for compiling Objective-C 2996and Objective-C++ programs: 2997 2998`-fconstant-string-class=CLASS-NAME' 2999 Use CLASS-NAME as the name of the class to instantiate for each 3000 literal string specified with the syntax `@"..."'. The default 3001 class name is `NXConstantString' if the GNU runtime is being used, 3002 and `NSConstantString' if the NeXT runtime is being used (see 3003 below). The `-fconstant-cfstrings' option, if also present, 3004 overrides the `-fconstant-string-class' setting and cause `@"..."' 3005 literals to be laid out as constant CoreFoundation strings. 3006 3007`-fgnu-runtime' 3008 Generate object code compatible with the standard GNU Objective-C 3009 runtime. This is the default for most types of systems. 3010 3011`-fnext-runtime' 3012 Generate output compatible with the NeXT runtime. This is the 3013 default for NeXT-based systems, including Darwin and Mac OS X. 3014 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this 3015 option is used. 3016 3017`-fno-nil-receivers' 3018 Assume that all Objective-C message dispatches (`[receiver 3019 message:arg]') in this translation unit ensure that the receiver is 3020 not `nil'. This allows for more efficient entry points in the 3021 runtime to be used. This option is only available in conjunction 3022 with the NeXT runtime and ABI version 0 or 1. 3023 3024`-fobjc-abi-version=N' 3025 Use version N of the Objective-C ABI for the selected runtime. 3026 This option is currently supported only for the NeXT runtime. In 3027 that case, Version 0 is the traditional (32-bit) ABI without 3028 support for properties and other Objective-C 2.0 additions. 3029 Version 1 is the traditional (32-bit) ABI with support for 3030 properties and other Objective-C 2.0 additions. Version 2 is the 3031 modern (64-bit) ABI. If nothing is specified, the default is 3032 Version 0 on 32-bit target machines, and Version 2 on 64-bit 3033 target machines. 3034 3035`-fobjc-call-cxx-cdtors' 3036 For each Objective-C class, check if any of its instance variables 3037 is a C++ object with a non-trivial default constructor. If so, 3038 synthesize a special `- (id) .cxx_construct' instance method which 3039 runs non-trivial default constructors on any such instance 3040 variables, in order, and then return `self'. Similarly, check if 3041 any instance variable is a C++ object with a non-trivial 3042 destructor, and if so, synthesize a special `- (void) 3043 .cxx_destruct' method which runs all such default destructors, in 3044 reverse order. 3045 3046 The `- (id) .cxx_construct' and `- (void) .cxx_destruct' methods 3047 thusly generated only operate on instance variables declared in 3048 the current Objective-C class, and not those inherited from 3049 superclasses. It is the responsibility of the Objective-C runtime 3050 to invoke all such methods in an object's inheritance hierarchy. 3051 The `- (id) .cxx_construct' methods are invoked by the runtime 3052 immediately after a new object instance is allocated; the `- 3053 (void) .cxx_destruct' methods are invoked immediately before the 3054 runtime deallocates an object instance. 3055 3056 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 3057 later has support for invoking the `- (id) .cxx_construct' and `- 3058 (void) .cxx_destruct' methods. 3059 3060`-fobjc-direct-dispatch' 3061 Allow fast jumps to the message dispatcher. On Darwin this is 3062 accomplished via the comm page. 3063 3064`-fobjc-exceptions' 3065 Enable syntactic support for structured exception handling in 3066 Objective-C, similar to what is offered by C++ and Java. This 3067 option is required to use the Objective-C keywords `@try', 3068 `@throw', `@catch', `@finally' and `@synchronized'. This option 3069 is available with both the GNU runtime and the NeXT runtime (but 3070 not available in conjunction with the NeXT runtime on Mac OS X 3071 10.2 and earlier). 3072 3073`-fobjc-gc' 3074 Enable garbage collection (GC) in Objective-C and Objective-C++ 3075 programs. This option is only available with the NeXT runtime; the 3076 GNU runtime has a different garbage collection implementation that 3077 does not require special compiler flags. 3078 3079`-fobjc-nilcheck' 3080 For the NeXT runtime with version 2 of the ABI, check for a nil 3081 receiver in method invocations before doing the actual method call. 3082 This is the default and can be disabled using 3083 `-fno-objc-nilcheck'. Class methods and super calls are never 3084 checked for nil in this way no matter what this flag is set to. 3085 Currently this flag does nothing when the GNU runtime, or an older 3086 version of the NeXT runtime ABI, is used. 3087 3088`-fobjc-std=objc1' 3089 Conform to the language syntax of Objective-C 1.0, the language 3090 recognized by GCC 4.0. This only affects the Objective-C 3091 additions to the C/C++ language; it does not affect conformance to 3092 C/C++ standards, which is controlled by the separate C/C++ dialect 3093 option flags. When this option is used with the Objective-C or 3094 Objective-C++ compiler, any Objective-C syntax that is not 3095 recognized by GCC 4.0 is rejected. This is useful if you need to 3096 make sure that your Objective-C code can be compiled with older 3097 versions of GCC. 3098 3099`-freplace-objc-classes' 3100 Emit a special marker instructing `ld(1)' not to statically link in 3101 the resulting object file, and allow `dyld(1)' to load it in at 3102 run time instead. This is used in conjunction with the 3103 Fix-and-Continue debugging mode, where the object file in question 3104 may be recompiled and dynamically reloaded in the course of 3105 program execution, without the need to restart the program itself. 3106 Currently, Fix-and-Continue functionality is only available in 3107 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 3108 3109`-fzero-link' 3110 When compiling for the NeXT runtime, the compiler ordinarily 3111 replaces calls to `objc_getClass("...")' (when the name of the 3112 class is known at compile time) with static class references that 3113 get initialized at load time, which improves run-time performance. 3114 Specifying the `-fzero-link' flag suppresses this behavior and 3115 causes calls to `objc_getClass("...")' to be retained. This is 3116 useful in Zero-Link debugging mode, since it allows for individual 3117 class implementations to be modified during program execution. 3118 The GNU runtime currently always retains calls to 3119 `objc_get_class("...")' regardless of command-line options. 3120 3121`-fno-local-ivars' 3122 By default instance variables in Objective-C can be accessed as if 3123 they were local variables from within the methods of the class 3124 they're declared in. This can lead to shadowing between instance 3125 variables and other variables declared either locally inside a 3126 class method or globally with the same name. Specifying the 3127 `-fno-local-ivars' flag disables this behavior thus avoiding 3128 variable shadowing issues. 3129 3130`-fivar-visibility=[public|protected|private|package]' 3131 Set the default instance variable visibility to the specified 3132 option so that instance variables declared outside the scope of 3133 any access modifier directives default to the specified visibility. 3134 3135`-gen-decls' 3136 Dump interface declarations for all classes seen in the source 3137 file to a file named `SOURCENAME.decl'. 3138 3139`-Wassign-intercept (Objective-C and Objective-C++ only)' 3140 Warn whenever an Objective-C assignment is being intercepted by the 3141 garbage collector. 3142 3143`-Wno-protocol (Objective-C and Objective-C++ only)' 3144 If a class is declared to implement a protocol, a warning is 3145 issued for every method in the protocol that is not implemented by 3146 the class. The default behavior is to issue a warning for every 3147 method not explicitly implemented in the class, even if a method 3148 implementation is inherited from the superclass. If you use the 3149 `-Wno-protocol' option, then methods inherited from the superclass 3150 are considered to be implemented, and no warning is issued for 3151 them. 3152 3153`-Wselector (Objective-C and Objective-C++ only)' 3154 Warn if multiple methods of different types for the same selector 3155 are found during compilation. The check is performed on the list 3156 of methods in the final stage of compilation. Additionally, a 3157 check is performed for each selector appearing in a 3158 `@selector(...)' expression, and a corresponding method for that 3159 selector has been found during compilation. Because these checks 3160 scan the method table only at the end of compilation, these 3161 warnings are not produced if the final stage of compilation is not 3162 reached, for example because an error is found during compilation, 3163 or because the `-fsyntax-only' option is being used. 3164 3165`-Wstrict-selector-match (Objective-C and Objective-C++ only)' 3166 Warn if multiple methods with differing argument and/or return 3167 types are found for a given selector when attempting to send a 3168 message using this selector to a receiver of type `id' or `Class'. 3169 When this flag is off (which is the default behavior), the 3170 compiler omits such warnings if any differences found are confined 3171 to types that share the same size and alignment. 3172 3173`-Wundeclared-selector (Objective-C and Objective-C++ only)' 3174 Warn if a `@selector(...)' expression referring to an undeclared 3175 selector is found. A selector is considered undeclared if no 3176 method with that name has been declared before the 3177 `@selector(...)' expression, either explicitly in an `@interface' 3178 or `@protocol' declaration, or implicitly in an `@implementation' 3179 section. This option always performs its checks as soon as a 3180 `@selector(...)' expression is found, while `-Wselector' only 3181 performs its checks in the final stage of compilation. This also 3182 enforces the coding style convention that methods and selectors 3183 must be declared before being used. 3184 3185`-print-objc-runtime-info' 3186 Generate C header describing the largest structure that is passed 3187 by value, if any. 3188 3189 3190 3191File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 3192 31933.7 Options to Control Diagnostic Messages Formatting 3194===================================================== 3195 3196Traditionally, diagnostic messages have been formatted irrespective of 3197the output device's aspect (e.g. its width, ...). You can use the 3198options described below to control the formatting algorithm for 3199diagnostic messages, e.g. how many characters per line, how often 3200source location information should be reported. Note that some 3201language front ends may not honor these options. 3202 3203`-fmessage-length=N' 3204 Try to format error messages so that they fit on lines of about N 3205 characters. If N is zero, then no line-wrapping is done; each 3206 error message appears on a single line. This is the default for 3207 all front ends. 3208 3209`-fdiagnostics-show-location=once' 3210 Only meaningful in line-wrapping mode. Instructs the diagnostic 3211 messages reporter to emit source location information _once_; that 3212 is, in case the message is too long to fit on a single physical 3213 line and has to be wrapped, the source location won't be emitted 3214 (as prefix) again, over and over, in subsequent continuation 3215 lines. This is the default behavior. 3216 3217`-fdiagnostics-show-location=every-line' 3218 Only meaningful in line-wrapping mode. Instructs the diagnostic 3219 messages reporter to emit the same source location information (as 3220 prefix) for physical lines that result from the process of breaking 3221 a message which is too long to fit on a single line. 3222 3223`-fdiagnostics-color[=WHEN]' 3224`-fno-diagnostics-color' 3225 Use color in diagnostics. WHEN is `never', `always', or `auto'. 3226 The default depends on how the compiler has been configured, it 3227 can be any of the above WHEN options or also `never' if 3228 `GCC_COLORS' environment variable isn't present in the environment, 3229 and `auto' otherwise. `auto' means to use color only when the 3230 standard error is a terminal. The forms `-fdiagnostics-color' and 3231 `-fno-diagnostics-color' are aliases for 3232 `-fdiagnostics-color=always' and `-fdiagnostics-color=never', 3233 respectively. 3234 3235 The colors are defined by the environment variable `GCC_COLORS'. 3236 Its value is a colon-separated list of capabilities and Select 3237 Graphic Rendition (SGR) substrings. SGR commands are interpreted 3238 by the terminal or terminal emulator. (See the section in the 3239 documentation of your text terminal for permitted values and their 3240 meanings as character attributes.) These substring values are 3241 integers in decimal representation and can be concatenated with 3242 semicolons. Common values to concatenate include `1' for bold, 3243 `4' for underline, `5' for blink, `7' for inverse, `39' for 3244 default foreground color, `30' to `37' for foreground colors, `90' 3245 to `97' for 16-color mode foreground colors, `38;5;0' to `38;5;255' 3246 for 88-color and 256-color modes foreground colors, `49' for 3247 default background color, `40' to `47' for background colors, 3248 `100' to `107' for 16-color mode background colors, and `48;5;0' 3249 to `48;5;255' for 88-color and 256-color modes background colors. 3250 3251 The default `GCC_COLORS' is 3252 error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01 3253 where `01;31' is bold red, `01;35' is bold magenta, `01;36' is 3254 bold cyan, `01;32' is bold green and `01' is bold. Setting 3255 `GCC_COLORS' to the empty string disables colors. Supported 3256 capabilities are as follows. 3257 3258 `error=' 3259 SGR substring for error: markers. 3260 3261 `warning=' 3262 SGR substring for warning: markers. 3263 3264 `note=' 3265 SGR substring for note: markers. 3266 3267 `caret=' 3268 SGR substring for caret line. 3269 3270 `locus=' 3271 SGR substring for location information, `file:line' or 3272 `file:line:column' etc. 3273 3274 `quote=' 3275 SGR substring for information printed within quotes. 3276 3277`-fno-diagnostics-show-option' 3278 By default, each diagnostic emitted includes text indicating the 3279 command-line option that directly controls the diagnostic (if such 3280 an option is known to the diagnostic machinery). Specifying the 3281 `-fno-diagnostics-show-option' flag suppresses that behavior. 3282 3283`-fno-diagnostics-show-caret' 3284 By default, each diagnostic emitted includes the original source 3285 line and a caret '^' indicating the column. This option 3286 suppresses this information. The source line is truncated to N 3287 characters, if the `-fmessage-length=n' option is given. When the 3288 output is done to the terminal, the width is limited to the width 3289 given by the `COLUMNS' environment variable or, if not set, to the 3290 terminal width. 3291 3292 3293 3294File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 3295 32963.8 Options to Request or Suppress Warnings 3297=========================================== 3298 3299Warnings are diagnostic messages that report constructions that are not 3300inherently erroneous but that are risky or suggest there may have been 3301an error. 3302 3303 The following language-independent options do not enable specific 3304warnings but control the kinds of diagnostics produced by GCC. 3305 3306`-fsyntax-only' 3307 Check the code for syntax errors, but don't do anything beyond 3308 that. 3309 3310`-fmax-errors=N' 3311 Limits the maximum number of error messages to N, at which point 3312 GCC bails out rather than attempting to continue processing the 3313 source code. If N is 0 (the default), there is no limit on the 3314 number of error messages produced. If `-Wfatal-errors' is also 3315 specified, then `-Wfatal-errors' takes precedence over this option. 3316 3317`-w' 3318 Inhibit all warning messages. 3319 3320`-Werror' 3321 Make all warnings into errors. 3322 3323`-Werror=' 3324 Make the specified warning into an error. The specifier for a 3325 warning is appended; for example `-Werror=switch' turns the 3326 warnings controlled by `-Wswitch' into errors. This switch takes a 3327 negative form, to be used to negate `-Werror' for specific 3328 warnings; for example `-Wno-error=switch' makes `-Wswitch' 3329 warnings not be errors, even when `-Werror' is in effect. 3330 3331 The warning message for each controllable warning includes the 3332 option that controls the warning. That option can then be used 3333 with `-Werror=' and `-Wno-error=' as described above. (Printing 3334 of the option in the warning message can be disabled using the 3335 `-fno-diagnostics-show-option' flag.) 3336 3337 Note that specifying `-Werror='FOO automatically implies `-W'FOO. 3338 However, `-Wno-error='FOO does not imply anything. 3339 3340`-Wfatal-errors' 3341 This option causes the compiler to abort compilation on the first 3342 error occurred rather than trying to keep going and printing 3343 further error messages. 3344 3345 3346 You can request many specific warnings with options beginning with 3347`-W', for example `-Wimplicit' to request warnings on implicit 3348declarations. Each of these specific warning options also has a 3349negative form beginning `-Wno-' to turn off warnings; for example, 3350`-Wno-implicit'. This manual lists only one of the two forms, 3351whichever is not the default. For further language-specific options 3352also refer to *note C++ Dialect Options:: and *note Objective-C and 3353Objective-C++ Dialect Options::. 3354 3355 Some options, such as `-Wall' and `-Wextra', turn on other options, 3356such as `-Wunused', which may turn on further options, such as 3357`-Wunused-value'. The combined effect of positive and negative forms is 3358that more specific options have priority over less specific ones, 3359independently of their position in the command-line. For options of the 3360same specificity, the last one takes effect. Options enabled or 3361disabled via pragmas (*note Diagnostic Pragmas::) take effect as if 3362they appeared at the end of the command-line. 3363 3364 When an unrecognized warning option is requested (e.g., 3365`-Wunknown-warning'), GCC emits a diagnostic stating that the option is 3366not recognized. However, if the `-Wno-' form is used, the behavior is 3367slightly different: no diagnostic is produced for 3368`-Wno-unknown-warning' unless other diagnostics are being produced. 3369This allows the use of new `-Wno-' options with old compilers, but if 3370something goes wrong, the compiler warns that an unrecognized option is 3371present. 3372 3373`-Wpedantic' 3374`-pedantic' 3375 Issue all the warnings demanded by strict ISO C and ISO C++; 3376 reject all programs that use forbidden extensions, and some other 3377 programs that do not follow ISO C and ISO C++. For ISO C, follows 3378 the version of the ISO C standard specified by any `-std' option 3379 used. 3380 3381 Valid ISO C and ISO C++ programs should compile properly with or 3382 without this option (though a rare few require `-ansi' or a `-std' 3383 option specifying the required version of ISO C). However, 3384 without this option, certain GNU extensions and traditional C and 3385 C++ features are supported as well. With this option, they are 3386 rejected. 3387 3388 `-Wpedantic' does not cause warning messages for use of the 3389 alternate keywords whose names begin and end with `__'. Pedantic 3390 warnings are also disabled in the expression that follows 3391 `__extension__'. However, only system header files should use 3392 these escape routes; application programs should avoid them. 3393 *Note Alternate Keywords::. 3394 3395 Some users try to use `-Wpedantic' to check programs for strict ISO 3396 C conformance. They soon find that it does not do quite what they 3397 want: it finds some non-ISO practices, but not all--only those for 3398 which ISO C _requires_ a diagnostic, and some others for which 3399 diagnostics have been added. 3400 3401 A feature to report any failure to conform to ISO C might be 3402 useful in some instances, but would require considerable 3403 additional work and would be quite different from `-Wpedantic'. 3404 We don't have plans to support such a feature in the near future. 3405 3406 Where the standard specified with `-std' represents a GNU extended 3407 dialect of C, such as `gnu90' or `gnu99', there is a corresponding 3408 "base standard", the version of ISO C on which the GNU extended 3409 dialect is based. Warnings from `-Wpedantic' are given where they 3410 are required by the base standard. (It does not make sense for 3411 such warnings to be given only for features not in the specified 3412 GNU C dialect, since by definition the GNU dialects of C include 3413 all features the compiler supports with the given option, and 3414 there would be nothing to warn about.) 3415 3416`-pedantic-errors' 3417 Give an error whenever the "base standard" (see `-Wpedantic') 3418 requires a diagnostic, in some cases where there is undefined 3419 behavior at compile-time and in some other cases that do not 3420 prevent compilation of programs that are valid according to the 3421 standard. This is not equivalent to `-Werror=pedantic', since 3422 there are errors enabled by this option and not enabled by the 3423 latter and vice versa. 3424 3425`-Wall' 3426 This enables all the warnings about constructions that some users 3427 consider questionable, and that are easy to avoid (or modify to 3428 prevent the warning), even in conjunction with macros. This also 3429 enables some language-specific warnings described in *note C++ 3430 Dialect Options:: and *note Objective-C and Objective-C++ Dialect 3431 Options::. 3432 3433 `-Wall' turns on the following warning flags: 3434 3435 -Waddress 3436 -Warray-bounds=1 (only with `-O2') 3437 -Wc++11-compat -Wc++14-compat 3438 -Wchar-subscripts 3439 -Wenum-compare (in C/ObjC; this is on by default in C++) 3440 -Wimplicit-int (C and Objective-C only) 3441 -Wimplicit-function-declaration (C and Objective-C only) 3442 -Wcomment 3443 -Wformat 3444 -Wmain (only for C/ObjC and unless `-ffreestanding') 3445 -Wmaybe-uninitialized 3446 -Wmissing-braces (only for C/ObjC) 3447 -Wnonnull 3448 -Wopenmp-simd 3449 -Wparentheses 3450 -Wpointer-sign 3451 -Wreorder 3452 -Wreturn-type 3453 -Wsequence-point 3454 -Wsign-compare (only in C++) 3455 -Wstrict-aliasing 3456 -Wstrict-overflow=1 3457 -Wswitch 3458 -Wtrigraphs 3459 -Wuninitialized 3460 -Wunknown-pragmas 3461 -Wunused-function 3462 -Wunused-label 3463 -Wunused-value 3464 -Wunused-variable 3465 -Wvolatile-register-var 3466 3467 Note that some warning flags are not implied by `-Wall'. Some of 3468 them warn about constructions that users generally do not consider 3469 questionable, but which occasionally you might wish to check for; 3470 others warn about constructions that are necessary or hard to 3471 avoid in some cases, and there is no simple way to modify the code 3472 to suppress the warning. Some of them are enabled by `-Wextra' but 3473 many of them must be enabled individually. 3474 3475`-Wextra' 3476 This enables some extra warning flags that are not enabled by 3477 `-Wall'. (This option used to be called `-W'. The older name is 3478 still supported, but the newer name is more descriptive.) 3479 3480 -Wclobbered 3481 -Wempty-body 3482 -Wignored-qualifiers 3483 -Wmissing-field-initializers 3484 -Wmissing-parameter-type (C only) 3485 -Wold-style-declaration (C only) 3486 -Woverride-init 3487 -Wsign-compare 3488 -Wtype-limits 3489 -Wuninitialized 3490 -Wunused-parameter (only with `-Wunused' or `-Wall') 3491 -Wunused-but-set-parameter (only with `-Wunused' or `-Wall') 3492 3493 The option `-Wextra' also prints warning messages for the 3494 following cases: 3495 3496 * A pointer is compared against integer zero with `<', `<=', 3497 `>', or `>='. 3498 3499 * (C++ only) An enumerator and a non-enumerator both appear in a 3500 conditional expression. 3501 3502 * (C++ only) Ambiguous virtual bases. 3503 3504 * (C++ only) Subscripting an array that has been declared 3505 `register'. 3506 3507 * (C++ only) Taking the address of a variable that has been 3508 declared `register'. 3509 3510 * (C++ only) A base class is not initialized in a derived 3511 class's copy constructor. 3512 3513 3514`-Wchar-subscripts' 3515 Warn if an array subscript has type `char'. This is a common cause 3516 of error, as programmers often forget that this type is signed on 3517 some machines. This warning is enabled by `-Wall'. 3518 3519`-Wcomment' 3520 Warn whenever a comment-start sequence `/*' appears in a `/*' 3521 comment, or whenever a Backslash-Newline appears in a `//' comment. 3522 This warning is enabled by `-Wall'. 3523 3524`-Wno-coverage-mismatch' 3525 Warn if feedback profiles do not match when using the 3526 `-fprofile-use' option. If a source file is changed between 3527 compiling with `-fprofile-gen' and with `-fprofile-use', the files 3528 with the profile feedback can fail to match the source file and 3529 GCC cannot use the profile feedback information. By default, this 3530 warning is enabled and is treated as an error. 3531 `-Wno-coverage-mismatch' can be used to disable the warning or 3532 `-Wno-error=coverage-mismatch' can be used to disable the error. 3533 Disabling the error for this warning can result in poorly 3534 optimized code and is useful only in the case of very minor 3535 changes such as bug fixes to an existing code-base. Completely 3536 disabling the warning is not recommended. 3537 3538`-Wno-cpp' 3539 (C, Objective-C, C++, Objective-C++ and Fortran only) 3540 3541 Suppress warning messages emitted by `#warning' directives. 3542 3543`-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)' 3544 Give a warning when a value of type `float' is implicitly promoted 3545 to `double'. CPUs with a 32-bit "single-precision" floating-point 3546 unit implement `float' in hardware, but emulate `double' in 3547 software. On such a machine, doing computations using `double' 3548 values is much more expensive because of the overhead required for 3549 software emulation. 3550 3551 It is easy to accidentally do computations with `double' because 3552 floating-point literals are implicitly of type `double'. For 3553 example, in: 3554 float area(float radius) 3555 { 3556 return 3.14159 * radius * radius; 3557 } 3558 the compiler performs the entire computation with `double' because 3559 the floating-point literal is a `double'. 3560 3561`-Wformat' 3562`-Wformat=N' 3563 Check calls to `printf' and `scanf', etc., to make sure that the 3564 arguments supplied have types appropriate to the format string 3565 specified, and that the conversions specified in the format string 3566 make sense. This includes standard functions, and others 3567 specified by format attributes (*note Function Attributes::), in 3568 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 3569 extension, not in the C standard) families (or other 3570 target-specific families). Which functions are checked without 3571 format attributes having been specified depends on the standard 3572 version selected, and such checks of functions without the 3573 attribute specified are disabled by `-ffreestanding' or 3574 `-fno-builtin'. 3575 3576 The formats are checked against the format features supported by 3577 GNU libc version 2.2. These include all ISO C90 and C99 features, 3578 as well as features from the Single Unix Specification and some 3579 BSD and GNU extensions. Other library implementations may not 3580 support all these features; GCC does not support warning about 3581 features that go beyond a particular library's limitations. 3582 However, if `-Wpedantic' is used with `-Wformat', warnings are 3583 given about format features not in the selected standard version 3584 (but not for `strfmon' formats, since those are not in any version 3585 of the C standard). *Note Options Controlling C Dialect: C 3586 Dialect Options. 3587 3588 `-Wformat=1' 3589 `-Wformat' 3590 Option `-Wformat' is equivalent to `-Wformat=1', and 3591 `-Wno-format' is equivalent to `-Wformat=0'. Since 3592 `-Wformat' also checks for null format arguments for several 3593 functions, `-Wformat' also implies `-Wnonnull'. Some aspects 3594 of this level of format checking can be disabled by the 3595 options: `-Wno-format-contains-nul', 3596 `-Wno-format-extra-args', and `-Wno-format-zero-length'. 3597 `-Wformat' is enabled by `-Wall'. 3598 3599 `-Wno-format-contains-nul' 3600 If `-Wformat' is specified, do not warn about format strings 3601 that contain NUL bytes. 3602 3603 `-Wno-format-extra-args' 3604 If `-Wformat' is specified, do not warn about excess 3605 arguments to a `printf' or `scanf' format function. The C 3606 standard specifies that such arguments are ignored. 3607 3608 Where the unused arguments lie between used arguments that are 3609 specified with `$' operand number specifications, normally 3610 warnings are still given, since the implementation could not 3611 know what type to pass to `va_arg' to skip the unused 3612 arguments. However, in the case of `scanf' formats, this 3613 option suppresses the warning if the unused arguments are all 3614 pointers, since the Single Unix Specification says that such 3615 unused arguments are allowed. 3616 3617 `-Wno-format-zero-length' 3618 If `-Wformat' is specified, do not warn about zero-length 3619 formats. The C standard specifies that zero-length formats 3620 are allowed. 3621 3622 `-Wformat=2' 3623 Enable `-Wformat' plus additional format checks. Currently 3624 equivalent to `-Wformat -Wformat-nonliteral -Wformat-security 3625 -Wformat-y2k'. 3626 3627 `-Wformat-nonliteral' 3628 If `-Wformat' is specified, also warn if the format string is 3629 not a string literal and so cannot be checked, unless the 3630 format function takes its format arguments as a `va_list'. 3631 3632 `-Wformat-security' 3633 If `-Wformat' is specified, also warn about uses of format 3634 functions that represent possible security problems. At 3635 present, this warns about calls to `printf' and `scanf' 3636 functions where the format string is not a string literal and 3637 there are no format arguments, as in `printf (foo);'. This 3638 may be a security hole if the format string came from 3639 untrusted input and contains `%n'. (This is currently a 3640 subset of what `-Wformat-nonliteral' warns about, but in 3641 future warnings may be added to `-Wformat-security' that are 3642 not included in `-Wformat-nonliteral'.) 3643 3644 `-Wformat-signedness' 3645 If `-Wformat' is specified, also warn if the format string 3646 requires an unsigned argument and the argument is signed and 3647 vice versa. 3648 3649 `-Wformat-y2k' 3650 If `-Wformat' is specified, also warn about `strftime' 3651 formats that may yield only a two-digit year. 3652 3653`-Wnonnull' 3654 Warn about passing a null pointer for arguments marked as 3655 requiring a non-null value by the `nonnull' function attribute. 3656 3657 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 3658 disabled with the `-Wno-nonnull' option. 3659 3660`-Winit-self (C, C++, Objective-C and Objective-C++ only)' 3661 Warn about uninitialized variables that are initialized with 3662 themselves. Note this option can only be used with the 3663 `-Wuninitialized' option. 3664 3665 For example, GCC warns about `i' being uninitialized in the 3666 following snippet only when `-Winit-self' has been specified: 3667 int f() 3668 { 3669 int i = i; 3670 return i; 3671 } 3672 3673 This warning is enabled by `-Wall' in C++. 3674 3675`-Wimplicit-int (C and Objective-C only)' 3676 Warn when a declaration does not specify a type. This warning is 3677 enabled by `-Wall'. 3678 3679`-Wimplicit-function-declaration (C and Objective-C only)' 3680 Give a warning whenever a function is used before being declared. 3681 In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled 3682 by default and it is made into an error by `-pedantic-errors'. 3683 This warning is also enabled by `-Wall'. 3684 3685`-Wimplicit (C and Objective-C only)' 3686 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 3687 This warning is enabled by `-Wall'. 3688 3689`-Wignored-qualifiers (C and C++ only)' 3690 Warn if the return type of a function has a type qualifier such as 3691 `const'. For ISO C such a type qualifier has no effect, since the 3692 value returned by a function is not an lvalue. For C++, the 3693 warning is only emitted for scalar types or `void'. ISO C 3694 prohibits qualified `void' return types on function definitions, 3695 so such return types always receive a warning even without this 3696 option. 3697 3698 This warning is also enabled by `-Wextra'. 3699 3700`-Wmain' 3701 Warn if the type of `main' is suspicious. `main' should be a 3702 function with external linkage, returning int, taking either zero 3703 arguments, two, or three arguments of appropriate types. This 3704 warning is enabled by default in C++ and is enabled by either 3705 `-Wall' or `-Wpedantic'. 3706 3707`-Wmissing-braces' 3708 Warn if an aggregate or union initializer is not fully bracketed. 3709 In the following example, the initializer for `a' is not fully 3710 bracketed, but that for `b' is fully bracketed. This warning is 3711 enabled by `-Wall' in C. 3712 3713 int a[2][2] = { 0, 1, 2, 3 }; 3714 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 3715 3716 This warning is enabled by `-Wall'. 3717 3718`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 3719 Warn if a user-supplied include directory does not exist. 3720 3721`-Wparentheses' 3722 Warn if parentheses are omitted in certain contexts, such as when 3723 there is an assignment in a context where a truth value is 3724 expected, or when operators are nested whose precedence people 3725 often get confused about. 3726 3727 Also warn if a comparison like `x<=y<=z' appears; this is 3728 equivalent to `(x<=y ? 1 : 0) <= z', which is a different 3729 interpretation from that of ordinary mathematical notation. 3730 3731 Also warn about constructions where there may be confusion to which 3732 `if' statement an `else' branch belongs. Here is an example of 3733 such a case: 3734 3735 { 3736 if (a) 3737 if (b) 3738 foo (); 3739 else 3740 bar (); 3741 } 3742 3743 In C/C++, every `else' branch belongs to the innermost possible 3744 `if' statement, which in this example is `if (b)'. This is often 3745 not what the programmer expected, as illustrated in the above 3746 example by indentation the programmer chose. When there is the 3747 potential for this confusion, GCC issues a warning when this flag 3748 is specified. To eliminate the warning, add explicit braces around 3749 the innermost `if' statement so there is no way the `else' can 3750 belong to the enclosing `if'. The resulting code looks like this: 3751 3752 { 3753 if (a) 3754 { 3755 if (b) 3756 foo (); 3757 else 3758 bar (); 3759 } 3760 } 3761 3762 Also warn for dangerous uses of the GNU extension to `?:' with 3763 omitted middle operand. When the condition in the `?': operator is 3764 a boolean expression, the omitted value is always 1. Often 3765 programmers expect it to be a value computed inside the 3766 conditional expression instead. 3767 3768 This warning is enabled by `-Wall'. 3769 3770`-Wsequence-point' 3771 Warn about code that may have undefined semantics because of 3772 violations of sequence point rules in the C and C++ standards. 3773 3774 The C and C++ standards define the order in which expressions in a 3775 C/C++ program are evaluated in terms of "sequence points", which 3776 represent a partial ordering between the execution of parts of the 3777 program: those executed before the sequence point, and those 3778 executed after it. These occur after the evaluation of a full 3779 expression (one which is not part of a larger expression), after 3780 the evaluation of the first operand of a `&&', `||', `? :' or `,' 3781 (comma) operator, before a function is called (but after the 3782 evaluation of its arguments and the expression denoting the called 3783 function), and in certain other places. Other than as expressed 3784 by the sequence point rules, the order of evaluation of 3785 subexpressions of an expression is not specified. All these rules 3786 describe only a partial order rather than a total order, since, 3787 for example, if two functions are called within one expression 3788 with no sequence point between them, the order in which the 3789 functions are called is not specified. However, the standards 3790 committee have ruled that function calls do not overlap. 3791 3792 It is not specified when between sequence points modifications to 3793 the values of objects take effect. Programs whose behavior 3794 depends on this have undefined behavior; the C and C++ standards 3795 specify that "Between the previous and next sequence point an 3796 object shall have its stored value modified at most once by the 3797 evaluation of an expression. Furthermore, the prior value shall 3798 be read only to determine the value to be stored.". If a program 3799 breaks these rules, the results on any particular implementation 3800 are entirely unpredictable. 3801 3802 Examples of code with undefined behavior are `a = a++;', `a[n] = 3803 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 3804 diagnosed by this option, and it may give an occasional false 3805 positive result, but in general it has been found fairly effective 3806 at detecting this sort of problem in programs. 3807 3808 The standard is worded confusingly, therefore there is some debate 3809 over the precise meaning of the sequence point rules in subtle 3810 cases. Links to discussions of the problem, including proposed 3811 formal definitions, may be found on the GCC readings page, at 3812 `http://gcc.gnu.org/readings.html'. 3813 3814 This warning is enabled by `-Wall' for C and C++. 3815 3816`-Wno-return-local-addr' 3817 Do not warn about returning a pointer (or in C++, a reference) to a 3818 variable that goes out of scope after the function returns. 3819 3820`-Wreturn-type' 3821 Warn whenever a function is defined with a return type that 3822 defaults to `int'. Also warn about any `return' statement with no 3823 return value in a function whose return type is not `void' 3824 (falling off the end of the function body is considered returning 3825 without a value), and about a `return' statement with an 3826 expression in a function whose return type is `void'. 3827 3828 For C++, a function without return type always produces a 3829 diagnostic message, even when `-Wno-return-type' is specified. 3830 The only exceptions are `main' and functions defined in system 3831 headers. 3832 3833 This warning is enabled by `-Wall'. 3834 3835`-Wshift-count-negative' 3836 Warn if shift count is negative. This warning is enabled by 3837 default. 3838 3839`-Wshift-count-overflow' 3840 Warn if shift count >= width of type. This warning is enabled by 3841 default. 3842 3843`-Wswitch' 3844 Warn whenever a `switch' statement has an index of enumerated type 3845 and lacks a `case' for one or more of the named codes of that 3846 enumeration. (The presence of a `default' label prevents this 3847 warning.) `case' labels outside the enumeration range also 3848 provoke warnings when this option is used (even if there is a 3849 `default' label). This warning is enabled by `-Wall'. 3850 3851`-Wswitch-default' 3852 Warn whenever a `switch' statement does not have a `default' case. 3853 3854`-Wswitch-enum' 3855 Warn whenever a `switch' statement has an index of enumerated type 3856 and lacks a `case' for one or more of the named codes of that 3857 enumeration. `case' labels outside the enumeration range also 3858 provoke warnings when this option is used. The only difference 3859 between `-Wswitch' and this option is that this option gives a 3860 warning about an omitted enumeration code even if there is a 3861 `default' label. 3862 3863`-Wswitch-bool' 3864 Warn whenever a `switch' statement has an index of boolean type. 3865 It is possible to suppress this warning by casting the controlling 3866 expression to a type other than `bool'. For example: 3867 switch ((int) (a == 4)) 3868 { 3869 ... 3870 } 3871 This warning is enabled by default for C and C++ programs. 3872 3873`-Wsync-nand (C and C++ only)' 3874 Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch' 3875 built-in functions are used. These functions changed semantics in 3876 GCC 4.4. 3877 3878`-Wtrigraphs' 3879 Warn if any trigraphs are encountered that might change the 3880 meaning of the program (trigraphs within comments are not warned 3881 about). This warning is enabled by `-Wall'. 3882 3883`-Wunused-but-set-parameter' 3884 Warn whenever a function parameter is assigned to, but otherwise 3885 unused (aside from its declaration). 3886 3887 To suppress this warning use the `unused' attribute (*note 3888 Variable Attributes::). 3889 3890 This warning is also enabled by `-Wunused' together with `-Wextra'. 3891 3892`-Wunused-but-set-variable' 3893 Warn whenever a local variable is assigned to, but otherwise unused 3894 (aside from its declaration). This warning is enabled by `-Wall'. 3895 3896 To suppress this warning use the `unused' attribute (*note 3897 Variable Attributes::). 3898 3899 This warning is also enabled by `-Wunused', which is enabled by 3900 `-Wall'. 3901 3902`-Wunused-function' 3903 Warn whenever a static function is declared but not defined or a 3904 non-inline static function is unused. This warning is enabled by 3905 `-Wall'. 3906 3907`-Wunused-label' 3908 Warn whenever a label is declared but not used. This warning is 3909 enabled by `-Wall'. 3910 3911 To suppress this warning use the `unused' attribute (*note 3912 Variable Attributes::). 3913 3914`-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)' 3915 Warn when a typedef locally defined in a function is not used. 3916 This warning is enabled by `-Wall'. 3917 3918`-Wunused-parameter' 3919 Warn whenever a function parameter is unused aside from its 3920 declaration. 3921 3922 To suppress this warning use the `unused' attribute (*note 3923 Variable Attributes::). 3924 3925`-Wno-unused-result' 3926 Do not warn if a caller of a function marked with attribute 3927 `warn_unused_result' (*note Function Attributes::) does not use 3928 its return value. The default is `-Wunused-result'. 3929 3930`-Wunused-variable' 3931 Warn whenever a local variable or non-constant static variable is 3932 unused aside from its declaration. This warning is enabled by 3933 `-Wall'. 3934 3935 To suppress this warning use the `unused' attribute (*note 3936 Variable Attributes::). 3937 3938`-Wunused-value' 3939 Warn whenever a statement computes a result that is explicitly not 3940 used. To suppress this warning cast the unused expression to 3941 `void'. This includes an expression-statement or the left-hand 3942 side of a comma expression that contains no side effects. For 3943 example, an expression such as `x[i,j]' causes a warning, while 3944 `x[(void)i,j]' does not. 3945 3946 This warning is enabled by `-Wall'. 3947 3948`-Wunused' 3949 All the above `-Wunused' options combined. 3950 3951 In order to get a warning about an unused function parameter, you 3952 must either specify `-Wextra -Wunused' (note that `-Wall' implies 3953 `-Wunused'), or separately specify `-Wunused-parameter'. 3954 3955`-Wuninitialized' 3956 Warn if an automatic variable is used without first being 3957 initialized or if a variable may be clobbered by a `setjmp' call. 3958 In C++, warn if a non-static reference or non-static `const' member 3959 appears in a class without constructors. 3960 3961 If you want to warn about code that uses the uninitialized value 3962 of the variable in its own initializer, use the `-Winit-self' 3963 option. 3964 3965 These warnings occur for individual uninitialized or clobbered 3966 elements of structure, union or array variables as well as for 3967 variables that are uninitialized or clobbered as a whole. They do 3968 not occur for variables or elements declared `volatile'. Because 3969 these warnings depend on optimization, the exact variables or 3970 elements for which there are warnings depends on the precise 3971 optimization options and version of GCC used. 3972 3973 Note that there may be no warning about a variable that is used 3974 only to compute a value that itself is never used, because such 3975 computations may be deleted by data flow analysis before the 3976 warnings are printed. 3977 3978`-Wmaybe-uninitialized' 3979 For an automatic variable, if there exists a path from the function 3980 entry to a use of the variable that is initialized, but there exist 3981 some other paths for which the variable is not initialized, the 3982 compiler emits a warning if it cannot prove the uninitialized 3983 paths are not executed at run time. These warnings are made 3984 optional because GCC is not smart enough to see all the reasons 3985 why the code might be correct in spite of appearing to have an 3986 error. Here is one example of how this can happen: 3987 3988 { 3989 int x; 3990 switch (y) 3991 { 3992 case 1: x = 1; 3993 break; 3994 case 2: x = 4; 3995 break; 3996 case 3: x = 5; 3997 } 3998 foo (x); 3999 } 4000 4001 If the value of `y' is always 1, 2 or 3, then `x' is always 4002 initialized, but GCC doesn't know this. To suppress the warning, 4003 you need to provide a default case with assert(0) or similar code. 4004 4005 This option also warns when a non-volatile automatic variable 4006 might be changed by a call to `longjmp'. These warnings as well 4007 are possible only in optimizing compilation. 4008 4009 The compiler sees only the calls to `setjmp'. It cannot know 4010 where `longjmp' will be called; in fact, a signal handler could 4011 call it at any point in the code. As a result, you may get a 4012 warning even when there is in fact no problem because `longjmp' 4013 cannot in fact be called at the place that would cause a problem. 4014 4015 Some spurious warnings can be avoided if you declare all the 4016 functions you use that never return as `noreturn'. *Note Function 4017 Attributes::. 4018 4019 This warning is enabled by `-Wall' or `-Wextra'. 4020 4021`-Wunknown-pragmas' 4022 Warn when a `#pragma' directive is encountered that is not 4023 understood by GCC. If this command-line option is used, warnings 4024 are even issued for unknown pragmas in system header files. This 4025 is not the case if the warnings are only enabled by the `-Wall' 4026 command-line option. 4027 4028`-Wno-pragmas' 4029 Do not warn about misuses of pragmas, such as incorrect parameters, 4030 invalid syntax, or conflicts between pragmas. See also 4031 `-Wunknown-pragmas'. 4032 4033`-Wstrict-aliasing' 4034 This option is only active when `-fstrict-aliasing' is active. It 4035 warns about code that might break the strict aliasing rules that 4036 the compiler is using for optimization. The warning does not 4037 catch all cases, but does attempt to catch the more common 4038 pitfalls. It is included in `-Wall'. It is equivalent to 4039 `-Wstrict-aliasing=3' 4040 4041`-Wstrict-aliasing=n' 4042 This option is only active when `-fstrict-aliasing' is active. It 4043 warns about code that might break the strict aliasing rules that 4044 the compiler is using for optimization. Higher levels correspond 4045 to higher accuracy (fewer false positives). Higher levels also 4046 correspond to more effort, similar to the way `-O' works. 4047 `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=3'. 4048 4049 Level 1: Most aggressive, quick, least accurate. Possibly useful 4050 when higher levels do not warn but `-fstrict-aliasing' still 4051 breaks the code, as it has very few false negatives. However, it 4052 has many false positives. Warns for all pointer conversions 4053 between possibly incompatible types, even if never dereferenced. 4054 Runs in the front end only. 4055 4056 Level 2: Aggressive, quick, not too precise. May still have many 4057 false positives (not as many as level 1 though), and few false 4058 negatives (but possibly more than level 1). Unlike level 1, it 4059 only warns when an address is taken. Warns about incomplete 4060 types. Runs in the front end only. 4061 4062 Level 3 (default for `-Wstrict-aliasing'): Should have very few 4063 false positives and few false negatives. Slightly slower than 4064 levels 1 or 2 when optimization is enabled. Takes care of the 4065 common pun+dereference pattern in the front end: 4066 `*(int*)&some_float'. If optimization is enabled, it also runs in 4067 the back end, where it deals with multiple statement cases using 4068 flow-sensitive points-to information. Only warns when the 4069 converted pointer is dereferenced. Does not warn about incomplete 4070 types. 4071 4072`-Wstrict-overflow' 4073`-Wstrict-overflow=N' 4074 This option is only active when `-fstrict-overflow' is active. It 4075 warns about cases where the compiler optimizes based on the 4076 assumption that signed overflow does not occur. Note that it does 4077 not warn about all cases where the code might overflow: it only 4078 warns about cases where the compiler implements some optimization. 4079 Thus this warning depends on the optimization level. 4080 4081 An optimization that assumes that signed overflow does not occur is 4082 perfectly safe if the values of the variables involved are such 4083 that overflow never does, in fact, occur. Therefore this warning 4084 can easily give a false positive: a warning about code that is not 4085 actually a problem. To help focus on important issues, several 4086 warning levels are defined. No warnings are issued for the use of 4087 undefined signed overflow when estimating how many iterations a 4088 loop requires, in particular when determining whether a loop will 4089 be executed at all. 4090 4091 `-Wstrict-overflow=1' 4092 Warn about cases that are both questionable and easy to 4093 avoid. For example, with `-fstrict-overflow', the compiler 4094 simplifies `x + 1 > x' to `1'. This level of 4095 `-Wstrict-overflow' is enabled by `-Wall'; higher levels are 4096 not, and must be explicitly requested. 4097 4098 `-Wstrict-overflow=2' 4099 Also warn about other cases where a comparison is simplified 4100 to a constant. For example: `abs (x) >= 0'. This can only be 4101 simplified when `-fstrict-overflow' is in effect, because 4102 `abs (INT_MIN)' overflows to `INT_MIN', which is less than 4103 zero. `-Wstrict-overflow' (with no level) is the same as 4104 `-Wstrict-overflow=2'. 4105 4106 `-Wstrict-overflow=3' 4107 Also warn about other cases where a comparison is simplified. 4108 For example: `x + 1 > 1' is simplified to `x > 0'. 4109 4110 `-Wstrict-overflow=4' 4111 Also warn about other simplifications not covered by the 4112 above cases. For example: `(x * 10) / 5' is simplified to `x 4113 * 2'. 4114 4115 `-Wstrict-overflow=5' 4116 Also warn about cases where the compiler reduces the 4117 magnitude of a constant involved in a comparison. For 4118 example: `x + 2 > y' is simplified to `x + 1 >= y'. This is 4119 reported only at the highest warning level because this 4120 simplification applies to many comparisons, so this warning 4121 level gives a very large number of false positives. 4122 4123`-Wsuggest-attribute=[pure|const|noreturn|format]' 4124 Warn for cases where adding an attribute may be beneficial. The 4125 attributes currently supported are listed below. 4126 4127 `-Wsuggest-attribute=pure' 4128 `-Wsuggest-attribute=const' 4129 `-Wsuggest-attribute=noreturn' 4130 Warn about functions that might be candidates for attributes 4131 `pure', `const' or `noreturn'. The compiler only warns for 4132 functions visible in other compilation units or (in the case 4133 of `pure' and `const') if it cannot prove that the function 4134 returns normally. A function returns normally if it doesn't 4135 contain an infinite loop or return abnormally by throwing, 4136 calling `abort' or trapping. This analysis requires option 4137 `-fipa-pure-const', which is enabled by default at `-O' and 4138 higher. Higher optimization levels improve the accuracy of 4139 the analysis. 4140 4141 `-Wsuggest-attribute=format' 4142 `-Wmissing-format-attribute' 4143 Warn about function pointers that might be candidates for 4144 `format' attributes. Note these are only possible 4145 candidates, not absolute ones. GCC guesses that function 4146 pointers with `format' attributes that are used in 4147 assignment, initialization, parameter passing or return 4148 statements should have a corresponding `format' attribute in 4149 the resulting type. I.e. the left-hand side of the 4150 assignment or initialization, the type of the parameter 4151 variable, or the return type of the containing function 4152 respectively should also have a `format' attribute to avoid 4153 the warning. 4154 4155 GCC also warns about function definitions that might be 4156 candidates for `format' attributes. Again, these are only 4157 possible candidates. GCC guesses that `format' attributes 4158 might be appropriate for any function that calls a function 4159 like `vprintf' or `vscanf', but this might not always be the 4160 case, and some functions for which `format' attributes are 4161 appropriate may not be detected. 4162 4163`-Wsuggest-final-types' 4164 Warn about types with virtual methods where code quality would be 4165 improved if the type were declared with the C++11 `final' 4166 specifier, or, if possible, declared in an anonymous namespace. 4167 This allows GCC to more aggressively devirtualize the polymorphic 4168 calls. This warning is more effective with link time optimization, 4169 where the information about the class hierarchy graph is more 4170 complete. 4171 4172`-Wsuggest-final-methods' 4173 Warn about virtual methods where code quality would be improved if 4174 the method were declared with the C++11 `final' specifier, or, if 4175 possible, its type were declared in an anonymous namespace or with 4176 the `final' specifier. This warning is more effective with link 4177 time optimization, where the information about the class hierarchy 4178 graph is more complete. It is recommended to first consider 4179 suggestions of `-Wsuggest-final-types' and then rebuild with new 4180 annotations. 4181 4182`-Wsuggest-override' 4183 Warn about overriding virtual functions that are not marked with 4184 the override keyword. 4185 4186`-Warray-bounds' 4187`-Warray-bounds=N' 4188 This option is only active when `-ftree-vrp' is active (default 4189 for `-O2' and above). It warns about subscripts to arrays that are 4190 always out of bounds. This warning is enabled by `-Wall'. 4191 4192 `-Warray-bounds=1' 4193 This is the warning level of `-Warray-bounds' and is enabled 4194 by `-Wall'; higher levels are not, and must be explicitly 4195 requested. 4196 4197 `-Warray-bounds=2' 4198 This warning level also warns about out of bounds access for 4199 arrays at the end of a struct and for arrays accessed through 4200 pointers. This warning level may give a larger number of 4201 false positives and is deactivated by default. 4202 4203`-Wbool-compare' 4204 Warn about boolean expression compared with an integer value 4205 different from `true'/`false'. For instance, the following 4206 comparison is always false: 4207 int n = 5; 4208 ... 4209 if ((n > 1) == 2) { ... } 4210 This warning is enabled by `-Wall'. 4211 4212`-Wno-discarded-qualifiers (C and Objective-C only)' 4213 Do not warn if type qualifiers on pointers are being discarded. 4214 Typically, the compiler warns if a `const char *' variable is 4215 passed to a function that takes a `char *' parameter. This option 4216 can be used to suppress such a warning. 4217 4218`-Wno-discarded-array-qualifiers (C and Objective-C only)' 4219 Do not warn if type qualifiers on arrays which are pointer targets 4220 are being discarded. Typically, the compiler warns if a `const int 4221 (*)[]' variable is passed to a function that takes a `int (*)[]' 4222 parameter. This option can be used to suppress such a warning. 4223 4224`-Wno-incompatible-pointer-types (C and Objective-C only)' 4225 Do not warn when there is a conversion between pointers that have 4226 incompatible types. This warning is for cases not covered by 4227 `-Wno-pointer-sign', which warns for pointer argument passing or 4228 assignment with different signedness. 4229 4230`-Wno-int-conversion (C and Objective-C only)' 4231 Do not warn about incompatible integer to pointer and pointer to 4232 integer conversions. This warning is about implicit conversions; 4233 for explicit conversions the warnings `-Wno-int-to-pointer-cast' 4234 and `-Wno-pointer-to-int-cast' may be used. 4235 4236`-Wno-div-by-zero' 4237 Do not warn about compile-time integer division by zero. 4238 Floating-point division by zero is not warned about, as it can be 4239 a legitimate way of obtaining infinities and NaNs. 4240 4241`-Wsystem-headers' 4242 Print warning messages for constructs found in system header files. 4243 Warnings from system headers are normally suppressed, on the 4244 assumption that they usually do not indicate real problems and 4245 would only make the compiler output harder to read. Using this 4246 command-line option tells GCC to emit warnings from system headers 4247 as if they occurred in user code. However, note that using 4248 `-Wall' in conjunction with this option does _not_ warn about 4249 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 4250 must also be used. 4251 4252`-Wtrampolines' 4253 Warn about trampolines generated for pointers to nested functions. 4254 A trampoline is a small piece of data or code that is created at 4255 run time on the stack when the address of a nested function is 4256 taken, and is used to call the nested function indirectly. For 4257 some targets, it is made up of data only and thus requires no 4258 special treatment. But, for most targets, it is made up of code 4259 and thus requires the stack to be made executable in order for the 4260 program to work properly. 4261 4262`-Wfloat-equal' 4263 Warn if floating-point values are used in equality comparisons. 4264 4265 The idea behind this is that sometimes it is convenient (for the 4266 programmer) to consider floating-point values as approximations to 4267 infinitely precise real numbers. If you are doing this, then you 4268 need to compute (by analyzing the code, or in some other way) the 4269 maximum or likely maximum error that the computation introduces, 4270 and allow for it when performing comparisons (and when producing 4271 output, but that's a different problem). In particular, instead 4272 of testing for equality, you should check to see whether the two 4273 values have ranges that overlap; and this is done with the 4274 relational operators, so equality comparisons are probably 4275 mistaken. 4276 4277`-Wtraditional (C and Objective-C only)' 4278 Warn about certain constructs that behave differently in 4279 traditional and ISO C. Also warn about ISO C constructs that have 4280 no traditional C equivalent, and/or problematic constructs that 4281 should be avoided. 4282 4283 * Macro parameters that appear within string literals in the 4284 macro body. In traditional C macro replacement takes place 4285 within string literals, but in ISO C it does not. 4286 4287 * In traditional C, some preprocessor directives did not exist. 4288 Traditional preprocessors only considered a line to be a 4289 directive if the `#' appeared in column 1 on the line. 4290 Therefore `-Wtraditional' warns about directives that 4291 traditional C understands but ignores because the `#' does 4292 not appear as the first character on the line. It also 4293 suggests you hide directives like `#pragma' not understood by 4294 traditional C by indenting them. Some traditional 4295 implementations do not recognize `#elif', so this option 4296 suggests avoiding it altogether. 4297 4298 * A function-like macro that appears without arguments. 4299 4300 * The unary plus operator. 4301 4302 * The `U' integer constant suffix, or the `F' or `L' 4303 floating-point constant suffixes. (Traditional C does 4304 support the `L' suffix on integer constants.) Note, these 4305 suffixes appear in macros defined in the system headers of 4306 most modern systems, e.g. the `_MIN'/`_MAX' macros in 4307 `<limits.h>'. Use of these macros in user code might 4308 normally lead to spurious warnings, however GCC's integrated 4309 preprocessor has enough context to avoid warning in these 4310 cases. 4311 4312 * A function declared external in one block and then used after 4313 the end of the block. 4314 4315 * A `switch' statement has an operand of type `long'. 4316 4317 * A non-`static' function declaration follows a `static' one. 4318 This construct is not accepted by some traditional C 4319 compilers. 4320 4321 * The ISO type of an integer constant has a different width or 4322 signedness from its traditional type. This warning is only 4323 issued if the base of the constant is ten. I.e. hexadecimal 4324 or octal values, which typically represent bit patterns, are 4325 not warned about. 4326 4327 * Usage of ISO string concatenation is detected. 4328 4329 * Initialization of automatic aggregates. 4330 4331 * Identifier conflicts with labels. Traditional C lacks a 4332 separate namespace for labels. 4333 4334 * Initialization of unions. If the initializer is zero, the 4335 warning is omitted. This is done under the assumption that 4336 the zero initializer in user code appears conditioned on e.g. 4337 `__STDC__' to avoid missing initializer warnings and relies 4338 on default initialization to zero in the traditional C case. 4339 4340 * Conversions by prototypes between fixed/floating-point values 4341 and vice versa. The absence of these prototypes when 4342 compiling with traditional C causes serious problems. This 4343 is a subset of the possible conversion warnings; for the full 4344 set use `-Wtraditional-conversion'. 4345 4346 * Use of ISO C style function definitions. This warning 4347 intentionally is _not_ issued for prototype declarations or 4348 variadic functions because these ISO C features appear in 4349 your code when using libiberty's traditional C compatibility 4350 macros, `PARAMS' and `VPARAMS'. This warning is also 4351 bypassed for nested functions because that feature is already 4352 a GCC extension and thus not relevant to traditional C 4353 compatibility. 4354 4355`-Wtraditional-conversion (C and Objective-C only)' 4356 Warn if a prototype causes a type conversion that is different 4357 from what would happen to the same argument in the absence of a 4358 prototype. This includes conversions of fixed point to floating 4359 and vice versa, and conversions changing the width or signedness 4360 of a fixed-point argument except when the same as the default 4361 promotion. 4362 4363`-Wdeclaration-after-statement (C and Objective-C only)' 4364 Warn when a declaration is found after a statement in a block. 4365 This construct, known from C++, was introduced with ISO C99 and is 4366 by default allowed in GCC. It is not supported by ISO C90. *Note 4367 Mixed Declarations::. 4368 4369`-Wundef' 4370 Warn if an undefined identifier is evaluated in an `#if' directive. 4371 4372`-Wno-endif-labels' 4373 Do not warn whenever an `#else' or an `#endif' are followed by 4374 text. 4375 4376`-Wshadow' 4377 Warn whenever a local variable or type declaration shadows another 4378 variable, parameter, type, class member (in C++), or instance 4379 variable (in Objective-C) or whenever a built-in function is 4380 shadowed. Note that in C++, the compiler warns if a local variable 4381 shadows an explicit typedef, but not if it shadows a 4382 struct/class/enum. 4383 4384`-Wno-shadow-ivar (Objective-C only)' 4385 Do not warn whenever a local variable shadows an instance variable 4386 in an Objective-C method. 4387 4388`-Wlarger-than=LEN' 4389 Warn whenever an object of larger than LEN bytes is defined. 4390 4391`-Wframe-larger-than=LEN' 4392 Warn if the size of a function frame is larger than LEN bytes. 4393 The computation done to determine the stack frame size is 4394 approximate and not conservative. The actual requirements may be 4395 somewhat greater than LEN even if you do not get a warning. In 4396 addition, any space allocated via `alloca', variable-length 4397 arrays, or related constructs is not included by the compiler when 4398 determining whether or not to issue a warning. 4399 4400`-Wno-free-nonheap-object' 4401 Do not warn when attempting to free an object that was not 4402 allocated on the heap. 4403 4404`-Wstack-usage=LEN' 4405 Warn if the stack usage of a function might be larger than LEN 4406 bytes. The computation done to determine the stack usage is 4407 conservative. Any space allocated via `alloca', variable-length 4408 arrays, or related constructs is included by the compiler when 4409 determining whether or not to issue a warning. 4410 4411 The message is in keeping with the output of `-fstack-usage'. 4412 4413 * If the stack usage is fully static but exceeds the specified 4414 amount, it's: 4415 4416 warning: stack usage is 1120 bytes 4417 4418 * If the stack usage is (partly) dynamic but bounded, it's: 4419 4420 warning: stack usage might be 1648 bytes 4421 4422 * If the stack usage is (partly) dynamic and not bounded, it's: 4423 4424 warning: stack usage might be unbounded 4425 4426`-Wunsafe-loop-optimizations' 4427 Warn if the loop cannot be optimized because the compiler cannot 4428 assume anything on the bounds of the loop indices. With 4429 `-funsafe-loop-optimizations' warn if the compiler makes such 4430 assumptions. 4431 4432`-Wno-pedantic-ms-format (MinGW targets only)' 4433 When used in combination with `-Wformat' and `-pedantic' without 4434 GNU extensions, this option disables the warnings about non-ISO 4435 `printf' / `scanf' format width specifiers `I32', `I64', and `I' 4436 used on Windows targets, which depend on the MS runtime. 4437 4438`-Wpointer-arith' 4439 Warn about anything that depends on the "size of" a function type 4440 or of `void'. GNU C assigns these types a size of 1, for 4441 convenience in calculations with `void *' pointers and pointers to 4442 functions. In C++, warn also when an arithmetic operation involves 4443 `NULL'. This warning is also enabled by `-Wpedantic'. 4444 4445`-Wtype-limits' 4446 Warn if a comparison is always true or always false due to the 4447 limited range of the data type, but do not warn for constant 4448 expressions. For example, warn if an unsigned variable is 4449 compared against zero with `<' or `>='. This warning is also 4450 enabled by `-Wextra'. 4451 4452`-Wbad-function-cast (C and Objective-C only)' 4453 Warn when a function call is cast to a non-matching type. For 4454 example, warn if a call to a function returning an integer type is 4455 cast to a pointer type. 4456 4457`-Wc90-c99-compat (C and Objective-C only)' 4458 Warn about features not present in ISO C90, but present in ISO C99. 4459 For instance, warn about use of variable length arrays, `long long' 4460 type, `bool' type, compound literals, designated initializers, and 4461 so on. This option is independent of the standards mode. 4462 Warnings are disabled in the expression that follows 4463 `__extension__'. 4464 4465`-Wc99-c11-compat (C and Objective-C only)' 4466 Warn about features not present in ISO C99, but present in ISO C11. 4467 For instance, warn about use of anonymous structures and unions, 4468 `_Atomic' type qualifier, `_Thread_local' storage-class specifier, 4469 `_Alignas' specifier, `Alignof' operator, `_Generic' keyword, and 4470 so on. This option is independent of the standards mode. 4471 Warnings are disabled in the expression that follows 4472 `__extension__'. 4473 4474`-Wc++-compat (C and Objective-C only)' 4475 Warn about ISO C constructs that are outside of the common subset 4476 of ISO C and ISO C++, e.g. request for implicit conversion from 4477 `void *' to a pointer to non-`void' type. 4478 4479`-Wc++11-compat (C++ and Objective-C++ only)' 4480 Warn about C++ constructs whose meaning differs between ISO C++ 4481 1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are 4482 keywords in ISO C++ 2011. This warning turns on `-Wnarrowing' and 4483 is enabled by `-Wall'. 4484 4485`-Wc++14-compat (C++ and Objective-C++ only)' 4486 Warn about C++ constructs whose meaning differs between ISO C++ 4487 2011 and ISO C++ 2014. This warning is enabled by `-Wall'. 4488 4489`-Wcast-qual' 4490 Warn whenever a pointer is cast so as to remove a type qualifier 4491 from the target type. For example, warn if a `const char *' is 4492 cast to an ordinary `char *'. 4493 4494 Also warn when making a cast that introduces a type qualifier in an 4495 unsafe way. For example, casting `char **' to `const char **' is 4496 unsafe, as in this example: 4497 4498 /* p is char ** value. */ 4499 const char **q = (const char **) p; 4500 /* Assignment of readonly string to const char * is OK. */ 4501 *q = "string"; 4502 /* Now char** pointer points to read-only memory. */ 4503 **p = 'b'; 4504 4505`-Wcast-align' 4506 Warn whenever a pointer is cast such that the required alignment 4507 of the target is increased. For example, warn if a `char *' is 4508 cast to an `int *' on machines where integers can only be accessed 4509 at two- or four-byte boundaries. 4510 4511`-Wwrite-strings' 4512 When compiling C, give string constants the type `const 4513 char[LENGTH]' so that copying the address of one into a 4514 non-`const' `char *' pointer produces a warning. These warnings 4515 help you find at compile time code that can try to write into a 4516 string constant, but only if you have been very careful about 4517 using `const' in declarations and prototypes. Otherwise, it is 4518 just a nuisance. This is why we did not make `-Wall' request these 4519 warnings. 4520 4521 When compiling C++, warn about the deprecated conversion from 4522 string literals to `char *'. This warning is enabled by default 4523 for C++ programs. 4524 4525`-Wclobbered' 4526 Warn for variables that might be changed by `longjmp' or `vfork'. 4527 This warning is also enabled by `-Wextra'. 4528 4529`-Wconditionally-supported (C++ and Objective-C++ only)' 4530 Warn for conditionally-supported (C++11 [intro.defs]) constructs. 4531 4532`-Wconversion' 4533 Warn for implicit conversions that may alter a value. This includes 4534 conversions between real and integer, like `abs (x)' when `x' is 4535 `double'; conversions between signed and unsigned, like `unsigned 4536 ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'. 4537 Do not warn for explicit casts like `abs ((int) x)' and `ui = 4538 (unsigned) -1', or if the value is not changed by the conversion 4539 like in `abs (2.0)'. Warnings about conversions between signed 4540 and unsigned integers can be disabled by using 4541 `-Wno-sign-conversion'. 4542 4543 For C++, also warn for confusing overload resolution for 4544 user-defined conversions; and conversions that never use a type 4545 conversion operator: conversions to `void', the same type, a base 4546 class or a reference to them. Warnings about conversions between 4547 signed and unsigned integers are disabled by default in C++ unless 4548 `-Wsign-conversion' is explicitly enabled. 4549 4550`-Wno-conversion-null (C++ and Objective-C++ only)' 4551 Do not warn for conversions between `NULL' and non-pointer types. 4552 `-Wconversion-null' is enabled by default. 4553 4554`-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)' 4555 Warn when a literal '0' is used as null pointer constant. This can 4556 be useful to facilitate the conversion to `nullptr' in C++11. 4557 4558`-Wdate-time' 4559 Warn when macros `__TIME__', `__DATE__' or `__TIMESTAMP__' are 4560 encountered as they might prevent bit-wise-identical reproducible 4561 compilations. 4562 4563`-Wdelete-incomplete (C++ and Objective-C++ only)' 4564 Warn when deleting a pointer to incomplete type, which may cause 4565 undefined behavior at runtime. This warning is enabled by default. 4566 4567`-Wuseless-cast (C++ and Objective-C++ only)' 4568 Warn when an expression is casted to its own type. 4569 4570`-Wempty-body' 4571 Warn if an empty body occurs in an `if', `else' or `do while' 4572 statement. This warning is also enabled by `-Wextra'. 4573 4574`-Wenum-compare' 4575 Warn about a comparison between values of different enumerated 4576 types. In C++ enumeral mismatches in conditional expressions are 4577 also diagnosed and the warning is enabled by default. In C this 4578 warning is enabled by `-Wall'. 4579 4580`-Wjump-misses-init (C, Objective-C only)' 4581 Warn if a `goto' statement or a `switch' statement jumps forward 4582 across the initialization of a variable, or jumps backward to a 4583 label after the variable has been initialized. This only warns 4584 about variables that are initialized when they are declared. This 4585 warning is only supported for C and Objective-C; in C++ this sort 4586 of branch is an error in any case. 4587 4588 `-Wjump-misses-init' is included in `-Wc++-compat'. It can be 4589 disabled with the `-Wno-jump-misses-init' option. 4590 4591`-Wsign-compare' 4592 Warn when a comparison between signed and unsigned values could 4593 produce an incorrect result when the signed value is converted to 4594 unsigned. This warning is also enabled by `-Wextra'; to get the 4595 other warnings of `-Wextra' without this warning, use `-Wextra 4596 -Wno-sign-compare'. 4597 4598`-Wsign-conversion' 4599 Warn for implicit conversions that may change the sign of an 4600 integer value, like assigning a signed integer expression to an 4601 unsigned integer variable. An explicit cast silences the warning. 4602 In C, this option is enabled also by `-Wconversion'. 4603 4604`-Wfloat-conversion' 4605 Warn for implicit conversions that reduce the precision of a real 4606 value. This includes conversions from real to integer, and from 4607 higher precision real to lower precision real values. This option 4608 is also enabled by `-Wconversion'. 4609 4610`-Wsized-deallocation (C++ and Objective-C++ only)' 4611 Warn about a definition of an unsized deallocation function 4612 void operator delete (void *) noexcept; 4613 void operator delete[] (void *) noexcept; 4614 without a definition of the corresponding sized deallocation 4615 function 4616 void operator delete (void *, std::size_t) noexcept; 4617 void operator delete[] (void *, std::size_t) noexcept; 4618 or vice versa. Enabled by `-Wextra' along with 4619 `-fsized-deallocation'. 4620 4621`-Wsizeof-pointer-memaccess' 4622 Warn for suspicious length parameters to certain string and memory 4623 built-in functions if the argument uses `sizeof'. This warning 4624 warns e.g. about `memset (ptr, 0, sizeof (ptr));' if `ptr' is not 4625 an array, but a pointer, and suggests a possible fix, or about 4626 `memcpy (&foo, ptr, sizeof (&foo));'. This warning is enabled by 4627 `-Wall'. 4628 4629`-Wsizeof-array-argument' 4630 Warn when the `sizeof' operator is applied to a parameter that is 4631 declared as an array in a function definition. This warning is 4632 enabled by default for C and C++ programs. 4633 4634`-Wmemset-transposed-args' 4635 Warn for suspicious calls to the `memset' built-in function, if the 4636 second argument is not zero and the third argument is zero. This 4637 warns e.g. about `memset (buf, sizeof buf, 0)' where most probably 4638 `memset (buf, 0, sizeof buf)' was meant instead. The diagnostics 4639 is only emitted if the third argument is literal zero. If it is 4640 some expression that is folded to zero, a cast of zero to some 4641 type, etc., it is far less likely that the user has mistakenly 4642 exchanged the arguments and no warning is emitted. This warning 4643 is enabled by `-Wall'. 4644 4645`-Waddress' 4646 Warn about suspicious uses of memory addresses. These include using 4647 the address of a function in a conditional expression, such as 4648 `void func(void); if (func)', and comparisons against the memory 4649 address of a string literal, such as `if (x == "abc")'. Such uses 4650 typically indicate a programmer error: the address of a function 4651 always evaluates to true, so their use in a conditional usually 4652 indicate that the programmer forgot the parentheses in a function 4653 call; and comparisons against string literals result in unspecified 4654 behavior and are not portable in C, so they usually indicate that 4655 the programmer intended to use `strcmp'. This warning is enabled 4656 by `-Wall'. 4657 4658`-Wlogical-op' 4659 Warn about suspicious uses of logical operators in expressions. 4660 This includes using logical operators in contexts where a bit-wise 4661 operator is likely to be expected. 4662 4663`-Wlogical-not-parentheses' 4664 Warn about logical not used on the left hand side operand of a 4665 comparison. This option does not warn if the RHS operand is of a 4666 boolean type. Its purpose is to detect suspicious code like the 4667 following: 4668 int a; 4669 ... 4670 if (!a > 1) { ... } 4671 4672 It is possible to suppress the warning by wrapping the LHS into 4673 parentheses: 4674 if ((!a) > 1) { ... } 4675 4676 This warning is enabled by `-Wall'. 4677 4678`-Waggregate-return' 4679 Warn if any functions that return structures or unions are defined 4680 or called. (In languages where you can return an array, this also 4681 elicits a warning.) 4682 4683`-Wno-aggressive-loop-optimizations' 4684 Warn if in a loop with constant number of iterations the compiler 4685 detects undefined behavior in some statement during one or more of 4686 the iterations. 4687 4688`-Wno-attributes' 4689 Do not warn if an unexpected `__attribute__' is used, such as 4690 unrecognized attributes, function attributes applied to variables, 4691 etc. This does not stop errors for incorrect use of supported 4692 attributes. 4693 4694`-Wno-builtin-macro-redefined' 4695 Do not warn if certain built-in macros are redefined. This 4696 suppresses warnings for redefinition of `__TIMESTAMP__', 4697 `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'. 4698 4699`-Wstrict-prototypes (C and Objective-C only)' 4700 Warn if a function is declared or defined without specifying the 4701 argument types. (An old-style function definition is permitted 4702 without a warning if preceded by a declaration that specifies the 4703 argument types.) 4704 4705`-Wold-style-declaration (C and Objective-C only)' 4706 Warn for obsolescent usages, according to the C Standard, in a 4707 declaration. For example, warn if storage-class specifiers like 4708 `static' are not the first things in a declaration. This warning 4709 is also enabled by `-Wextra'. 4710 4711`-Wold-style-definition (C and Objective-C only)' 4712 Warn if an old-style function definition is used. A warning is 4713 given even if there is a previous prototype. 4714 4715`-Wmissing-parameter-type (C and Objective-C only)' 4716 A function parameter is declared without a type specifier in 4717 K&R-style functions: 4718 4719 void foo(bar) { } 4720 4721 This warning is also enabled by `-Wextra'. 4722 4723`-Wmissing-prototypes (C and Objective-C only)' 4724 Warn if a global function is defined without a previous prototype 4725 declaration. This warning is issued even if the definition itself 4726 provides a prototype. Use this option to detect global functions 4727 that do not have a matching prototype declaration in a header file. 4728 This option is not valid for C++ because all function declarations 4729 provide prototypes and a non-matching declaration declares an 4730 overload rather than conflict with an earlier declaration. Use 4731 `-Wmissing-declarations' to detect missing declarations in C++. 4732 4733`-Wmissing-declarations' 4734 Warn if a global function is defined without a previous 4735 declaration. Do so even if the definition itself provides a 4736 prototype. Use this option to detect global functions that are 4737 not declared in header files. In C, no warnings are issued for 4738 functions with previous non-prototype declarations; use 4739 `-Wmissing-prototypes' to detect missing prototypes. In C++, no 4740 warnings are issued for function templates, or for inline 4741 functions, or for functions in anonymous namespaces. 4742 4743`-Wmissing-field-initializers' 4744 Warn if a structure's initializer has some fields missing. For 4745 example, the following code causes such a warning, because `x.h' 4746 is implicitly zero: 4747 4748 struct s { int f, g, h; }; 4749 struct s x = { 3, 4 }; 4750 4751 This option does not warn about designated initializers, so the 4752 following modification does not trigger a warning: 4753 4754 struct s { int f, g, h; }; 4755 struct s x = { .f = 3, .g = 4 }; 4756 4757 In C++ this option does not warn either about the empty { } 4758 initializer, for example: 4759 4760 struct s { int f, g, h; }; 4761 s x = { }; 4762 4763 This warning is included in `-Wextra'. To get other `-Wextra' 4764 warnings without this one, use `-Wextra 4765 -Wno-missing-field-initializers'. 4766 4767`-Wno-multichar' 4768 Do not warn if a multicharacter constant (`'FOOF'') is used. 4769 Usually they indicate a typo in the user's code, as they have 4770 implementation-defined values, and should not be used in portable 4771 code. 4772 4773`-Wnormalized[=<none|id|nfc|nfkc>]' 4774 In ISO C and ISO C++, two identifiers are different if they are 4775 different sequences of characters. However, sometimes when 4776 characters outside the basic ASCII character set are used, you can 4777 have two different character sequences that look the same. To 4778 avoid confusion, the ISO 10646 standard sets out some 4779 "normalization rules" which when applied ensure that two sequences 4780 that look the same are turned into the same sequence. GCC can 4781 warn you if you are using identifiers that have not been 4782 normalized; this option controls that warning. 4783 4784 There are four levels of warning supported by GCC. The default is 4785 `-Wnormalized=nfc', which warns about any identifier that is not 4786 in the ISO 10646 "C" normalized form, "NFC". NFC is the 4787 recommended form for most uses. It is equivalent to 4788 `-Wnormalized'. 4789 4790 Unfortunately, there are some characters allowed in identifiers by 4791 ISO C and ISO C++ that, when turned into NFC, are not allowed in 4792 identifiers. That is, there's no way to use these symbols in 4793 portable ISO C or C++ and have all your identifiers in NFC. 4794 `-Wnormalized=id' suppresses the warning for these characters. It 4795 is hoped that future versions of the standards involved will 4796 correct this, which is why this option is not the default. 4797 4798 You can switch the warning off for all characters by writing 4799 `-Wnormalized=none' or `-Wno-normalized'. You should only do this 4800 if you are using some other normalization scheme (like "D"), 4801 because otherwise you can easily create bugs that are literally 4802 impossible to see. 4803 4804 Some characters in ISO 10646 have distinct meanings but look 4805 identical in some fonts or display methodologies, especially once 4806 formatting has been applied. For instance `\u207F', "SUPERSCRIPT 4807 LATIN SMALL LETTER N", displays just like a regular `n' that has 4808 been placed in a superscript. ISO 10646 defines the "NFKC" 4809 normalization scheme to convert all these into a standard form as 4810 well, and GCC warns if your code is not in NFKC if you use 4811 `-Wnormalized=nfkc'. This warning is comparable to warning about 4812 every identifier that contains the letter O because it might be 4813 confused with the digit 0, and so is not the default, but may be 4814 useful as a local coding convention if the programming environment 4815 cannot be fixed to display these characters distinctly. 4816 4817`-Wno-deprecated' 4818 Do not warn about usage of deprecated features. *Note Deprecated 4819 Features::. 4820 4821`-Wno-deprecated-declarations' 4822 Do not warn about uses of functions (*note Function Attributes::), 4823 variables (*note Variable Attributes::), and types (*note Type 4824 Attributes::) marked as deprecated by using the `deprecated' 4825 attribute. 4826 4827`-Wno-overflow' 4828 Do not warn about compile-time overflow in constant expressions. 4829 4830`-Wno-odr' 4831 Warn about One Definition Rule violations during link-time 4832 optimization. Requires `-flto-odr-type-merging' to be enabled. 4833 Enabled by default. 4834 4835`-Wopenmp-simd' 4836 Warn if the vectorizer cost model overrides the OpenMP or the Cilk 4837 Plus simd directive set by user. The `-fsimd-cost-model=unlimited' 4838 option can be used to relax the cost model. 4839 4840`-Woverride-init (C and Objective-C only)' 4841 Warn if an initialized field without side effects is overridden 4842 when using designated initializers (*note Designated Initializers: 4843 Designated Inits.). 4844 4845 This warning is included in `-Wextra'. To get other `-Wextra' 4846 warnings without this one, use `-Wextra -Wno-override-init'. 4847 4848`-Wpacked' 4849 Warn if a structure is given the packed attribute, but the packed 4850 attribute has no effect on the layout or size of the structure. 4851 Such structures may be mis-aligned for little benefit. For 4852 instance, in this code, the variable `f.x' in `struct bar' is 4853 misaligned even though `struct bar' does not itself have the 4854 packed attribute: 4855 4856 struct foo { 4857 int x; 4858 char a, b, c, d; 4859 } __attribute__((packed)); 4860 struct bar { 4861 char z; 4862 struct foo f; 4863 }; 4864 4865`-Wpacked-bitfield-compat' 4866 The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute 4867 on bit-fields of type `char'. This has been fixed in GCC 4.4 but 4868 the change can lead to differences in the structure layout. GCC 4869 informs you when the offset of such a field has changed in GCC 4.4. 4870 For example there is no longer a 4-bit padding between field `a' 4871 and `b' in this structure: 4872 4873 struct foo 4874 { 4875 char a:4; 4876 char b:8; 4877 } __attribute__ ((packed)); 4878 4879 This warning is enabled by default. Use 4880 `-Wno-packed-bitfield-compat' to disable this warning. 4881 4882`-Wpadded' 4883 Warn if padding is included in a structure, either to align an 4884 element of the structure or to align the whole structure. 4885 Sometimes when this happens it is possible to rearrange the fields 4886 of the structure to reduce the padding and so make the structure 4887 smaller. 4888 4889`-Wredundant-decls' 4890 Warn if anything is declared more than once in the same scope, 4891 even in cases where multiple declaration is valid and changes 4892 nothing. 4893 4894`-Wnested-externs (C and Objective-C only)' 4895 Warn if an `extern' declaration is encountered within a function. 4896 4897`-Wno-inherited-variadic-ctor' 4898 Suppress warnings about use of C++11 inheriting constructors when 4899 the base class inherited from has a C variadic constructor; the 4900 warning is on by default because the ellipsis is not inherited. 4901 4902`-Winline' 4903 Warn if a function that is declared as inline cannot be inlined. 4904 Even with this option, the compiler does not warn about failures to 4905 inline functions declared in system headers. 4906 4907 The compiler uses a variety of heuristics to determine whether or 4908 not to inline a function. For example, the compiler takes into 4909 account the size of the function being inlined and the amount of 4910 inlining that has already been done in the current function. 4911 Therefore, seemingly insignificant changes in the source program 4912 can cause the warnings produced by `-Winline' to appear or 4913 disappear. 4914 4915`-Wno-invalid-offsetof (C++ and Objective-C++ only)' 4916 Suppress warnings from applying the `offsetof' macro to a non-POD 4917 type. According to the 2014 ISO C++ standard, applying `offsetof' 4918 to a non-standard-layout type is undefined. In existing C++ 4919 implementations, however, `offsetof' typically gives meaningful 4920 results. This flag is for users who are aware that they are 4921 writing nonportable code and who have deliberately chosen to 4922 ignore the warning about it. 4923 4924 The restrictions on `offsetof' may be relaxed in a future version 4925 of the C++ standard. 4926 4927`-Wno-int-to-pointer-cast' 4928 Suppress warnings from casts to pointer type of an integer of a 4929 different size. In C++, casting to a pointer type of smaller size 4930 is an error. `Wint-to-pointer-cast' is enabled by default. 4931 4932`-Wno-pointer-to-int-cast (C and Objective-C only)' 4933 Suppress warnings from casts from a pointer to an integer type of a 4934 different size. 4935 4936`-Winvalid-pch' 4937 Warn if a precompiled header (*note Precompiled Headers::) is 4938 found in the search path but can't be used. 4939 4940`-Wlong-long' 4941 Warn if `long long' type is used. This is enabled by either 4942 `-Wpedantic' or `-Wtraditional' in ISO C90 and C++98 modes. To 4943 inhibit the warning messages, use `-Wno-long-long'. 4944 4945`-Wvariadic-macros' 4946 Warn if variadic macros are used in ISO C90 mode, or if the GNU 4947 alternate syntax is used in ISO C99 mode. This is enabled by 4948 either `-Wpedantic' or `-Wtraditional'. To inhibit the warning 4949 messages, use `-Wno-variadic-macros'. 4950 4951`-Wvarargs' 4952 Warn upon questionable usage of the macros used to handle variable 4953 arguments like `va_start'. This is default. To inhibit the 4954 warning messages, use `-Wno-varargs'. 4955 4956`-Wvector-operation-performance' 4957 Warn if vector operation is not implemented via SIMD capabilities 4958 of the architecture. Mainly useful for the performance tuning. 4959 Vector operation can be implemented `piecewise', which means that 4960 the scalar operation is performed on every vector element; `in 4961 parallel', which means that the vector operation is implemented 4962 using scalars of wider type, which normally is more performance 4963 efficient; and `as a single scalar', which means that vector fits 4964 into a scalar type. 4965 4966`-Wno-virtual-move-assign' 4967 Suppress warnings about inheriting from a virtual base with a 4968 non-trivial C++11 move assignment operator. This is dangerous 4969 because if the virtual base is reachable along more than one path, 4970 it is moved multiple times, which can mean both objects end up in 4971 the moved-from state. If the move assignment operator is written 4972 to avoid moving from a moved-from object, this warning can be 4973 disabled. 4974 4975`-Wvla' 4976 Warn if variable length array is used in the code. `-Wno-vla' 4977 prevents the `-Wpedantic' warning of the variable length array. 4978 4979`-Wvolatile-register-var' 4980 Warn if a register variable is declared volatile. The volatile 4981 modifier does not inhibit all optimizations that may eliminate 4982 reads and/or writes to register variables. This warning is 4983 enabled by `-Wall'. 4984 4985`-Wdisabled-optimization' 4986 Warn if a requested optimization pass is disabled. This warning 4987 does not generally indicate that there is anything wrong with your 4988 code; it merely indicates that GCC's optimizers are unable to 4989 handle the code effectively. Often, the problem is that your code 4990 is too big or too complex; GCC refuses to optimize programs when 4991 the optimization itself is likely to take inordinate amounts of 4992 time. 4993 4994`-Wpointer-sign (C and Objective-C only)' 4995 Warn for pointer argument passing or assignment with different 4996 signedness. This option is only supported for C and Objective-C. 4997 It is implied by `-Wall' and by `-Wpedantic', which can be 4998 disabled with `-Wno-pointer-sign'. 4999 5000`-Wstack-protector' 5001 This option is only active when `-fstack-protector' is active. It 5002 warns about functions that are not protected against stack 5003 smashing. 5004 5005`-Woverlength-strings' 5006 Warn about string constants that are longer than the "minimum 5007 maximum" length specified in the C standard. Modern compilers 5008 generally allow string constants that are much longer than the 5009 standard's minimum limit, but very portable programs should avoid 5010 using longer strings. 5011 5012 The limit applies _after_ string constant concatenation, and does 5013 not count the trailing NUL. In C90, the limit was 509 characters; 5014 in C99, it was raised to 4095. C++98 does not specify a normative 5015 minimum maximum, so we do not diagnose overlength strings in C++. 5016 5017 This option is implied by `-Wpedantic', and can be disabled with 5018 `-Wno-overlength-strings'. 5019 5020`-Wunsuffixed-float-constants (C and Objective-C only)' 5021 Issue a warning for any floating constant that does not have a 5022 suffix. When used together with `-Wsystem-headers' it warns about 5023 such constants in system header files. This can be useful when 5024 preparing code to use with the `FLOAT_CONST_DECIMAL64' pragma from 5025 the decimal floating-point extension to C99. 5026 5027`-Wno-designated-init (C and Objective-C only)' 5028 Suppress warnings when a positional initializer is used to 5029 initialize a structure that has been marked with the 5030 `designated_init' attribute. 5031 5032 5033 5034File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 5035 50363.9 Options for Debugging Your Program or GCC 5037============================================= 5038 5039GCC has various special options that are used for debugging either your 5040program or GCC: 5041 5042`-g' 5043 Produce debugging information in the operating system's native 5044 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 5045 debugging information. 5046 5047 On most systems that use stabs format, `-g' enables use of extra 5048 debugging information that only GDB can use; this extra information 5049 makes debugging work better in GDB but probably makes other 5050 debuggers crash or refuse to read the program. If you want to 5051 control for certain whether to generate the extra information, use 5052 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 5053 below). 5054 5055 GCC allows you to use `-g' with `-O'. The shortcuts taken by 5056 optimized code may occasionally produce surprising results: some 5057 variables you declared may not exist at all; flow of control may 5058 briefly move where you did not expect it; some statements may not 5059 be executed because they compute constant results or their values 5060 are already at hand; some statements may execute in different 5061 places because they have been moved out of loops. 5062 5063 Nevertheless it proves possible to debug optimized output. This 5064 makes it reasonable to use the optimizer for programs that might 5065 have bugs. 5066 5067 The following options are useful when GCC is generated with the 5068 capability for more than one debugging format. 5069 5070`-gsplit-dwarf' 5071 Separate as much dwarf debugging information as possible into a 5072 separate output file with the extension .dwo. This option allows 5073 the build system to avoid linking files with debug information. To 5074 be useful, this option requires a debugger capable of reading .dwo 5075 files. 5076 5077`-ggdb' 5078 Produce debugging information for use by GDB. This means to use 5079 the most expressive format available (DWARF 2, stabs, or the 5080 native format if neither of those are supported), including GDB 5081 extensions if at all possible. 5082 5083`-gpubnames' 5084 Generate dwarf .debug_pubnames and .debug_pubtypes sections. 5085 5086`-ggnu-pubnames' 5087 Generate .debug_pubnames and .debug_pubtypes sections in a format 5088 suitable for conversion into a GDB index. This option is only 5089 useful with a linker that can produce GDB index version 7. 5090 5091`-gstabs' 5092 Produce debugging information in stabs format (if that is 5093 supported), without GDB extensions. This is the format used by 5094 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 5095 systems this option produces stabs debugging output that is not 5096 understood by DBX or SDB. On System V Release 4 systems this 5097 option requires the GNU assembler. 5098 5099`-feliminate-unused-debug-symbols' 5100 Produce debugging information in stabs format (if that is 5101 supported), for only symbols that are actually used. 5102 5103`-femit-class-debug-always' 5104 Instead of emitting debugging information for a C++ class in only 5105 one object file, emit it in all object files using the class. 5106 This option should be used only with debuggers that are unable to 5107 handle the way GCC normally emits debugging information for 5108 classes because using this option increases the size of debugging 5109 information by as much as a factor of two. 5110 5111`-fdebug-types-section' 5112 When using DWARF Version 4 or higher, type DIEs can be put into 5113 their own `.debug_types' section instead of making them part of the 5114 `.debug_info' section. It is more efficient to put them in a 5115 separate comdat sections since the linker can then remove 5116 duplicates. But not all DWARF consumers support `.debug_types' 5117 sections yet and on some objects `.debug_types' produces larger 5118 instead of smaller debugging information. 5119 5120`-gstabs+' 5121 Produce debugging information in stabs format (if that is 5122 supported), using GNU extensions understood only by the GNU 5123 debugger (GDB). The use of these extensions is likely to make 5124 other debuggers crash or refuse to read the program. 5125 5126`-gcoff' 5127 Produce debugging information in COFF format (if that is 5128 supported). This is the format used by SDB on most System V 5129 systems prior to System V Release 4. 5130 5131`-gxcoff' 5132 Produce debugging information in XCOFF format (if that is 5133 supported). This is the format used by the DBX debugger on IBM 5134 RS/6000 systems. 5135 5136`-gxcoff+' 5137 Produce debugging information in XCOFF format (if that is 5138 supported), using GNU extensions understood only by the GNU 5139 debugger (GDB). The use of these extensions is likely to make 5140 other debuggers crash or refuse to read the program, and may cause 5141 assemblers other than the GNU assembler (GAS) to fail with an 5142 error. 5143 5144`-gdwarf-VERSION' 5145 Produce debugging information in DWARF format (if that is 5146 supported). The value of VERSION may be either 2, 3, 4 or 5; the 5147 default version for most targets is 4. DWARF Version 5 is only 5148 experimental. 5149 5150 Note that with DWARF Version 2, some ports require and always use 5151 some non-conflicting DWARF 3 extensions in the unwind tables. 5152 5153 Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for 5154 maximum benefit. 5155 5156`-grecord-gcc-switches' 5157 This switch causes the command-line options used to invoke the 5158 compiler that may affect code generation to be appended to the 5159 DW_AT_producer attribute in DWARF debugging information. The 5160 options are concatenated with spaces separating them from each 5161 other and from the compiler version. See also 5162 `-frecord-gcc-switches' for another way of storing compiler 5163 options into the object file. This is the default. 5164 5165`-gno-record-gcc-switches' 5166 Disallow appending command-line options to the DW_AT_producer 5167 attribute in DWARF debugging information. 5168 5169`-gstrict-dwarf' 5170 Disallow using extensions of later DWARF standard version than 5171 selected with `-gdwarf-VERSION'. On most targets using 5172 non-conflicting DWARF extensions from later standard versions is 5173 allowed. 5174 5175`-gno-strict-dwarf' 5176 Allow using extensions of later DWARF standard version than 5177 selected with `-gdwarf-VERSION'. 5178 5179`-gz[=TYPE]' 5180 Produce compressed debug sections in DWARF format, if that is 5181 supported. If TYPE is not given, the default type depends on the 5182 capabilities of the assembler and linker used. TYPE may be one of 5183 `none' (don't compress debug sections), `zlib' (use zlib 5184 compression in ELF gABI format), or `zlib-gnu' (use zlib 5185 compression in traditional GNU format). If the linker doesn't 5186 support writing compressed debug sections, the option is rejected. 5187 Otherwise, if the assembler does not support them, `-gz' is 5188 silently ignored when producing object files. 5189 5190`-gvms' 5191 Produce debugging information in Alpha/VMS debug format (if that is 5192 supported). This is the format used by DEBUG on Alpha/VMS systems. 5193 5194`-gLEVEL' 5195`-ggdbLEVEL' 5196`-gstabsLEVEL' 5197`-gcoffLEVEL' 5198`-gxcoffLEVEL' 5199`-gvmsLEVEL' 5200 Request debugging information and also use LEVEL to specify how 5201 much information. The default level is 2. 5202 5203 Level 0 produces no debug information at all. Thus, `-g0' negates 5204 `-g'. 5205 5206 Level 1 produces minimal information, enough for making backtraces 5207 in parts of the program that you don't plan to debug. This 5208 includes descriptions of functions and external variables, and 5209 line number tables, but no information about local variables. 5210 5211 Level 3 includes extra information, such as all the macro 5212 definitions present in the program. Some debuggers support macro 5213 expansion when you use `-g3'. 5214 5215 `-gdwarf-2' does not accept a concatenated debug level, because 5216 GCC used to support an option `-gdwarf' that meant to generate 5217 debug information in version 1 of the DWARF format (which is very 5218 different from version 2), and it would have been too confusing. 5219 That debug format is long obsolete, but the option cannot be 5220 changed now. Instead use an additional `-gLEVEL' option to change 5221 the debug level for DWARF. 5222 5223`-gtoggle' 5224 Turn off generation of debug info, if leaving out this option 5225 generates it, or turn it on at level 2 otherwise. The position of 5226 this argument in the command line does not matter; it takes effect 5227 after all other options are processed, and it does so only once, 5228 no matter how many times it is given. This is mainly intended to 5229 be used with `-fcompare-debug'. 5230 5231`-fsanitize=address' 5232 Enable AddressSanitizer, a fast memory error detector. Memory 5233 access instructions are instrumented to detect out-of-bounds and 5234 use-after-free bugs. See 5235 `https://github.com/google/sanitizers/wiki/AddressSanitizer' for 5236 more details. The run-time behavior can be influenced using the 5237 `ASAN_OPTIONS' environment variable. When set to `help=1', the 5238 available options are shown at startup of the instrumended 5239 program. See 5240 `https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags' 5241 for a list of supported options. 5242 5243`-fsanitize=kernel-address' 5244 Enable AddressSanitizer for Linux kernel. See 5245 `https://github.com/google/kasan/wiki' for more details. 5246 5247`-fsanitize=thread' 5248 Enable ThreadSanitizer, a fast data race detector. Memory access 5249 instructions are instrumented to detect data race bugs. See 5250 `https://github.com/google/sanitizers/wiki#threadsanitizer' for 5251 more details. The run-time behavior can be influenced using the 5252 `TSAN_OPTIONS' environment variable; see 5253 `https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags' 5254 for a list of supported options. 5255 5256`-fsanitize=leak' 5257 Enable LeakSanitizer, a memory leak detector. This option only 5258 matters for linking of executables and if neither 5259 `-fsanitize=address' nor `-fsanitize=thread' is used. In that 5260 case the executable is linked against a library that overrides 5261 `malloc' and other allocator functions. See 5262 `https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer' 5263 for more details. The run-time behavior can be influenced using 5264 the `LSAN_OPTIONS' environment variable. 5265 5266`-fsanitize=undefined' 5267 Enable UndefinedBehaviorSanitizer, a fast undefined behavior 5268 detector. Various computations are instrumented to detect 5269 undefined behavior at runtime. Current suboptions are: 5270 5271 `-fsanitize=shift' 5272 This option enables checking that the result of a shift 5273 operation is not undefined. Note that what exactly is 5274 considered undefined differs slightly between C and C++, as 5275 well as between ISO C90 and C99, etc. 5276 5277 `-fsanitize=integer-divide-by-zero' 5278 Detect integer division by zero as well as `INT_MIN / -1' 5279 division. 5280 5281 `-fsanitize=unreachable' 5282 With this option, the compiler turns the 5283 `__builtin_unreachable' call into a diagnostics message call 5284 instead. When reaching the `__builtin_unreachable' call, the 5285 behavior is undefined. 5286 5287 `-fsanitize=vla-bound' 5288 This option instructs the compiler to check that the size of 5289 a variable length array is positive. 5290 5291 `-fsanitize=null' 5292 This option enables pointer checking. Particularly, the 5293 application built with this option turned on will issue an 5294 error message when it tries to dereference a NULL pointer, or 5295 if a reference (possibly an rvalue reference) is bound to a 5296 NULL pointer, or if a method is invoked on an object pointed 5297 by a NULL pointer. 5298 5299 `-fsanitize=return' 5300 This option enables return statement checking. Programs 5301 built with this option turned on will issue an error message 5302 when the end of a non-void function is reached without 5303 actually returning a value. This option works in C++ only. 5304 5305 `-fsanitize=signed-integer-overflow' 5306 This option enables signed integer overflow checking. We 5307 check that the result of `+', `*', and both unary and binary 5308 `-' does not overflow in the signed arithmetics. Note, 5309 integer promotion rules must be taken into account. That is, 5310 the following is not an overflow: 5311 signed char a = SCHAR_MAX; 5312 a++; 5313 5314 `-fsanitize=bounds' 5315 This option enables instrumentation of array bounds. Various 5316 out of bounds accesses are detected. Flexible array members, 5317 flexible array member-like arrays, and initializers of 5318 variables with static storage are not instrumented. 5319 5320 `-fsanitize=alignment' 5321 This option enables checking of alignment of pointers when 5322 they are dereferenced, or when a reference is bound to 5323 insufficiently aligned target, or when a method or 5324 constructor is invoked on insufficiently aligned object. 5325 5326 `-fsanitize=object-size' 5327 This option enables instrumentation of memory references 5328 using the `__builtin_object_size' function. Various out of 5329 bounds pointer accesses are detected. 5330 5331 `-fsanitize=float-divide-by-zero' 5332 Detect floating-point division by zero. Unlike other similar 5333 options, `-fsanitize=float-divide-by-zero' is not enabled by 5334 `-fsanitize=undefined', since floating-point division by zero 5335 can be a legitimate way of obtaining infinities and NaNs. 5336 5337 `-fsanitize=float-cast-overflow' 5338 This option enables floating-point type to integer conversion 5339 checking. We check that the result of the conversion does 5340 not overflow. Unlike other similar options, 5341 `-fsanitize=float-cast-overflow' is not enabled by 5342 `-fsanitize=undefined'. This option does not work well with 5343 `FE_INVALID' exceptions enabled. 5344 5345 `-fsanitize=nonnull-attribute' 5346 This option enables instrumentation of calls, checking 5347 whether null values are not passed to arguments marked as 5348 requiring a non-null value by the `nonnull' function 5349 attribute. 5350 5351 `-fsanitize=returns-nonnull-attribute' 5352 This option enables instrumentation of return statements in 5353 functions marked with `returns_nonnull' function attribute, 5354 to detect returning of null values from such functions. 5355 5356 `-fsanitize=bool' 5357 This option enables instrumentation of loads from bool. If a 5358 value other than 0/1 is loaded, a run-time error is issued. 5359 5360 `-fsanitize=enum' 5361 This option enables instrumentation of loads from an enum 5362 type. If a value outside the range of values for the enum 5363 type is loaded, a run-time error is issued. 5364 5365 `-fsanitize=vptr' 5366 This option enables instrumentation of C++ member function 5367 calls, member accesses and some conversions between pointers 5368 to base and derived classes, to verify the referenced object 5369 has the correct dynamic type. 5370 5371 5372 While `-ftrapv' causes traps for signed overflows to be emitted, 5373 `-fsanitize=undefined' gives a diagnostic message. This currently 5374 works only for the C family of languages. 5375 5376`-fno-sanitize=all' 5377 This option disables all previously enabled sanitizers. 5378 `-fsanitize=all' is not allowed, as some sanitizers cannot be used 5379 together. 5380 5381`-fasan-shadow-offset=NUMBER' 5382 This option forces GCC to use custom shadow offset in 5383 AddressSanitizer checks. It is useful for experimenting with 5384 different shadow memory layouts in Kernel AddressSanitizer. 5385 5386`-fsanitize-recover[=OPTS]' 5387 `-fsanitize-recover=' controls error recovery mode for sanitizers 5388 mentioned in comma-separated list of OPTS. Enabling this option 5389 for a sanitizer component causes it to attempt to continue running 5390 the program as if no error happened. This means multiple runtime 5391 errors can be reported in a single program run, and the exit code 5392 of the program may indicate success even when errors have been 5393 reported. The `-fno-sanitize-recover=' option can be used to alter 5394 this behavior: only the first detected error is reported and 5395 program then exits with a non-zero exit code. 5396 5397 Currently this feature only works for `-fsanitize=undefined' (and 5398 its suboptions except for `-fsanitize=unreachable' and 5399 `-fsanitize=return'), `-fsanitize=float-cast-overflow', 5400 `-fsanitize=float-divide-by-zero' and `-fsanitize=kernel-address'. 5401 For these sanitizers error recovery is turned on by default. 5402 `-fsanitize-recover=all' and `-fno-sanitize-recover=all' is also 5403 accepted, the former enables recovery for all sanitizers that 5404 support it, the latter disables recovery for all sanitizers that 5405 support it. 5406 5407 Syntax without explicit OPTS parameter is deprecated. It is 5408 equivalent to 5409 -fsanitize-recover=undefined,float-cast-overflow,float-divide-by-zero 5410 Similarly `-fno-sanitize-recover' is equivalent to 5411 -fno-sanitize-recover=undefined,float-cast-overflow,float-divide-by-zero 5412 5413`-fsanitize-undefined-trap-on-error' 5414 The `-fsanitize-undefined-trap-on-error' option instructs the 5415 compiler to report undefined behavior using `__builtin_trap' 5416 rather than a `libubsan' library routine. The advantage of this 5417 is that the `libubsan' library is not needed and is not linked in, 5418 so this is usable even in freestanding environments. 5419 5420`-fcheck-pointer-bounds' 5421 Enable Pointer Bounds Checker instrumentation. Each memory 5422 reference is instrumented with checks of the pointer used for 5423 memory access against bounds associated with that pointer. 5424 5425 Currently there is only an implementation for Intel MPX available, 5426 thus x86 target and `-mmpx' are required to enable this feature. 5427 MPX-based instrumentation requires a runtime library to enable MPX 5428 in hardware and handle bounds violation signals. By default when 5429 `-fcheck-pointer-bounds' and `-mmpx' options are used to link a 5430 program, the GCC driver links against the `libmpx' runtime library 5431 and `libmpxwrappers' library. It also passes '-z bndplt' to a 5432 linker in case it supports this option (which is checked on libmpx 5433 configuration). Note that old versions of linker may ignore 5434 option. Gold linker doesn't support '-z bndplt' option. With no 5435 '-z bndplt' support in linker all calls to dynamic libraries lose 5436 passed bounds reducing overall protection level. It's highly 5437 recommended to use linker with '-z bndplt' support. In case such 5438 linker is not available it is adviced to always use 5439 `-static-libmpxwrappers' for better protection level or use 5440 `-static' to completely avoid external calls to dynamic libraries. 5441 MPX-based instrumentation may be used for debugging and also may 5442 be included in production code to increase program security. 5443 Depending on usage, you may have different requirements for the 5444 runtime library. The current version of the MPX runtime library 5445 is more oriented for use as a debugging tool. MPX runtime library 5446 usage implies `-lpthread'. See also `-static-libmpx'. The 5447 runtime library behavior can be influenced using various 5448 `CHKP_RT_*' environment variables. See 5449 `https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler' 5450 for more details. 5451 5452 Generated instrumentation may be controlled by various `-fchkp-*' 5453 options and by the `bnd_variable_size' structure field attribute 5454 (*note Type Attributes::) and `bnd_legacy', and `bnd_instrument' 5455 function attributes (*note Function Attributes::). GCC also 5456 provides a number of built-in functions for controlling the 5457 Pointer Bounds Checker. *Note Pointer Bounds Checker builtins::, 5458 for more information. 5459 5460`-fchkp-check-incomplete-type' 5461 Generate pointer bounds checks for variables with incomplete type. 5462 Enabled by default. 5463 5464`-fchkp-narrow-bounds' 5465 Controls bounds used by Pointer Bounds Checker for pointers to 5466 object fields. If narrowing is enabled then field bounds are 5467 used. Otherwise object bounds are used. See also 5468 `-fchkp-narrow-to-innermost-array' and 5469 `-fchkp-first-field-has-own-bounds'. Enabled by default. 5470 5471`-fchkp-first-field-has-own-bounds' 5472 Forces Pointer Bounds Checker to use narrowed bounds for the 5473 address of the first field in the structure. By default a pointer 5474 to the first field has the same bounds as a pointer to the whole 5475 structure. 5476 5477`-fchkp-narrow-to-innermost-array' 5478 Forces Pointer Bounds Checker to use bounds of the innermost 5479 arrays in case of nested static array access. By default this 5480 option is disabled and bounds of the outermost array are used. 5481 5482`-fchkp-optimize' 5483 Enables Pointer Bounds Checker optimizations. Enabled by default 5484 at optimization levels `-O', `-O2', `-O3'. 5485 5486`-fchkp-use-fast-string-functions' 5487 Enables use of `*_nobnd' versions of string functions (not copying 5488 bounds) by Pointer Bounds Checker. Disabled by default. 5489 5490`-fchkp-use-nochk-string-functions' 5491 Enables use of `*_nochk' versions of string functions (not 5492 checking bounds) by Pointer Bounds Checker. Disabled by default. 5493 5494`-fchkp-use-static-bounds' 5495 Allow Pointer Bounds Checker to generate static bounds holding 5496 bounds of static variables. Enabled by default. 5497 5498`-fchkp-use-static-const-bounds' 5499 Use statically-initialized bounds for constant bounds instead of 5500 generating them each time they are required. By default enabled 5501 when `-fchkp-use-static-bounds' is enabled. 5502 5503`-fchkp-treat-zero-dynamic-size-as-infinite' 5504 With this option, objects with incomplete type whose 5505 dynamically-obtained size is zero are treated as having infinite 5506 size instead by Pointer Bounds Checker. This option may be 5507 helpful if a program is linked with a library missing size 5508 information for some symbols. Disabled by default. 5509 5510`-fchkp-check-read' 5511 Instructs Pointer Bounds Checker to generate checks for all read 5512 accesses to memory. Enabled by default. 5513 5514`-fchkp-check-write' 5515 Instructs Pointer Bounds Checker to generate checks for all write 5516 accesses to memory. Enabled by default. 5517 5518`-fchkp-store-bounds' 5519 Instructs Pointer Bounds Checker to generate bounds stores for 5520 pointer writes. Enabled by default. 5521 5522`-fchkp-instrument-calls' 5523 Instructs Pointer Bounds Checker to pass pointer bounds to calls. 5524 Enabled by default. 5525 5526`-fchkp-instrument-marked-only' 5527 Instructs Pointer Bounds Checker to instrument only functions 5528 marked with the `bnd_instrument' attribute (*note Function 5529 Attributes::). Disabled by default. 5530 5531`-fchkp-use-wrappers' 5532 Allows Pointer Bounds Checker to replace calls to built-in 5533 functions with calls to wrapper functions. When 5534 `-fchkp-use-wrappers' is used to link a program, the GCC driver 5535 automatically links against `libmpxwrappers'. See also 5536 `-static-libmpxwrappers'. Enabled by default. 5537 5538`-fdump-final-insns[=FILE]' 5539 Dump the final internal representation (RTL) to FILE. If the 5540 optional argument is omitted (or if FILE is `.'), the name of the 5541 dump file is determined by appending `.gkd' to the compilation 5542 output file name. 5543 5544`-fcompare-debug[=OPTS]' 5545 If no error occurs during compilation, run the compiler a second 5546 time, adding OPTS and `-fcompare-debug-second' to the arguments 5547 passed to the second compilation. Dump the final internal 5548 representation in both compilations, and print an error if they 5549 differ. 5550 5551 If the equal sign is omitted, the default `-gtoggle' is used. 5552 5553 The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty 5554 and nonzero, implicitly enables `-fcompare-debug'. If 5555 `GCC_COMPARE_DEBUG' is defined to a string starting with a dash, 5556 then it is used for OPTS, otherwise the default `-gtoggle' is used. 5557 5558 `-fcompare-debug=', with the equal sign but without OPTS, is 5559 equivalent to `-fno-compare-debug', which disables the dumping of 5560 the final representation and the second compilation, preventing 5561 even `GCC_COMPARE_DEBUG' from taking effect. 5562 5563 To verify full coverage during `-fcompare-debug' testing, set 5564 `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which 5565 GCC rejects as an invalid option in any actual compilation (rather 5566 than preprocessing, assembly or linking). To get just a warning, 5567 setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not 5568 overridden' will do. 5569 5570`-fcompare-debug-second' 5571 This option is implicitly passed to the compiler for the second 5572 compilation requested by `-fcompare-debug', along with options to 5573 silence warnings, and omitting other options that would cause 5574 side-effect compiler outputs to files or to the standard output. 5575 Dump files and preserved temporary files are renamed so as to 5576 contain the `.gk' additional extension during the second 5577 compilation, to avoid overwriting those generated by the first. 5578 5579 When this option is passed to the compiler driver, it causes the 5580 _first_ compilation to be skipped, which makes it useful for little 5581 other than debugging the compiler proper. 5582 5583`-feliminate-dwarf2-dups' 5584 Compress DWARF 2 debugging information by eliminating duplicated 5585 information about each symbol. This option only makes sense when 5586 generating DWARF 2 debugging information with `-gdwarf-2'. 5587 5588`-femit-struct-debug-baseonly' 5589 Emit debug information for struct-like types only when the base 5590 name of the compilation source file matches the base name of file 5591 in which the struct is defined. 5592 5593 This option substantially reduces the size of debugging 5594 information, but at significant potential loss in type information 5595 to the debugger. See `-femit-struct-debug-reduced' for a less 5596 aggressive option. See `-femit-struct-debug-detailed' for more 5597 detailed control. 5598 5599 This option works only with DWARF 2. 5600 5601`-femit-struct-debug-reduced' 5602 Emit debug information for struct-like types only when the base 5603 name of the compilation source file matches the base name of file 5604 in which the type is defined, unless the struct is a template or 5605 defined in a system header. 5606 5607 This option significantly reduces the size of debugging 5608 information, with some potential loss in type information to the 5609 debugger. See `-femit-struct-debug-baseonly' for a more 5610 aggressive option. See `-femit-struct-debug-detailed' for more 5611 detailed control. 5612 5613 This option works only with DWARF 2. 5614 5615`-femit-struct-debug-detailed[=SPEC-LIST]' 5616 Specify the struct-like types for which the compiler generates 5617 debug information. The intent is to reduce duplicate struct debug 5618 information between different object files within the same program. 5619 5620 This option is a detailed version of `-femit-struct-debug-reduced' 5621 and `-femit-struct-debug-baseonly', which serves for most needs. 5622 5623 A specification has the syntax 5624 [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none') 5625 5626 The optional first word limits the specification to structs that 5627 are used directly (`dir:') or used indirectly (`ind:'). A struct 5628 type is used directly when it is the type of a variable, member. 5629 Indirect uses arise through pointers to structs. That is, when 5630 use of an incomplete struct is valid, the use is indirect. An 5631 example is `struct one direct; struct two * indirect;'. 5632 5633 The optional second word limits the specification to ordinary 5634 structs (`ord:') or generic structs (`gen:'). Generic structs are 5635 a bit complicated to explain. For C++, these are non-explicit 5636 specializations of template classes, or non-template classes 5637 within the above. Other programming languages have generics, but 5638 `-femit-struct-debug-detailed' does not yet implement them. 5639 5640 The third word specifies the source files for those structs for 5641 which the compiler should emit debug information. The values 5642 `none' and `any' have the normal meaning. The value `base' means 5643 that the base of name of the file in which the type declaration 5644 appears must match the base of the name of the main compilation 5645 file. In practice, this means that when compiling `foo.c', debug 5646 information is generated for types declared in that file and 5647 `foo.h', but not other header files. The value `sys' means those 5648 types satisfying `base' or declared in system or compiler headers. 5649 5650 You may need to experiment to determine the best settings for your 5651 application. 5652 5653 The default is `-femit-struct-debug-detailed=all'. 5654 5655 This option works only with DWARF 2. 5656 5657`-fno-merge-debug-strings' 5658 Direct the linker to not merge together strings in the debugging 5659 information that are identical in different object files. Merging 5660 is not supported by all assemblers or linkers. Merging decreases 5661 the size of the debug information in the output file at the cost 5662 of increasing link processing time. Merging is enabled by default. 5663 5664`-fdebug-prefix-map=OLD=NEW' 5665 When compiling files in directory `OLD', record debugging 5666 information describing them as in `NEW' instead. 5667 5668`-fno-dwarf2-cfi-asm' 5669 Emit DWARF 2 unwind info as compiler generated `.eh_frame' section 5670 instead of using GAS `.cfi_*' directives. 5671 5672`-p' 5673 Generate extra code to write profile information suitable for the 5674 analysis program `prof'. You must use this option when compiling 5675 the source files you want data about, and you must also use it when 5676 linking. 5677 5678`-pg' 5679 Generate extra code to write profile information suitable for the 5680 analysis program `gprof'. You must use this option when compiling 5681 the source files you want data about, and you must also use it when 5682 linking. 5683 5684`-Q' 5685 Makes the compiler print out each function name as it is compiled, 5686 and print some statistics about each pass when it finishes. 5687 5688`-ftime-report' 5689 Makes the compiler print some statistics about the time consumed 5690 by each pass when it finishes. 5691 5692`-fmem-report' 5693 Makes the compiler print some statistics about permanent memory 5694 allocation when it finishes. 5695 5696`-fmem-report-wpa' 5697 Makes the compiler print some statistics about permanent memory 5698 allocation for the WPA phase only. 5699 5700`-fpre-ipa-mem-report' 5701 5702`-fpost-ipa-mem-report' 5703 Makes the compiler print some statistics about permanent memory 5704 allocation before or after interprocedural optimization. 5705 5706`-fprofile-report' 5707 Makes the compiler print some statistics about consistency of the 5708 (estimated) profile and effect of individual passes. 5709 5710`-fstack-usage' 5711 Makes the compiler output stack usage information for the program, 5712 on a per-function basis. The filename for the dump is made by 5713 appending `.su' to the AUXNAME. AUXNAME is generated from the 5714 name of the output file, if explicitly specified and it is not an 5715 executable, otherwise it is the basename of the source file. An 5716 entry is made up of three fields: 5717 5718 * The name of the function. 5719 5720 * A number of bytes. 5721 5722 * One or more qualifiers: `static', `dynamic', `bounded'. 5723 5724 The qualifier `static' means that the function manipulates the 5725 stack statically: a fixed number of bytes are allocated for the 5726 frame on function entry and released on function exit; no stack 5727 adjustments are otherwise made in the function. The second field 5728 is this fixed number of bytes. 5729 5730 The qualifier `dynamic' means that the function manipulates the 5731 stack dynamically: in addition to the static allocation described 5732 above, stack adjustments are made in the body of the function, for 5733 example to push/pop arguments around function calls. If the 5734 qualifier `bounded' is also present, the amount of these 5735 adjustments is bounded at compile time and the second field is an 5736 upper bound of the total amount of stack used by the function. If 5737 it is not present, the amount of these adjustments is not bounded 5738 at compile time and the second field only represents the bounded 5739 part. 5740 5741`-fprofile-arcs' 5742 Add code so that program flow "arcs" are instrumented. During 5743 execution the program records how many times each branch and call 5744 is executed and how many times it is taken or returns. When the 5745 compiled program exits it saves this data to a file called 5746 `AUXNAME.gcda' for each source file. The data may be used for 5747 profile-directed optimizations (`-fbranch-probabilities'), or for 5748 test coverage analysis (`-ftest-coverage'). Each object file's 5749 AUXNAME is generated from the name of the output file, if 5750 explicitly specified and it is not the final executable, otherwise 5751 it is the basename of the source file. In both cases any suffix 5752 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or 5753 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 5754 *Note Cross-profiling::. 5755 5756`--coverage' 5757 This option is used to compile and link code instrumented for 5758 coverage analysis. The option is a synonym for `-fprofile-arcs' 5759 `-ftest-coverage' (when compiling) and `-lgcov' (when linking). 5760 See the documentation for those options for more details. 5761 5762 * Compile the source files with `-fprofile-arcs' plus 5763 optimization and code generation options. For test coverage 5764 analysis, use the additional `-ftest-coverage' option. You 5765 do not need to profile every source file in a program. 5766 5767 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 5768 latter implies the former). 5769 5770 * Run the program on a representative workload to generate the 5771 arc profile information. This may be repeated any number of 5772 times. You can run concurrent instances of your program, and 5773 provided that the file system supports locking, the data 5774 files will be correctly updated. Also `fork' calls are 5775 detected and correctly handled (double counting will not 5776 happen). 5777 5778 * For profile-directed optimizations, compile the source files 5779 again with the same optimization and code generation options 5780 plus `-fbranch-probabilities' (*note Options that Control 5781 Optimization: Optimize Options.). 5782 5783 * For test coverage analysis, use `gcov' to produce human 5784 readable information from the `.gcno' and `.gcda' files. 5785 Refer to the `gcov' documentation for further information. 5786 5787 5788 With `-fprofile-arcs', for each function of your program GCC 5789 creates a program flow graph, then finds a spanning tree for the 5790 graph. Only arcs that are not on the spanning tree have to be 5791 instrumented: the compiler adds code to count the number of times 5792 that these arcs are executed. When an arc is the only exit or 5793 only entrance to a block, the instrumentation code can be added to 5794 the block; otherwise, a new basic block must be created to hold 5795 the instrumentation code. 5796 5797`-ftest-coverage' 5798 Produce a notes file that the `gcov' code-coverage utility (*note 5799 `gcov'--a Test Coverage Program: Gcov.) can use to show program 5800 coverage. Each source file's note file is called `AUXNAME.gcno'. 5801 Refer to the `-fprofile-arcs' option above for a description of 5802 AUXNAME and instructions on how to generate test coverage data. 5803 Coverage data matches the source files more closely if you do not 5804 optimize. 5805 5806`-fdbg-cnt-list' 5807 Print the name and the counter upper bound for all debug counters. 5808 5809`-fdbg-cnt=COUNTER-VALUE-LIST' 5810 Set the internal debug counter upper bound. COUNTER-VALUE-LIST is 5811 a comma-separated list of NAME:VALUE pairs which sets the upper 5812 bound of each debug counter NAME to VALUE. All debug counters 5813 have the initial upper bound of `UINT_MAX'; thus `dbg_cnt' returns 5814 true always unless the upper bound is set by this option. For 5815 example, with `-fdbg-cnt=dce:10,tail_call:0', `dbg_cnt(dce)' 5816 returns true only for first 10 invocations. 5817 5818`-fenable-KIND-PASS' 5819`-fdisable-KIND-PASS=RANGE-LIST' 5820 This is a set of options that are used to explicitly disable/enable 5821 optimization passes. These options are intended for use for 5822 debugging GCC. Compiler users should use regular options for 5823 enabling/disabling passes instead. 5824 5825 `-fdisable-ipa-PASS' 5826 Disable IPA pass PASS. PASS is the pass name. If the same 5827 pass is statically invoked in the compiler multiple times, 5828 the pass name should be appended with a sequential number 5829 starting from 1. 5830 5831 `-fdisable-rtl-PASS' 5832 `-fdisable-rtl-PASS=RANGE-LIST' 5833 Disable RTL pass PASS. PASS is the pass name. If the same 5834 pass is statically invoked in the compiler multiple times, 5835 the pass name should be appended with a sequential number 5836 starting from 1. RANGE-LIST is a comma-separated list of 5837 function ranges or assembler names. Each range is a number 5838 pair separated by a colon. The range is inclusive in both 5839 ends. If the range is trivial, the number pair can be 5840 simplified as a single number. If the function's call graph 5841 node's UID falls within one of the specified ranges, the PASS 5842 is disabled for that function. The UID is shown in the 5843 function header of a dump file, and the pass names can be 5844 dumped by using option `-fdump-passes'. 5845 5846 `-fdisable-tree-PASS' 5847 `-fdisable-tree-PASS=RANGE-LIST' 5848 Disable tree pass PASS. See `-fdisable-rtl' for the 5849 description of option arguments. 5850 5851 `-fenable-ipa-PASS' 5852 Enable IPA pass PASS. PASS is the pass name. If the same 5853 pass is statically invoked in the compiler multiple times, 5854 the pass name should be appended with a sequential number 5855 starting from 1. 5856 5857 `-fenable-rtl-PASS' 5858 `-fenable-rtl-PASS=RANGE-LIST' 5859 Enable RTL pass PASS. See `-fdisable-rtl' for option argument 5860 description and examples. 5861 5862 `-fenable-tree-PASS' 5863 `-fenable-tree-PASS=RANGE-LIST' 5864 Enable tree pass PASS. See `-fdisable-rtl' for the 5865 description of option arguments. 5866 5867 5868 Here are some examples showing uses of these options. 5869 5870 5871 # disable ccp1 for all functions 5872 -fdisable-tree-ccp1 5873 # disable complete unroll for function whose cgraph node uid is 1 5874 -fenable-tree-cunroll=1 5875 # disable gcse2 for functions at the following ranges [1,1], 5876 # [300,400], and [400,1000] 5877 # disable gcse2 for functions foo and foo2 5878 -fdisable-rtl-gcse2=foo,foo2 5879 # disable early inlining 5880 -fdisable-tree-einline 5881 # disable ipa inlining 5882 -fdisable-ipa-inline 5883 # enable tree full unroll 5884 -fenable-tree-unroll 5885 5886`-dLETTERS' 5887`-fdump-rtl-PASS' 5888`-fdump-rtl-PASS=FILENAME' 5889 Says to make debugging dumps during compilation at times specified 5890 by LETTERS. This is used for debugging the RTL-based passes of the 5891 compiler. The file names for most of the dumps are made by 5892 appending a pass number and a word to the DUMPNAME, and the files 5893 are created in the directory of the output file. In case of 5894 `=FILENAME' option, the dump is output on the given file instead 5895 of the pass numbered dump files. Note that the pass number is 5896 computed statically as passes get registered into the pass manager. 5897 Thus the numbering is not related to the dynamic order of 5898 execution of passes. In particular, a pass installed by a plugin 5899 could have a number over 200 even if it executed quite early. 5900 DUMPNAME is generated from the name of the output file, if 5901 explicitly specified and it is not an executable, otherwise it is 5902 the basename of the source file. These switches may have different 5903 effects when `-E' is used for preprocessing. 5904 5905 Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d' 5906 option LETTERS. Here are the possible letters for use in PASS and 5907 LETTERS, and their meanings: 5908 5909 `-fdump-rtl-alignments' 5910 Dump after branch alignments have been computed. 5911 5912 `-fdump-rtl-asmcons' 5913 Dump after fixing rtl statements that have unsatisfied in/out 5914 constraints. 5915 5916 `-fdump-rtl-auto_inc_dec' 5917 Dump after auto-inc-dec discovery. This pass is only run on 5918 architectures that have auto inc or auto dec instructions. 5919 5920 `-fdump-rtl-barriers' 5921 Dump after cleaning up the barrier instructions. 5922 5923 `-fdump-rtl-bbpart' 5924 Dump after partitioning hot and cold basic blocks. 5925 5926 `-fdump-rtl-bbro' 5927 Dump after block reordering. 5928 5929 `-fdump-rtl-btl1' 5930 `-fdump-rtl-btl2' 5931 `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after 5932 the two branch target load optimization passes. 5933 5934 `-fdump-rtl-bypass' 5935 Dump after jump bypassing and control flow optimizations. 5936 5937 `-fdump-rtl-combine' 5938 Dump after the RTL instruction combination pass. 5939 5940 `-fdump-rtl-compgotos' 5941 Dump after duplicating the computed gotos. 5942 5943 `-fdump-rtl-ce1' 5944 `-fdump-rtl-ce2' 5945 `-fdump-rtl-ce3' 5946 `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3' 5947 enable dumping after the three if conversion passes. 5948 5949 `-fdump-rtl-cprop_hardreg' 5950 Dump after hard register copy propagation. 5951 5952 `-fdump-rtl-csa' 5953 Dump after combining stack adjustments. 5954 5955 `-fdump-rtl-cse1' 5956 `-fdump-rtl-cse2' 5957 `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after 5958 the two common subexpression elimination passes. 5959 5960 `-fdump-rtl-dce' 5961 Dump after the standalone dead code elimination passes. 5962 5963 `-fdump-rtl-dbr' 5964 Dump after delayed branch scheduling. 5965 5966 `-fdump-rtl-dce1' 5967 `-fdump-rtl-dce2' 5968 `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after 5969 the two dead store elimination passes. 5970 5971 `-fdump-rtl-eh' 5972 Dump after finalization of EH handling code. 5973 5974 `-fdump-rtl-eh_ranges' 5975 Dump after conversion of EH handling range regions. 5976 5977 `-fdump-rtl-expand' 5978 Dump after RTL generation. 5979 5980 `-fdump-rtl-fwprop1' 5981 `-fdump-rtl-fwprop2' 5982 `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping 5983 after the two forward propagation passes. 5984 5985 `-fdump-rtl-gcse1' 5986 `-fdump-rtl-gcse2' 5987 `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping 5988 after global common subexpression elimination. 5989 5990 `-fdump-rtl-init-regs' 5991 Dump after the initialization of the registers. 5992 5993 `-fdump-rtl-initvals' 5994 Dump after the computation of the initial value sets. 5995 5996 `-fdump-rtl-into_cfglayout' 5997 Dump after converting to cfglayout mode. 5998 5999 `-fdump-rtl-ira' 6000 Dump after iterated register allocation. 6001 6002 `-fdump-rtl-jump' 6003 Dump after the second jump optimization. 6004 6005 `-fdump-rtl-loop2' 6006 `-fdump-rtl-loop2' enables dumping after the rtl loop 6007 optimization passes. 6008 6009 `-fdump-rtl-mach' 6010 Dump after performing the machine dependent reorganization 6011 pass, if that pass exists. 6012 6013 `-fdump-rtl-mode_sw' 6014 Dump after removing redundant mode switches. 6015 6016 `-fdump-rtl-rnreg' 6017 Dump after register renumbering. 6018 6019 `-fdump-rtl-outof_cfglayout' 6020 Dump after converting from cfglayout mode. 6021 6022 `-fdump-rtl-peephole2' 6023 Dump after the peephole pass. 6024 6025 `-fdump-rtl-postreload' 6026 Dump after post-reload optimizations. 6027 6028 `-fdump-rtl-pro_and_epilogue' 6029 Dump after generating the function prologues and epilogues. 6030 6031 `-fdump-rtl-sched1' 6032 `-fdump-rtl-sched2' 6033 `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping 6034 after the basic block scheduling passes. 6035 6036 `-fdump-rtl-ree' 6037 Dump after sign/zero extension elimination. 6038 6039 `-fdump-rtl-seqabstr' 6040 Dump after common sequence discovery. 6041 6042 `-fdump-rtl-shorten' 6043 Dump after shortening branches. 6044 6045 `-fdump-rtl-sibling' 6046 Dump after sibling call optimizations. 6047 6048 `-fdump-rtl-split1' 6049 `-fdump-rtl-split2' 6050 `-fdump-rtl-split3' 6051 `-fdump-rtl-split4' 6052 `-fdump-rtl-split5' 6053 These options enable dumping after five rounds of instruction 6054 splitting. 6055 6056 `-fdump-rtl-sms' 6057 Dump after modulo scheduling. This pass is only run on some 6058 architectures. 6059 6060 `-fdump-rtl-stack' 6061 Dump after conversion from GCC's "flat register file" 6062 registers to the x87's stack-like registers. This pass is 6063 only run on x86 variants. 6064 6065 `-fdump-rtl-subreg1' 6066 `-fdump-rtl-subreg2' 6067 `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping 6068 after the two subreg expansion passes. 6069 6070 `-fdump-rtl-unshare' 6071 Dump after all rtl has been unshared. 6072 6073 `-fdump-rtl-vartrack' 6074 Dump after variable tracking. 6075 6076 `-fdump-rtl-vregs' 6077 Dump after converting virtual registers to hard registers. 6078 6079 `-fdump-rtl-web' 6080 Dump after live range splitting. 6081 6082 `-fdump-rtl-regclass' 6083 `-fdump-rtl-subregs_of_mode_init' 6084 `-fdump-rtl-subregs_of_mode_finish' 6085 `-fdump-rtl-dfinit' 6086 `-fdump-rtl-dfinish' 6087 These dumps are defined but always produce empty files. 6088 6089 `-da' 6090 `-fdump-rtl-all' 6091 Produce all the dumps listed above. 6092 6093 `-dA' 6094 Annotate the assembler output with miscellaneous debugging 6095 information. 6096 6097 `-dD' 6098 Dump all macro definitions, at the end of preprocessing, in 6099 addition to normal output. 6100 6101 `-dH' 6102 Produce a core dump whenever an error occurs. 6103 6104 `-dp' 6105 Annotate the assembler output with a comment indicating which 6106 pattern and alternative is used. The length of each 6107 instruction is also printed. 6108 6109 `-dP' 6110 Dump the RTL in the assembler output as a comment before each 6111 instruction. Also turns on `-dp' annotation. 6112 6113 `-dx' 6114 Just generate RTL for a function instead of compiling it. 6115 Usually used with `-fdump-rtl-expand'. 6116 6117`-fdump-noaddr' 6118 When doing debugging dumps, suppress address output. This makes 6119 it more feasible to use diff on debugging dumps for compiler 6120 invocations with different compiler binaries and/or different text 6121 / bss / data / heap / stack / dso start locations. 6122 6123`-freport-bug' 6124 Collect and dump debug information into temporary file if ICE in 6125 C/C++ compiler occured. 6126 6127`-fdump-unnumbered' 6128 When doing debugging dumps, suppress instruction numbers and 6129 address output. This makes it more feasible to use diff on 6130 debugging dumps for compiler invocations with different options, 6131 in particular with and without `-g'. 6132 6133`-fdump-unnumbered-links' 6134 When doing debugging dumps (see `-d' option above), suppress 6135 instruction numbers for the links to the previous and next 6136 instructions in a sequence. 6137 6138`-fdump-translation-unit (C++ only)' 6139`-fdump-translation-unit-OPTIONS (C++ only)' 6140 Dump a representation of the tree structure for the entire 6141 translation unit to a file. The file name is made by appending 6142 `.tu' to the source file name, and the file is created in the same 6143 directory as the output file. If the `-OPTIONS' form is used, 6144 OPTIONS controls the details of the dump as described for the 6145 `-fdump-tree' options. 6146 6147`-fdump-class-hierarchy (C++ only)' 6148`-fdump-class-hierarchy-OPTIONS (C++ only)' 6149 Dump a representation of each class's hierarchy and virtual 6150 function table layout to a file. The file name is made by 6151 appending `.class' to the source file name, and the file is 6152 created in the same directory as the output file. If the 6153 `-OPTIONS' form is used, OPTIONS controls the details of the dump 6154 as described for the `-fdump-tree' options. 6155 6156`-fdump-ipa-SWITCH' 6157 Control the dumping at various stages of inter-procedural analysis 6158 language tree to a file. The file name is generated by appending a 6159 switch specific suffix to the source file name, and the file is 6160 created in the same directory as the output file. The following 6161 dumps are possible: 6162 6163 `all' 6164 Enables all inter-procedural analysis dumps. 6165 6166 `cgraph' 6167 Dumps information about call-graph optimization, unused 6168 function removal, and inlining decisions. 6169 6170 `inline' 6171 Dump after function inlining. 6172 6173 6174`-fdump-passes' 6175 Dump the list of optimization passes that are turned on and off by 6176 the current command-line options. 6177 6178`-fdump-statistics-OPTION' 6179 Enable and control dumping of pass statistics in a separate file. 6180 The file name is generated by appending a suffix ending in 6181 `.statistics' to the source file name, and the file is created in 6182 the same directory as the output file. If the `-OPTION' form is 6183 used, `-stats' causes counters to be summed over the whole 6184 compilation unit while `-details' dumps every event as the passes 6185 generate them. The default with no option is to sum counters for 6186 each function compiled. 6187 6188`-fdump-tree-SWITCH' 6189`-fdump-tree-SWITCH-OPTIONS' 6190`-fdump-tree-SWITCH-OPTIONS=FILENAME' 6191 Control the dumping at various stages of processing the 6192 intermediate language tree to a file. The file name is generated 6193 by appending a switch-specific suffix to the source file name, and 6194 the file is created in the same directory as the output file. In 6195 case of `=FILENAME' option, the dump is output on the given file 6196 instead of the auto named dump files. If the `-OPTIONS' form is 6197 used, OPTIONS is a list of `-' separated options which control the 6198 details of the dump. Not all options are applicable to all dumps; 6199 those that are not meaningful are ignored. The following options 6200 are available 6201 6202 `address' 6203 Print the address of each node. Usually this is not 6204 meaningful as it changes according to the environment and 6205 source file. Its primary use is for tying up a dump file 6206 with a debug environment. 6207 6208 `asmname' 6209 If `DECL_ASSEMBLER_NAME' has been set for a given decl, use 6210 that in the dump instead of `DECL_NAME'. Its primary use is 6211 ease of use working backward from mangled names in the 6212 assembly file. 6213 6214 `slim' 6215 When dumping front-end intermediate representations, inhibit 6216 dumping of members of a scope or body of a function merely 6217 because that scope has been reached. Only dump such items 6218 when they are directly reachable by some other path. 6219 6220 When dumping pretty-printed trees, this option inhibits 6221 dumping the bodies of control structures. 6222 6223 When dumping RTL, print the RTL in slim (condensed) form 6224 instead of the default LISP-like representation. 6225 6226 `raw' 6227 Print a raw representation of the tree. By default, trees are 6228 pretty-printed into a C-like representation. 6229 6230 `details' 6231 Enable more detailed dumps (not honored by every dump 6232 option). Also include information from the optimization 6233 passes. 6234 6235 `stats' 6236 Enable dumping various statistics about the pass (not honored 6237 by every dump option). 6238 6239 `blocks' 6240 Enable showing basic block boundaries (disabled in raw dumps). 6241 6242 `graph' 6243 For each of the other indicated dump files 6244 (`-fdump-rtl-PASS'), dump a representation of the control 6245 flow graph suitable for viewing with GraphViz to 6246 `FILE.PASSID.PASS.dot'. Each function in the file is 6247 pretty-printed as a subgraph, so that GraphViz can render them 6248 all in a single plot. 6249 6250 This option currently only works for RTL dumps, and the RTL 6251 is always dumped in slim form. 6252 6253 `vops' 6254 Enable showing virtual operands for every statement. 6255 6256 `lineno' 6257 Enable showing line numbers for statements. 6258 6259 `uid' 6260 Enable showing the unique ID (`DECL_UID') for each variable. 6261 6262 `verbose' 6263 Enable showing the tree dump for each statement. 6264 6265 `eh' 6266 Enable showing the EH region number holding each statement. 6267 6268 `scev' 6269 Enable showing scalar evolution analysis details. 6270 6271 `optimized' 6272 Enable showing optimization information (only available in 6273 certain passes). 6274 6275 `missed' 6276 Enable showing missed optimization information (only 6277 available in certain passes). 6278 6279 `note' 6280 Enable other detailed optimization information (only 6281 available in certain passes). 6282 6283 `=FILENAME' 6284 Instead of an auto named dump file, output into the given file 6285 name. The file names `stdout' and `stderr' are treated 6286 specially and are considered already open standard streams. 6287 For example, 6288 6289 gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump 6290 -fdump-tree-pre=stderr file.c 6291 6292 outputs vectorizer dump into `foo.dump', while the PRE dump is 6293 output on to `stderr'. If two conflicting dump filenames are 6294 given for the same pass, then the latter option overrides the 6295 earlier one. 6296 6297 `all' 6298 Turn on all options, except `raw', `slim', `verbose' and 6299 `lineno'. 6300 6301 `optall' 6302 Turn on all optimization options, i.e., `optimized', 6303 `missed', and `note'. 6304 6305 The following tree dumps are possible: 6306 `original' 6307 Dump before any tree based optimization, to `FILE.original'. 6308 6309 `optimized' 6310 Dump after all tree based optimization, to `FILE.optimized'. 6311 6312 `gimple' 6313 Dump each function before and after the gimplification pass 6314 to a file. The file name is made by appending `.gimple' to 6315 the source file name. 6316 6317 `cfg' 6318 Dump the control flow graph of each function to a file. The 6319 file name is made by appending `.cfg' to the source file name. 6320 6321 `ch' 6322 Dump each function after copying loop headers. The file name 6323 is made by appending `.ch' to the source file name. 6324 6325 `ssa' 6326 Dump SSA related information to a file. The file name is 6327 made by appending `.ssa' to the source file name. 6328 6329 `alias' 6330 Dump aliasing information for each function. The file name 6331 is made by appending `.alias' to the source file name. 6332 6333 `ccp' 6334 Dump each function after CCP. The file name is made by 6335 appending `.ccp' to the source file name. 6336 6337 `storeccp' 6338 Dump each function after STORE-CCP. The file name is made by 6339 appending `.storeccp' to the source file name. 6340 6341 `pre' 6342 Dump trees after partial redundancy elimination. The file 6343 name is made by appending `.pre' to the source file name. 6344 6345 `fre' 6346 Dump trees after full redundancy elimination. The file name 6347 is made by appending `.fre' to the source file name. 6348 6349 `copyprop' 6350 Dump trees after copy propagation. The file name is made by 6351 appending `.copyprop' to the source file name. 6352 6353 `store_copyprop' 6354 Dump trees after store copy-propagation. The file name is 6355 made by appending `.store_copyprop' to the source file name. 6356 6357 `dce' 6358 Dump each function after dead code elimination. The file 6359 name is made by appending `.dce' to the source file name. 6360 6361 `sra' 6362 Dump each function after performing scalar replacement of 6363 aggregates. The file name is made by appending `.sra' to the 6364 source file name. 6365 6366 `sink' 6367 Dump each function after performing code sinking. The file 6368 name is made by appending `.sink' to the source file name. 6369 6370 `dom' 6371 Dump each function after applying dominator tree 6372 optimizations. The file name is made by appending `.dom' to 6373 the source file name. 6374 6375 `dse' 6376 Dump each function after applying dead store elimination. 6377 The file name is made by appending `.dse' to the source file 6378 name. 6379 6380 `phiopt' 6381 Dump each function after optimizing PHI nodes into 6382 straightline code. The file name is made by appending 6383 `.phiopt' to the source file name. 6384 6385 `forwprop' 6386 Dump each function after forward propagating single use 6387 variables. The file name is made by appending `.forwprop' to 6388 the source file name. 6389 6390 `copyrename' 6391 Dump each function after applying the copy rename 6392 optimization. The file name is made by appending 6393 `.copyrename' to the source file name. 6394 6395 `nrv' 6396 Dump each function after applying the named return value 6397 optimization on generic trees. The file name is made by 6398 appending `.nrv' to the source file name. 6399 6400 `vect' 6401 Dump each function after applying vectorization of loops. 6402 The file name is made by appending `.vect' to the source file 6403 name. 6404 6405 `slp' 6406 Dump each function after applying vectorization of basic 6407 blocks. The file name is made by appending `.slp' to the 6408 source file name. 6409 6410 `vrp' 6411 Dump each function after Value Range Propagation (VRP). The 6412 file name is made by appending `.vrp' to the source file name. 6413 6414 `all' 6415 Enable all the available tree dumps with the flags provided 6416 in this option. 6417 6418`-fopt-info' 6419`-fopt-info-OPTIONS' 6420`-fopt-info-OPTIONS=FILENAME' 6421 Controls optimization dumps from various optimization passes. If 6422 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 6423 option keywords to select the dump details and optimizations. 6424 6425 The OPTIONS can be divided into two groups: options describing the 6426 verbosity of the dump, and options describing which optimizations 6427 should be included. The options from both the groups can be freely 6428 mixed as they are non-overlapping. However, in case of any 6429 conflicts, the later options override the earlier options on the 6430 command line. 6431 6432 The following options control the dump verbosity: 6433 6434 `optimized' 6435 Print information when an optimization is successfully 6436 applied. It is up to a pass to decide which information is 6437 relevant. For example, the vectorizer passes print the source 6438 location of loops which are successfully vectorized. 6439 6440 `missed' 6441 Print information about missed optimizations. Individual 6442 passes control which information to include in the output. 6443 6444 `note' 6445 Print verbose information about optimizations, such as certain 6446 transformations, more detailed messages about decisions etc. 6447 6448 `all' 6449 Print detailed optimization information. This includes 6450 `optimized', `missed', and `note'. 6451 6452 One or more of the following option keywords can be used to 6453 describe a group of optimizations: 6454 6455 `ipa' 6456 Enable dumps from all interprocedural optimizations. 6457 6458 `loop' 6459 Enable dumps from all loop optimizations. 6460 6461 `inline' 6462 Enable dumps from all inlining optimizations. 6463 6464 `vec' 6465 Enable dumps from all vectorization optimizations. 6466 6467 `optall' 6468 Enable dumps from all optimizations. This is a superset of 6469 the optimization groups listed above. 6470 6471 If OPTIONS is omitted, it defaults to `optimized-optall', which 6472 means to dump all info about successful optimizations from all the 6473 passes. 6474 6475 If the FILENAME is provided, then the dumps from all the 6476 applicable optimizations are concatenated into the FILENAME. 6477 Otherwise the dump is output onto `stderr'. Though multiple 6478 `-fopt-info' options are accepted, only one of them can include a 6479 FILENAME. If other filenames are provided then all but the first 6480 such option are ignored. 6481 6482 Note that the output FILENAME is overwritten in case of multiple 6483 translation units. If a combined output from multiple translation 6484 units is desired, `stderr' should be used instead. 6485 6486 In the following example, the optimization info is output to 6487 `stderr': 6488 6489 gcc -O3 -fopt-info 6490 6491 This example: 6492 gcc -O3 -fopt-info-missed=missed.all 6493 6494 outputs missed optimization report from all the passes into 6495 `missed.all', and this one: 6496 6497 gcc -O2 -ftree-vectorize -fopt-info-vec-missed 6498 6499 prints information about missed optimization opportunities from 6500 vectorization passes on `stderr'. Note that 6501 `-fopt-info-vec-missed' is equivalent to `-fopt-info-missed-vec'. 6502 6503 As another example, 6504 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt 6505 6506 outputs information about missed optimizations as well as 6507 optimized locations from all the inlining passes into `inline.txt'. 6508 6509 Finally, consider: 6510 6511 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt 6512 6513 Here the two output filenames `vec.miss' and `loop.opt' are in 6514 conflict since only one output file is allowed. In this case, only 6515 the first option takes effect and the subsequent options are 6516 ignored. Thus only `vec.miss' is produced which contains dumps 6517 from the vectorizer about missed opportunities. 6518 6519`-frandom-seed=STRING' 6520 This option provides a seed that GCC uses in place of random 6521 numbers in generating certain symbol names that have to be 6522 different in every compiled file. It is also used to place unique 6523 stamps in coverage data files and the object files that produce 6524 them. You can use the `-frandom-seed' option to produce 6525 reproducibly identical object files. 6526 6527 The STRING can either be a number (decimal, octal or hex) or an 6528 arbitrary string (in which case it's converted to a number by 6529 computing CRC32). 6530 6531 The STRING should be different for every file you compile. 6532 6533`-fsched-verbose=N' 6534 On targets that use instruction scheduling, this option controls 6535 the amount of debugging output the scheduler prints. This 6536 information is written to standard error, unless 6537 `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which 6538 case it is output to the usual dump listing file, `.sched1' or 6539 `.sched2' respectively. However for N greater than nine, the 6540 output is always printed to standard error. 6541 6542 For N greater than zero, `-fsched-verbose' outputs the same 6543 information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'. For N 6544 greater than one, it also output basic block probabilities, 6545 detailed ready list information and unit/insn info. For N greater 6546 than two, it includes RTL at abort point, control-flow and regions 6547 info. And for N over four, `-fsched-verbose' also includes 6548 dependence info. 6549 6550`-save-temps' 6551`-save-temps=cwd' 6552 Store the usual "temporary" intermediate files permanently; place 6553 them in the current directory and name them based on the source 6554 file. Thus, compiling `foo.c' with `-c -save-temps' produces files 6555 `foo.i' and `foo.s', as well as `foo.o'. This creates a 6556 preprocessed `foo.i' output file even though the compiler now 6557 normally uses an integrated preprocessor. 6558 6559 When used in combination with the `-x' command-line option, 6560 `-save-temps' is sensible enough to avoid over writing an input 6561 source file with the same extension as an intermediate file. The 6562 corresponding intermediate file may be obtained by renaming the 6563 source file before using `-save-temps'. 6564 6565 If you invoke GCC in parallel, compiling several different source 6566 files that share a common base name in different subdirectories or 6567 the same source file compiled for multiple output destinations, it 6568 is likely that the different parallel compilers will interfere 6569 with each other, and overwrite the temporary files. For instance: 6570 6571 gcc -save-temps -o outdir1/foo.o indir1/foo.c& 6572 gcc -save-temps -o outdir2/foo.o indir2/foo.c& 6573 6574 may result in `foo.i' and `foo.o' being written to simultaneously 6575 by both compilers. 6576 6577`-save-temps=obj' 6578 Store the usual "temporary" intermediate files permanently. If the 6579 `-o' option is used, the temporary files are based on the object 6580 file. If the `-o' option is not used, the `-save-temps=obj' 6581 switch behaves like `-save-temps'. 6582 6583 For example: 6584 6585 gcc -save-temps=obj -c foo.c 6586 gcc -save-temps=obj -c bar.c -o dir/xbar.o 6587 gcc -save-temps=obj foobar.c -o dir2/yfoobar 6588 6589 creates `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s', 6590 `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'. 6591 6592`-time[=FILE]' 6593 Report the CPU time taken by each subprocess in the compilation 6594 sequence. For C source files, this is the compiler proper and 6595 assembler (plus the linker if linking is done). 6596 6597 Without the specification of an output file, the output looks like 6598 this: 6599 6600 # cc1 0.12 0.01 6601 # as 0.00 0.01 6602 6603 The first number on each line is the "user time", that is time 6604 spent executing the program itself. The second number is "system 6605 time", time spent executing operating system routines on behalf of 6606 the program. Both numbers are in seconds. 6607 6608 With the specification of an output file, the output is appended 6609 to the named file, and it looks like this: 6610 6611 0.12 0.01 cc1 OPTIONS 6612 0.00 0.01 as OPTIONS 6613 6614 The "user time" and the "system time" are moved before the program 6615 name, and the options passed to the program are displayed, so that 6616 one can later tell what file was being compiled, and with which 6617 options. 6618 6619`-fvar-tracking' 6620 Run variable tracking pass. It computes where variables are 6621 stored at each position in code. Better debugging information is 6622 then generated (if the debugging information format supports this 6623 information). 6624 6625 It is enabled by default when compiling with optimization (`-Os', 6626 `-O', `-O2', ...), debugging information (`-g') and the debug info 6627 format supports it. 6628 6629`-fvar-tracking-assignments' 6630 Annotate assignments to user variables early in the compilation and 6631 attempt to carry the annotations over throughout the compilation 6632 all the way to the end, in an attempt to improve debug information 6633 while optimizing. Use of `-gdwarf-4' is recommended along with it. 6634 6635 It can be enabled even if var-tracking is disabled, in which case 6636 annotations are created and maintained, but discarded at the end. 6637 By default, this flag is enabled together with `-fvar-tracking', 6638 except when selective scheduling is enabled. 6639 6640`-fvar-tracking-assignments-toggle' 6641 Toggle `-fvar-tracking-assignments', in the same way that 6642 `-gtoggle' toggles `-g'. 6643 6644`-print-file-name=LIBRARY' 6645 Print the full absolute name of the library file LIBRARY that 6646 would be used when linking--and don't do anything else. With this 6647 option, GCC does not compile or link anything; it just prints the 6648 file name. 6649 6650`-print-multi-directory' 6651 Print the directory name corresponding to the multilib selected by 6652 any other switches present in the command line. This directory is 6653 supposed to exist in `GCC_EXEC_PREFIX'. 6654 6655`-print-multi-lib' 6656 Print the mapping from multilib directory names to compiler 6657 switches that enable them. The directory name is separated from 6658 the switches by `;', and each switch starts with an `@' instead of 6659 the `-', without spaces between multiple switches. This is 6660 supposed to ease shell processing. 6661 6662`-print-multi-os-directory' 6663 Print the path to OS libraries for the selected multilib, relative 6664 to some `lib' subdirectory. If OS libraries are present in the 6665 `lib' subdirectory and no multilibs are used, this is usually just 6666 `.', if OS libraries are present in `libSUFFIX' sibling 6667 directories this prints e.g. `../lib64', `../lib' or `../lib32', 6668 or if OS libraries are present in `lib/SUBDIR' subdirectories it 6669 prints e.g. `amd64', `sparcv9' or `ev6'. 6670 6671`-print-multiarch' 6672 Print the path to OS libraries for the selected multiarch, 6673 relative to some `lib' subdirectory. 6674 6675`-print-prog-name=PROGRAM' 6676 Like `-print-file-name', but searches for a program such as `cpp'. 6677 6678`-print-libgcc-file-name' 6679 Same as `-print-file-name=libgcc.a'. 6680 6681 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 6682 you do want to link with `libgcc.a'. You can do: 6683 6684 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 6685 6686`-print-search-dirs' 6687 Print the name of the configured installation directory and a list 6688 of program and library directories `gcc' searches--and don't do 6689 anything else. 6690 6691 This is useful when `gcc' prints the error message `installation 6692 problem, cannot exec cpp0: No such file or directory'. To resolve 6693 this you either need to put `cpp0' and the other compiler 6694 components where `gcc' expects to find them, or you can set the 6695 environment variable `GCC_EXEC_PREFIX' to the directory where you 6696 installed them. Don't forget the trailing `/'. *Note Environment 6697 Variables::. 6698 6699`-print-sysroot' 6700 Print the target sysroot directory that is used during 6701 compilation. This is the target sysroot specified either at 6702 configure time or using the `--sysroot' option, possibly with an 6703 extra suffix that depends on compilation options. If no target 6704 sysroot is specified, the option prints nothing. 6705 6706`-print-sysroot-headers-suffix' 6707 Print the suffix added to the target sysroot when searching for 6708 headers, or give an error if the compiler is not configured with 6709 such a suffix--and don't do anything else. 6710 6711`-dumpmachine' 6712 Print the compiler's target machine (for example, 6713 `i686-pc-linux-gnu')--and don't do anything else. 6714 6715`-dumpversion' 6716 Print the compiler version (for example, `3.0')--and don't do 6717 anything else. 6718 6719`-dumpspecs' 6720 Print the compiler's built-in specs--and don't do anything else. 6721 (This is used when GCC itself is being built.) *Note Spec Files::. 6722 6723`-fno-eliminate-unused-debug-types' 6724 Normally, when producing DWARF 2 output, GCC avoids producing 6725 debug symbol output for types that are nowhere used in the source 6726 file being compiled. Sometimes it is useful to have GCC emit 6727 debugging information for all types declared in a compilation 6728 unit, regardless of whether or not they are actually used in that 6729 compilation unit, for example if, in the debugger, you want to 6730 cast a value to a type that is not actually used in your program 6731 (but is declared). More often, however, this results in a 6732 significant amount of wasted space. 6733 6734 6735File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 6736 67373.10 Options That Control Optimization 6738====================================== 6739 6740These options control various sorts of optimizations. 6741 6742 Without any optimization option, the compiler's goal is to reduce the 6743cost of compilation and to make debugging produce the expected results. 6744Statements are independent: if you stop the program with a breakpoint 6745between statements, you can then assign a new value to any variable or 6746change the program counter to any other statement in the function and 6747get exactly the results you expect from the source code. 6748 6749 Turning on optimization flags makes the compiler attempt to improve 6750the performance and/or code size at the expense of compilation time and 6751possibly the ability to debug the program. 6752 6753 The compiler performs optimization based on the knowledge it has of the 6754program. Compiling multiple files at once to a single output file mode 6755allows the compiler to use information gained from all of the files 6756when compiling each of them. 6757 6758 Not all optimizations are controlled directly by a flag. Only 6759optimizations that have a flag are listed in this section. 6760 6761 Most optimizations are only enabled if an `-O' level is set on the 6762command line. Otherwise they are disabled, even if individual 6763optimization flags are specified. 6764 6765 Depending on the target and how GCC was configured, a slightly 6766different set of optimizations may be enabled at each `-O' level than 6767those listed here. You can invoke GCC with `-Q --help=optimizers' to 6768find out the exact set of optimizations that are enabled at each level. 6769*Note Overall Options::, for examples. 6770 6771`-O' 6772`-O1' 6773 Optimize. Optimizing compilation takes somewhat more time, and a 6774 lot more memory for a large function. 6775 6776 With `-O', the compiler tries to reduce code size and execution 6777 time, without performing any optimizations that take a great deal 6778 of compilation time. 6779 6780 `-O' turns on the following optimization flags: 6781 -fauto-inc-dec 6782 -fbranch-count-reg 6783 -fcombine-stack-adjustments 6784 -fcompare-elim 6785 -fcprop-registers 6786 -fdce 6787 -fdefer-pop 6788 -fdelayed-branch 6789 -fdse 6790 -fforward-propagate 6791 -fguess-branch-probability 6792 -fif-conversion2 6793 -fif-conversion 6794 -finline-functions-called-once 6795 -fipa-pure-const 6796 -fipa-profile 6797 -fipa-reference 6798 -fmerge-constants 6799 -fmove-loop-invariants 6800 -fshrink-wrap 6801 -fsplit-wide-types 6802 -ftree-bit-ccp 6803 -ftree-ccp 6804 -fssa-phiopt 6805 -ftree-ch 6806 -ftree-copy-prop 6807 -ftree-copyrename 6808 -ftree-dce 6809 -ftree-dominator-opts 6810 -ftree-dse 6811 -ftree-forwprop 6812 -ftree-fre 6813 -ftree-phiprop 6814 -ftree-sink 6815 -ftree-slsr 6816 -ftree-sra 6817 -ftree-pta 6818 -ftree-ter 6819 -funit-at-a-time 6820 6821 `-O' also turns on `-fomit-frame-pointer' on machines where doing 6822 so does not interfere with debugging. 6823 6824`-O2' 6825 Optimize even more. GCC performs nearly all supported 6826 optimizations that do not involve a space-speed tradeoff. As 6827 compared to `-O', this option increases both compilation time and 6828 the performance of the generated code. 6829 6830 `-O2' turns on all optimization flags specified by `-O'. It also 6831 turns on the following optimization flags: 6832 -fthread-jumps 6833 -falign-functions -falign-jumps 6834 -falign-loops -falign-labels 6835 -fcaller-saves 6836 -fcrossjumping 6837 -fcse-follow-jumps -fcse-skip-blocks 6838 -fdelete-null-pointer-checks 6839 -fdevirtualize -fdevirtualize-speculatively 6840 -fexpensive-optimizations 6841 -fgcse -fgcse-lm 6842 -fhoist-adjacent-loads 6843 -finline-small-functions 6844 -findirect-inlining 6845 -fipa-cp 6846 -fipa-cp-alignment 6847 -fipa-sra 6848 -fipa-icf 6849 -fisolate-erroneous-paths-dereference 6850 -flra-remat 6851 -foptimize-sibling-calls 6852 -foptimize-strlen 6853 -fpartial-inlining 6854 -fpeephole2 6855 -freorder-blocks -freorder-blocks-and-partition -freorder-functions 6856 -frerun-cse-after-loop 6857 -fsched-interblock -fsched-spec 6858 -fschedule-insns -fschedule-insns2 6859 -fstrict-aliasing -fstrict-overflow 6860 -ftree-builtin-call-dce 6861 -ftree-switch-conversion -ftree-tail-merge 6862 -ftree-pre 6863 -ftree-vrp 6864 -fipa-ra 6865 6866 Please note the warning under `-fgcse' about invoking `-O2' on 6867 programs that use computed gotos. 6868 6869`-O3' 6870 Optimize yet more. `-O3' turns on all optimizations specified by 6871 `-O2' and also turns on the `-finline-functions', 6872 `-funswitch-loops', `-fpredictive-commoning', 6873 `-fgcse-after-reload', `-ftree-loop-vectorize', 6874 `-ftree-loop-distribute-patterns', `-ftree-slp-vectorize', 6875 `-fvect-cost-model', `-ftree-partial-pre' and `-fipa-cp-clone' 6876 options. 6877 6878`-O0' 6879 Reduce compilation time and make debugging produce the expected 6880 results. This is the default. 6881 6882`-Os' 6883 Optimize for size. `-Os' enables all `-O2' optimizations that do 6884 not typically increase code size. It also performs further 6885 optimizations designed to reduce code size. 6886 6887 `-Os' disables the following optimization flags: 6888 -falign-functions -falign-jumps -falign-loops 6889 -falign-labels -freorder-blocks -freorder-blocks-and-partition 6890 -fprefetch-loop-arrays 6891 6892`-Ofast' 6893 Disregard strict standards compliance. `-Ofast' enables all `-O3' 6894 optimizations. It also enables optimizations that are not valid 6895 for all standard-compliant programs. It turns on `-ffast-math' 6896 and the Fortran-specific `-fno-protect-parens' and 6897 `-fstack-arrays'. 6898 6899`-Og' 6900 Optimize debugging experience. `-Og' enables optimizations that 6901 do not interfere with debugging. It should be the optimization 6902 level of choice for the standard edit-compile-debug cycle, offering 6903 a reasonable level of optimization while maintaining fast 6904 compilation and a good debugging experience. 6905 6906 If you use multiple `-O' options, with or without level numbers, 6907 the last such option is the one that is effective. 6908 6909 Options of the form `-fFLAG' specify machine-independent flags. Most 6910flags have both positive and negative forms; the negative form of 6911`-ffoo' is `-fno-foo'. In the table below, only one of the forms is 6912listed--the one you typically use. You can figure out the other form 6913by either removing `no-' or adding it. 6914 6915 The following options control specific optimizations. They are either 6916activated by `-O' options or are related to ones that are. You can use 6917the following flags in the rare cases when "fine-tuning" of 6918optimizations to be performed is desired. 6919 6920`-fno-defer-pop' 6921 Always pop the arguments to each function call as soon as that 6922 function returns. For machines that must pop arguments after a 6923 function call, the compiler normally lets arguments accumulate on 6924 the stack for several function calls and pops them all at once. 6925 6926 Disabled at levels `-O', `-O2', `-O3', `-Os'. 6927 6928`-fforward-propagate' 6929 Perform a forward propagation pass on RTL. The pass tries to 6930 combine two instructions and checks if the result can be 6931 simplified. If loop unrolling is active, two passes are performed 6932 and the second is scheduled after loop unrolling. 6933 6934 This option is enabled by default at optimization levels `-O', 6935 `-O2', `-O3', `-Os'. 6936 6937`-ffp-contract=STYLE' 6938 `-ffp-contract=off' disables floating-point expression contraction. 6939 `-ffp-contract=fast' enables floating-point expression contraction 6940 such as forming of fused multiply-add operations if the target has 6941 native support for them. `-ffp-contract=on' enables 6942 floating-point expression contraction if allowed by the language 6943 standard. This is currently not implemented and treated equal to 6944 `-ffp-contract=off'. 6945 6946 The default is `-ffp-contract=fast'. 6947 6948`-fomit-frame-pointer' 6949 Don't keep the frame pointer in a register for functions that 6950 don't need one. This avoids the instructions to save, set up and 6951 restore frame pointers; it also makes an extra register available 6952 in many functions. *It also makes debugging impossible on some 6953 machines.* 6954 6955 On some machines, such as the VAX, this flag has no effect, because 6956 the standard calling sequence automatically handles the frame 6957 pointer and nothing is saved by pretending it doesn't exist. The 6958 machine-description macro `FRAME_POINTER_REQUIRED' controls 6959 whether a target machine supports this flag. *Note Register 6960 Usage: (gccint)Registers. 6961 6962 The default setting (when not optimizing for size) for 32-bit 6963 GNU/Linux x86 and 32-bit Darwin x86 targets is 6964 `-fomit-frame-pointer'. You can configure GCC with the 6965 `--enable-frame-pointer' configure option to change the default. 6966 6967 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6968 6969`-foptimize-sibling-calls' 6970 Optimize sibling and tail recursive calls. 6971 6972 Enabled at levels `-O2', `-O3', `-Os'. 6973 6974`-foptimize-strlen' 6975 Optimize various standard C string functions (e.g. `strlen', 6976 `strchr' or `strcpy') and their `_FORTIFY_SOURCE' counterparts 6977 into faster alternatives. 6978 6979 Enabled at levels `-O2', `-O3'. 6980 6981`-fno-inline' 6982 Do not expand any functions inline apart from those marked with 6983 the `always_inline' attribute. This is the default when not 6984 optimizing. 6985 6986 Single functions can be exempted from inlining by marking them 6987 with the `noinline' attribute. 6988 6989`-finline-small-functions' 6990 Integrate functions into their callers when their body is smaller 6991 than expected function call code (so overall size of program gets 6992 smaller). The compiler heuristically decides which functions are 6993 simple enough to be worth integrating in this way. This inlining 6994 applies to all functions, even those not declared inline. 6995 6996 Enabled at level `-O2'. 6997 6998`-findirect-inlining' 6999 Inline also indirect calls that are discovered to be known at 7000 compile time thanks to previous inlining. This option has any 7001 effect only when inlining itself is turned on by the 7002 `-finline-functions' or `-finline-small-functions' options. 7003 7004 Enabled at level `-O2'. 7005 7006`-finline-functions' 7007 Consider all functions for inlining, even if they are not declared 7008 inline. The compiler heuristically decides which functions are 7009 worth integrating in this way. 7010 7011 If all calls to a given function are integrated, and the function 7012 is declared `static', then the function is normally not output as 7013 assembler code in its own right. 7014 7015 Enabled at level `-O3'. 7016 7017`-finline-functions-called-once' 7018 Consider all `static' functions called once for inlining into their 7019 caller even if they are not marked `inline'. If a call to a given 7020 function is integrated, then the function is not output as 7021 assembler code in its own right. 7022 7023 Enabled at levels `-O1', `-O2', `-O3' and `-Os'. 7024 7025`-fearly-inlining' 7026 Inline functions marked by `always_inline' and functions whose 7027 body seems smaller than the function call overhead early before 7028 doing `-fprofile-generate' instrumentation and real inlining pass. 7029 Doing so makes profiling significantly cheaper and usually 7030 inlining faster on programs having large chains of nested wrapper 7031 functions. 7032 7033 Enabled by default. 7034 7035`-fipa-sra' 7036 Perform interprocedural scalar replacement of aggregates, removal 7037 of unused parameters and replacement of parameters passed by 7038 reference by parameters passed by value. 7039 7040 Enabled at levels `-O2', `-O3' and `-Os'. 7041 7042`-finline-limit=N' 7043 By default, GCC limits the size of functions that can be inlined. 7044 This flag allows coarse control of this limit. N is the size of 7045 functions that can be inlined in number of pseudo instructions. 7046 7047 Inlining is actually controlled by a number of parameters, which 7048 may be specified individually by using `--param NAME=VALUE'. The 7049 `-finline-limit=N' option sets some of these parameters as follows: 7050 7051 `max-inline-insns-single' 7052 is set to N/2. 7053 7054 `max-inline-insns-auto' 7055 is set to N/2. 7056 7057 See below for a documentation of the individual parameters 7058 controlling inlining and for the defaults of these parameters. 7059 7060 _Note:_ there may be no value to `-finline-limit' that results in 7061 default behavior. 7062 7063 _Note:_ pseudo instruction represents, in this particular context, 7064 an abstract measurement of function's size. In no way does it 7065 represent a count of assembly instructions and as such its exact 7066 meaning might change from one release to an another. 7067 7068`-fno-keep-inline-dllexport' 7069 This is a more fine-grained version of `-fkeep-inline-functions', 7070 which applies only to functions that are declared using the 7071 `dllexport' attribute or declspec (*Note Declaring Attributes of 7072 Functions: Function Attributes.) 7073 7074`-fkeep-inline-functions' 7075 In C, emit `static' functions that are declared `inline' into the 7076 object file, even if the function has been inlined into all of its 7077 callers. This switch does not affect functions using the `extern 7078 inline' extension in GNU C90. In C++, emit any and all inline 7079 functions into the object file. 7080 7081`-fkeep-static-consts' 7082 Emit variables declared `static const' when optimization isn't 7083 turned on, even if the variables aren't referenced. 7084 7085 GCC enables this option by default. If you want to force the 7086 compiler to check if a variable is referenced, regardless of 7087 whether or not optimization is turned on, use the 7088 `-fno-keep-static-consts' option. 7089 7090`-fmerge-constants' 7091 Attempt to merge identical constants (string constants and 7092 floating-point constants) across compilation units. 7093 7094 This option is the default for optimized compilation if the 7095 assembler and linker support it. Use `-fno-merge-constants' to 7096 inhibit this behavior. 7097 7098 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7099 7100`-fmerge-all-constants' 7101 Attempt to merge identical constants and identical variables. 7102 7103 This option implies `-fmerge-constants'. In addition to 7104 `-fmerge-constants' this considers e.g. even constant initialized 7105 arrays or initialized constant variables with integral or 7106 floating-point types. Languages like C or C++ require each 7107 variable, including multiple instances of the same variable in 7108 recursive calls, to have distinct locations, so using this option 7109 results in non-conforming behavior. 7110 7111`-fmodulo-sched' 7112 Perform swing modulo scheduling immediately before the first 7113 scheduling pass. This pass looks at innermost loops and reorders 7114 their instructions by overlapping different iterations. 7115 7116`-fmodulo-sched-allow-regmoves' 7117 Perform more aggressive SMS-based modulo scheduling with register 7118 moves allowed. By setting this flag certain anti-dependences 7119 edges are deleted, which triggers the generation of reg-moves 7120 based on the life-range analysis. This option is effective only 7121 with `-fmodulo-sched' enabled. 7122 7123`-fno-branch-count-reg' 7124 Do not use "decrement and branch" instructions on a count register, 7125 but instead generate a sequence of instructions that decrement a 7126 register, compare it against zero, then branch based upon the 7127 result. This option is only meaningful on architectures that 7128 support such instructions, which include x86, PowerPC, IA-64 and 7129 S/390. 7130 7131 Enabled by default at `-O1' and higher. 7132 7133 The default is `-fbranch-count-reg'. 7134 7135`-fno-function-cse' 7136 Do not put function addresses in registers; make each instruction 7137 that calls a constant function contain the function's address 7138 explicitly. 7139 7140 This option results in less efficient code, but some strange hacks 7141 that alter the assembler output may be confused by the 7142 optimizations performed when this option is not used. 7143 7144 The default is `-ffunction-cse' 7145 7146`-fno-zero-initialized-in-bss' 7147 If the target supports a BSS section, GCC by default puts 7148 variables that are initialized to zero into BSS. This can save 7149 space in the resulting code. 7150 7151 This option turns off this behavior because some programs 7152 explicitly rely on variables going to the data section--e.g., so 7153 that the resulting executable can find the beginning of that 7154 section and/or make assumptions based on that. 7155 7156 The default is `-fzero-initialized-in-bss'. 7157 7158`-fthread-jumps' 7159 Perform optimizations that check to see if a jump branches to a 7160 location where another comparison subsumed by the first is found. 7161 If so, the first branch is redirected to either the destination of 7162 the second branch or a point immediately following it, depending 7163 on whether the condition is known to be true or false. 7164 7165 Enabled at levels `-O2', `-O3', `-Os'. 7166 7167`-fsplit-wide-types' 7168 When using a type that occupies multiple registers, such as `long 7169 long' on a 32-bit system, split the registers apart and allocate 7170 them independently. This normally generates better code for those 7171 types, but may make debugging more difficult. 7172 7173 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7174 7175`-fcse-follow-jumps' 7176 In common subexpression elimination (CSE), scan through jump 7177 instructions when the target of the jump is not reached by any 7178 other path. For example, when CSE encounters an `if' statement 7179 with an `else' clause, CSE follows the jump when the condition 7180 tested is false. 7181 7182 Enabled at levels `-O2', `-O3', `-Os'. 7183 7184`-fcse-skip-blocks' 7185 This is similar to `-fcse-follow-jumps', but causes CSE to follow 7186 jumps that conditionally skip over blocks. When CSE encounters a 7187 simple `if' statement with no else clause, `-fcse-skip-blocks' 7188 causes CSE to follow the jump around the body of the `if'. 7189 7190 Enabled at levels `-O2', `-O3', `-Os'. 7191 7192`-frerun-cse-after-loop' 7193 Re-run common subexpression elimination after loop optimizations 7194 are performed. 7195 7196 Enabled at levels `-O2', `-O3', `-Os'. 7197 7198`-fgcse' 7199 Perform a global common subexpression elimination pass. This pass 7200 also performs global constant and copy propagation. 7201 7202 _Note:_ When compiling a program using computed gotos, a GCC 7203 extension, you may get better run-time performance if you disable 7204 the global common subexpression elimination pass by adding 7205 `-fno-gcse' to the command line. 7206 7207 Enabled at levels `-O2', `-O3', `-Os'. 7208 7209`-fgcse-lm' 7210 When `-fgcse-lm' is enabled, global common subexpression 7211 elimination attempts to move loads that are only killed by stores 7212 into themselves. This allows a loop containing a load/store 7213 sequence to be changed to a load outside the loop, and a 7214 copy/store within the loop. 7215 7216 Enabled by default when `-fgcse' is enabled. 7217 7218`-fgcse-sm' 7219 When `-fgcse-sm' is enabled, a store motion pass is run after 7220 global common subexpression elimination. This pass attempts to 7221 move stores out of loops. When used in conjunction with 7222 `-fgcse-lm', loops containing a load/store sequence can be changed 7223 to a load before the loop and a store after the loop. 7224 7225 Not enabled at any optimization level. 7226 7227`-fgcse-las' 7228 When `-fgcse-las' is enabled, the global common subexpression 7229 elimination pass eliminates redundant loads that come after stores 7230 to the same memory location (both partial and full redundancies). 7231 7232 Not enabled at any optimization level. 7233 7234`-fgcse-after-reload' 7235 When `-fgcse-after-reload' is enabled, a redundant load elimination 7236 pass is performed after reload. The purpose of this pass is to 7237 clean up redundant spilling. 7238 7239`-faggressive-loop-optimizations' 7240 This option tells the loop optimizer to use language constraints to 7241 derive bounds for the number of iterations of a loop. This 7242 assumes that loop code does not invoke undefined behavior by for 7243 example causing signed integer overflows or out-of-bound array 7244 accesses. The bounds for the number of iterations of a loop are 7245 used to guide loop unrolling and peeling and loop exit test 7246 optimizations. This option is enabled by default. 7247 7248`-funsafe-loop-optimizations' 7249 This option tells the loop optimizer to assume that loop indices 7250 do not overflow, and that loops with nontrivial exit condition are 7251 not infinite. This enables a wider range of loop optimizations 7252 even if the loop optimizer itself cannot prove that these 7253 assumptions are valid. If you use `-Wunsafe-loop-optimizations', 7254 the compiler warns you if it finds this kind of loop. 7255 7256`-fcrossjumping' 7257 Perform cross-jumping transformation. This transformation unifies 7258 equivalent code and saves code size. The resulting code may or 7259 may not perform better than without cross-jumping. 7260 7261 Enabled at levels `-O2', `-O3', `-Os'. 7262 7263`-fauto-inc-dec' 7264 Combine increments or decrements of addresses with memory accesses. 7265 This pass is always skipped on architectures that do not have 7266 instructions to support this. Enabled by default at `-O' and 7267 higher on architectures that support this. 7268 7269`-fdce' 7270 Perform dead code elimination (DCE) on RTL. Enabled by default at 7271 `-O' and higher. 7272 7273`-fdse' 7274 Perform dead store elimination (DSE) on RTL. Enabled by default 7275 at `-O' and higher. 7276 7277`-fif-conversion' 7278 Attempt to transform conditional jumps into branch-less 7279 equivalents. This includes use of conditional moves, min, max, 7280 set flags and abs instructions, and some tricks doable by standard 7281 arithmetics. The use of conditional execution on chips where it 7282 is available is controlled by `-fif-conversion2'. 7283 7284 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7285 7286`-fif-conversion2' 7287 Use conditional execution (where available) to transform 7288 conditional jumps into branch-less equivalents. 7289 7290 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7291 7292`-fdeclone-ctor-dtor' 7293 The C++ ABI requires multiple entry points for constructors and 7294 destructors: one for a base subobject, one for a complete object, 7295 and one for a virtual destructor that calls operator delete 7296 afterwards. For a hierarchy with virtual bases, the base and 7297 complete variants are clones, which means two copies of the 7298 function. With this option, the base and complete variants are 7299 changed to be thunks that call a common implementation. 7300 7301 Enabled by `-Os'. 7302 7303`-fdelete-null-pointer-checks' 7304 Assume that programs cannot safely dereference null pointers, and 7305 that no code or data element resides there. This enables simple 7306 constant folding optimizations at all optimization levels. In 7307 addition, other optimization passes in GCC use this flag to 7308 control global dataflow analyses that eliminate useless checks for 7309 null pointers; these assume that if a pointer is checked after it 7310 has already been dereferenced, it cannot be null. 7311 7312 Note however that in some environments this assumption is not true. 7313 Use `-fno-delete-null-pointer-checks' to disable this optimization 7314 for programs that depend on that behavior. 7315 7316 Some targets, especially embedded ones, disable this option at all 7317 levels. Otherwise it is enabled at all levels: `-O0', `-O1', 7318 `-O2', `-O3', `-Os'. Passes that use the information are enabled 7319 independently at different optimization levels. 7320 7321`-fdevirtualize' 7322 Attempt to convert calls to virtual functions to direct calls. 7323 This is done both within a procedure and interprocedurally as part 7324 of indirect inlining (`-findirect-inlining') and interprocedural 7325 constant propagation (`-fipa-cp'). Enabled at levels `-O2', 7326 `-O3', `-Os'. 7327 7328`-fdevirtualize-speculatively' 7329 Attempt to convert calls to virtual functions to speculative 7330 direct calls. Based on the analysis of the type inheritance 7331 graph, determine for a given call the set of likely targets. If 7332 the set is small, preferably of size 1, change the call into a 7333 conditional deciding between direct and indirect calls. The 7334 speculative calls enable more optimizations, such as inlining. 7335 When they seem useless after further optimization, they are 7336 converted back into original form. 7337 7338`-fdevirtualize-at-ltrans' 7339 Stream extra information needed for aggressive devirtualization 7340 when running the link-time optimizer in local transformation mode. 7341 This option enables more devirtualization but significantly 7342 increases the size of streamed data. For this reason it is 7343 disabled by default. 7344 7345`-fexpensive-optimizations' 7346 Perform a number of minor optimizations that are relatively 7347 expensive. 7348 7349 Enabled at levels `-O2', `-O3', `-Os'. 7350 7351`-free' 7352 Attempt to remove redundant extension instructions. This is 7353 especially helpful for the x86-64 architecture, which implicitly 7354 zero-extends in 64-bit registers after writing to their lower 7355 32-bit half. 7356 7357 Enabled for Alpha, AArch64 and x86 at levels `-O2', `-O3', `-Os'. 7358 7359`-fno-lifetime-dse' 7360 In C++ the value of an object is only affected by changes within 7361 its lifetime: when the constructor begins, the object has an 7362 indeterminate value, and any changes during the lifetime of the 7363 object are dead when the object is destroyed. Normally dead store 7364 elimination will take advantage of this; if your code relies on 7365 the value of the object storage persisting beyond the lifetime of 7366 the object, you can use this flag to disable this optimization. 7367 7368`-flive-range-shrinkage' 7369 Attempt to decrease register pressure through register live range 7370 shrinkage. This is helpful for fast processors with small or 7371 moderate size register sets. 7372 7373`-fira-algorithm=ALGORITHM' 7374 Use the specified coloring algorithm for the integrated register 7375 allocator. The ALGORITHM argument can be `priority', which 7376 specifies Chow's priority coloring, or `CB', which specifies 7377 Chaitin-Briggs coloring. Chaitin-Briggs coloring is not 7378 implemented for all architectures, but for those targets that do 7379 support it, it is the default because it generates better code. 7380 7381`-fira-region=REGION' 7382 Use specified regions for the integrated register allocator. The 7383 REGION argument should be one of the following: 7384 7385 `all' 7386 Use all loops as register allocation regions. This can give 7387 the best results for machines with a small and/or irregular 7388 register set. 7389 7390 `mixed' 7391 Use all loops except for loops with small register pressure 7392 as the regions. This value usually gives the best results in 7393 most cases and for most architectures, and is enabled by 7394 default when compiling with optimization for speed (`-O', 7395 `-O2', ...). 7396 7397 `one' 7398 Use all functions as a single region. This typically results 7399 in the smallest code size, and is enabled by default for 7400 `-Os' or `-O0'. 7401 7402 7403`-fira-hoist-pressure' 7404 Use IRA to evaluate register pressure in the code hoisting pass for 7405 decisions to hoist expressions. This option usually results in 7406 smaller code, but it can slow the compiler down. 7407 7408 This option is enabled at level `-Os' for all targets. 7409 7410`-fira-loop-pressure' 7411 Use IRA to evaluate register pressure in loops for decisions to 7412 move loop invariants. This option usually results in generation 7413 of faster and smaller code on machines with large register files 7414 (>= 32 registers), but it can slow the compiler down. 7415 7416 This option is enabled at level `-O3' for some targets. 7417 7418`-fno-ira-share-save-slots' 7419 Disable sharing of stack slots used for saving call-used hard 7420 registers living through a call. Each hard register gets a 7421 separate stack slot, and as a result function stack frames are 7422 larger. 7423 7424`-fno-ira-share-spill-slots' 7425 Disable sharing of stack slots allocated for pseudo-registers. 7426 Each pseudo-register that does not get a hard register gets a 7427 separate stack slot, and as a result function stack frames are 7428 larger. 7429 7430`-fira-verbose=N' 7431 Control the verbosity of the dump file for the integrated register 7432 allocator. The default value is 5. If the value N is greater or 7433 equal to 10, the dump output is sent to stderr using the same 7434 format as N minus 10. 7435 7436`-flra-remat' 7437 Enable CFG-sensitive rematerialization in LRA. Instead of loading 7438 values of spilled pseudos, LRA tries to rematerialize (recalculate) 7439 values if it is profitable. 7440 7441 Enabled at levels `-O2', `-O3', `-Os'. 7442 7443`-fdelayed-branch' 7444 If supported for the target machine, attempt to reorder 7445 instructions to exploit instruction slots available after delayed 7446 branch instructions. 7447 7448 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7449 7450`-fschedule-insns' 7451 If supported for the target machine, attempt to reorder 7452 instructions to eliminate execution stalls due to required data 7453 being unavailable. This helps machines that have slow floating 7454 point or memory load instructions by allowing other instructions 7455 to be issued until the result of the load or floating-point 7456 instruction is required. 7457 7458 Enabled at levels `-O2', `-O3'. 7459 7460`-fschedule-insns2' 7461 Similar to `-fschedule-insns', but requests an additional pass of 7462 instruction scheduling after register allocation has been done. 7463 This is especially useful on machines with a relatively small 7464 number of registers and where memory load instructions take more 7465 than one cycle. 7466 7467 Enabled at levels `-O2', `-O3', `-Os'. 7468 7469`-fno-sched-interblock' 7470 Don't schedule instructions across basic blocks. This is normally 7471 enabled by default when scheduling before register allocation, i.e. 7472 with `-fschedule-insns' or at `-O2' or higher. 7473 7474`-fno-sched-spec' 7475 Don't allow speculative motion of non-load instructions. This is 7476 normally enabled by default when scheduling before register 7477 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 7478 7479`-fsched-pressure' 7480 Enable register pressure sensitive insn scheduling before register 7481 allocation. This only makes sense when scheduling before register 7482 allocation is enabled, i.e. with `-fschedule-insns' or at `-O2' or 7483 higher. Usage of this option can improve the generated code and 7484 decrease its size by preventing register pressure increase above 7485 the number of available hard registers and subsequent spills in 7486 register allocation. 7487 7488`-fsched-spec-load' 7489 Allow speculative motion of some load instructions. This only 7490 makes sense when scheduling before register allocation, i.e. with 7491 `-fschedule-insns' or at `-O2' or higher. 7492 7493`-fsched-spec-load-dangerous' 7494 Allow speculative motion of more load instructions. This only 7495 makes sense when scheduling before register allocation, i.e. with 7496 `-fschedule-insns' or at `-O2' or higher. 7497 7498`-fsched-stalled-insns' 7499`-fsched-stalled-insns=N' 7500 Define how many insns (if any) can be moved prematurely from the 7501 queue of stalled insns into the ready list during the second 7502 scheduling pass. `-fno-sched-stalled-insns' means that no insns 7503 are moved prematurely, `-fsched-stalled-insns=0' means there is no 7504 limit on how many queued insns can be moved prematurely. 7505 `-fsched-stalled-insns' without a value is equivalent to 7506 `-fsched-stalled-insns=1'. 7507 7508`-fsched-stalled-insns-dep' 7509`-fsched-stalled-insns-dep=N' 7510 Define how many insn groups (cycles) are examined for a dependency 7511 on a stalled insn that is a candidate for premature removal from 7512 the queue of stalled insns. This has an effect only during the 7513 second scheduling pass, and only if `-fsched-stalled-insns' is 7514 used. `-fno-sched-stalled-insns-dep' is equivalent to 7515 `-fsched-stalled-insns-dep=0'. `-fsched-stalled-insns-dep' 7516 without a value is equivalent to `-fsched-stalled-insns-dep=1'. 7517 7518`-fsched2-use-superblocks' 7519 When scheduling after register allocation, use superblock 7520 scheduling. This allows motion across basic block boundaries, 7521 resulting in faster schedules. This option is experimental, as 7522 not all machine descriptions used by GCC model the CPU closely 7523 enough to avoid unreliable results from the algorithm. 7524 7525 This only makes sense when scheduling after register allocation, 7526 i.e. with `-fschedule-insns2' or at `-O2' or higher. 7527 7528`-fsched-group-heuristic' 7529 Enable the group heuristic in the scheduler. This heuristic favors 7530 the instruction that belongs to a schedule group. This is enabled 7531 by default when scheduling is enabled, i.e. with `-fschedule-insns' 7532 or `-fschedule-insns2' or at `-O2' or higher. 7533 7534`-fsched-critical-path-heuristic' 7535 Enable the critical-path heuristic in the scheduler. This 7536 heuristic favors instructions on the critical path. This is 7537 enabled by default when scheduling is enabled, i.e. with 7538 `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher. 7539 7540`-fsched-spec-insn-heuristic' 7541 Enable the speculative instruction heuristic in the scheduler. 7542 This heuristic favors speculative instructions with greater 7543 dependency weakness. This is enabled by default when scheduling 7544 is enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' 7545 or at `-O2' or higher. 7546 7547`-fsched-rank-heuristic' 7548 Enable the rank heuristic in the scheduler. This heuristic favors 7549 the instruction belonging to a basic block with greater size or 7550 frequency. This is enabled by default when scheduling is enabled, 7551 i.e. with `-fschedule-insns' or `-fschedule-insns2' or at `-O2' 7552 or higher. 7553 7554`-fsched-last-insn-heuristic' 7555 Enable the last-instruction heuristic in the scheduler. This 7556 heuristic favors the instruction that is less dependent on the 7557 last instruction scheduled. This is enabled by default when 7558 scheduling is enabled, i.e. with `-fschedule-insns' or 7559 `-fschedule-insns2' or at `-O2' or higher. 7560 7561`-fsched-dep-count-heuristic' 7562 Enable the dependent-count heuristic in the scheduler. This 7563 heuristic favors the instruction that has more instructions 7564 depending on it. This is enabled by default when scheduling is 7565 enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' or 7566 at `-O2' or higher. 7567 7568`-freschedule-modulo-scheduled-loops' 7569 Modulo scheduling is performed before traditional scheduling. If 7570 a loop is modulo scheduled, later scheduling passes may change its 7571 schedule. Use this option to control that behavior. 7572 7573`-fselective-scheduling' 7574 Schedule instructions using selective scheduling algorithm. 7575 Selective scheduling runs instead of the first scheduler pass. 7576 7577`-fselective-scheduling2' 7578 Schedule instructions using selective scheduling algorithm. 7579 Selective scheduling runs instead of the second scheduler pass. 7580 7581`-fsel-sched-pipelining' 7582 Enable software pipelining of innermost loops during selective 7583 scheduling. This option has no effect unless one of 7584 `-fselective-scheduling' or `-fselective-scheduling2' is turned on. 7585 7586`-fsel-sched-pipelining-outer-loops' 7587 When pipelining loops during selective scheduling, also pipeline 7588 outer loops. This option has no effect unless 7589 `-fsel-sched-pipelining' is turned on. 7590 7591`-fsemantic-interposition' 7592 Some object formats, like ELF, allow interposing of symbols by the 7593 dynamic linker. This means that for symbols exported from the 7594 DSO, the compiler cannot perform interprocedural propagation, 7595 inlining and other optimizations in anticipation that the function 7596 or variable in question may change. While this feature is useful, 7597 for example, to rewrite memory allocation functions by a debugging 7598 implementation, it is expensive in the terms of code quality. 7599 With `-fno-semantic-interposition' the compiler assumes that if 7600 interposition happens for functions the overwriting function will 7601 have precisely the same semantics (and side effects). Similarly 7602 if interposition happens for variables, the constructor of the 7603 variable will be the same. The flag has no effect for functions 7604 explicitly declared inline (where it is never allowed for 7605 interposition to change semantics) and for symbols explicitly 7606 declared weak. 7607 7608`-fshrink-wrap' 7609 Emit function prologues only before parts of the function that 7610 need it, rather than at the top of the function. This flag is 7611 enabled by default at `-O' and higher. 7612 7613`-fcaller-saves' 7614 Enable allocation of values to registers that are clobbered by 7615 function calls, by emitting extra instructions to save and restore 7616 the registers around such calls. Such allocation is done only 7617 when it seems to result in better code. 7618 7619 This option is always enabled by default on certain machines, 7620 usually those which have no call-preserved registers to use 7621 instead. 7622 7623 Enabled at levels `-O2', `-O3', `-Os'. 7624 7625`-fcombine-stack-adjustments' 7626 Tracks stack adjustments (pushes and pops) and stack memory 7627 references and then tries to find ways to combine them. 7628 7629 Enabled by default at `-O1' and higher. 7630 7631`-fipa-ra' 7632 Use caller save registers for allocation if those registers are 7633 not used by any called function. In that case it is not necessary 7634 to save and restore them around calls. This is only possible if 7635 called functions are part of same compilation unit as current 7636 function and they are compiled before it. 7637 7638 Enabled at levels `-O2', `-O3', `-Os'. 7639 7640`-fconserve-stack' 7641 Attempt to minimize stack usage. The compiler attempts to use less 7642 stack space, even if that makes the program slower. This option 7643 implies setting the `large-stack-frame' parameter to 100 and the 7644 `large-stack-frame-growth' parameter to 400. 7645 7646`-ftree-reassoc' 7647 Perform reassociation on trees. This flag is enabled by default 7648 at `-O' and higher. 7649 7650`-ftree-pre' 7651 Perform partial redundancy elimination (PRE) on trees. This flag 7652 is enabled by default at `-O2' and `-O3'. 7653 7654`-ftree-partial-pre' 7655 Make partial redundancy elimination (PRE) more aggressive. This 7656 flag is enabled by default at `-O3'. 7657 7658`-ftree-forwprop' 7659 Perform forward propagation on trees. This flag is enabled by 7660 default at `-O' and higher. 7661 7662`-ftree-fre' 7663 Perform full redundancy elimination (FRE) on trees. The difference 7664 between FRE and PRE is that FRE only considers expressions that 7665 are computed on all paths leading to the redundant computation. 7666 This analysis is faster than PRE, though it exposes fewer 7667 redundancies. This flag is enabled by default at `-O' and higher. 7668 7669`-ftree-phiprop' 7670 Perform hoisting of loads from conditional pointers on trees. This 7671 pass is enabled by default at `-O' and higher. 7672 7673`-fhoist-adjacent-loads' 7674 Speculatively hoist loads from both branches of an if-then-else if 7675 the loads are from adjacent locations in the same structure and 7676 the target architecture has a conditional move instruction. This 7677 flag is enabled by default at `-O2' and higher. 7678 7679`-ftree-copy-prop' 7680 Perform copy propagation on trees. This pass eliminates 7681 unnecessary copy operations. This flag is enabled by default at 7682 `-O' and higher. 7683 7684`-fipa-pure-const' 7685 Discover which functions are pure or constant. Enabled by default 7686 at `-O' and higher. 7687 7688`-fipa-reference' 7689 Discover which static variables do not escape the compilation unit. 7690 Enabled by default at `-O' and higher. 7691 7692`-fipa-pta' 7693 Perform interprocedural pointer analysis and interprocedural 7694 modification and reference analysis. This option can cause 7695 excessive memory and compile-time usage on large compilation 7696 units. It is not enabled by default at any optimization level. 7697 7698`-fipa-profile' 7699 Perform interprocedural profile propagation. The functions called 7700 only from cold functions are marked as cold. Also functions 7701 executed once (such as `cold', `noreturn', static constructors or 7702 destructors) are identified. Cold functions and loop less parts of 7703 functions executed once are then optimized for size. Enabled by 7704 default at `-O' and higher. 7705 7706`-fipa-cp' 7707 Perform interprocedural constant propagation. This optimization 7708 analyzes the program to determine when values passed to functions 7709 are constants and then optimizes accordingly. This optimization 7710 can substantially increase performance if the application has 7711 constants passed to functions. This flag is enabled by default at 7712 `-O2', `-Os' and `-O3'. 7713 7714`-fipa-cp-clone' 7715 Perform function cloning to make interprocedural constant 7716 propagation stronger. When enabled, interprocedural constant 7717 propagation performs function cloning when externally visible 7718 function can be called with constant arguments. Because this 7719 optimization can create multiple copies of functions, it may 7720 significantly increase code size (see `--param 7721 ipcp-unit-growth=VALUE'). This flag is enabled by default at 7722 `-O3'. 7723 7724`-fipa-cp-alignment' 7725 When enabled, this optimization propagates alignment of function 7726 parameters to support better vectorization and string operations. 7727 7728 This flag is enabled by default at `-O2' and `-Os'. It requires 7729 that `-fipa-cp' is enabled. 7730 7731`-fipa-icf' 7732 Perform Identical Code Folding for functions and read-only 7733 variables. The optimization reduces code size and may disturb 7734 unwind stacks by replacing a function by equivalent one with a 7735 different name. The optimization works more effectively with link 7736 time optimization enabled. 7737 7738 Nevertheless the behavior is similar to Gold Linker ICF 7739 optimization, GCC ICF works on different levels and thus the 7740 optimizations are not same - there are equivalences that are found 7741 only by GCC and equivalences found only by Gold. 7742 7743 This flag is enabled by default at `-O2' and `-Os'. 7744 7745`-fisolate-erroneous-paths-dereference' 7746 Detect paths that trigger erroneous or undefined behavior due to 7747 dereferencing a null pointer. Isolate those paths from the main 7748 control flow and turn the statement with erroneous or undefined 7749 behavior into a trap. This flag is enabled by default at `-O2' 7750 and higher. 7751 7752`-fisolate-erroneous-paths-attribute' 7753 Detect paths that trigger erroneous or undefined behavior due a 7754 null value being used in a way forbidden by a `returns_nonnull' or 7755 `nonnull' attribute. Isolate those paths from the main control 7756 flow and turn the statement with erroneous or undefined behavior 7757 into a trap. This is not currently enabled, but may be enabled by 7758 `-O2' in the future. 7759 7760`-ftree-sink' 7761 Perform forward store motion on trees. This flag is enabled by 7762 default at `-O' and higher. 7763 7764`-ftree-bit-ccp' 7765 Perform sparse conditional bit constant propagation on trees and 7766 propagate pointer alignment information. This pass only operates 7767 on local scalar variables and is enabled by default at `-O' and 7768 higher. It requires that `-ftree-ccp' is enabled. 7769 7770`-ftree-ccp' 7771 Perform sparse conditional constant propagation (CCP) on trees. 7772 This pass only operates on local scalar variables and is enabled 7773 by default at `-O' and higher. 7774 7775`-fssa-phiopt' 7776 Perform pattern matching on SSA PHI nodes to optimize conditional 7777 code. This pass is enabled by default at `-O' and higher. 7778 7779`-ftree-switch-conversion' 7780 Perform conversion of simple initializations in a switch to 7781 initializations from a scalar array. This flag is enabled by 7782 default at `-O2' and higher. 7783 7784`-ftree-tail-merge' 7785 Look for identical code sequences. When found, replace one with a 7786 jump to the other. This optimization is known as tail merging or 7787 cross jumping. This flag is enabled by default at `-O2' and 7788 higher. The compilation time in this pass can be limited using 7789 `max-tail-merge-comparisons' parameter and 7790 `max-tail-merge-iterations' parameter. 7791 7792`-ftree-dce' 7793 Perform dead code elimination (DCE) on trees. This flag is 7794 enabled by default at `-O' and higher. 7795 7796`-ftree-builtin-call-dce' 7797 Perform conditional dead code elimination (DCE) for calls to 7798 built-in functions that may set `errno' but are otherwise 7799 side-effect free. This flag is enabled by default at `-O2' and 7800 higher if `-Os' is not also specified. 7801 7802`-ftree-dominator-opts' 7803 Perform a variety of simple scalar cleanups (constant/copy 7804 propagation, redundancy elimination, range propagation and 7805 expression simplification) based on a dominator tree traversal. 7806 This also performs jump threading (to reduce jumps to jumps). This 7807 flag is enabled by default at `-O' and higher. 7808 7809`-ftree-dse' 7810 Perform dead store elimination (DSE) on trees. A dead store is a 7811 store into a memory location that is later overwritten by another 7812 store without any intervening loads. In this case the earlier 7813 store can be deleted. This flag is enabled by default at `-O' and 7814 higher. 7815 7816`-ftree-ch' 7817 Perform loop header copying on trees. This is beneficial since it 7818 increases effectiveness of code motion optimizations. It also 7819 saves one jump. This flag is enabled by default at `-O' and 7820 higher. It is not enabled for `-Os', since it usually increases 7821 code size. 7822 7823`-ftree-loop-optimize' 7824 Perform loop optimizations on trees. This flag is enabled by 7825 default at `-O' and higher. 7826 7827`-ftree-loop-linear' 7828 Perform loop interchange transformations on tree. Same as 7829 `-floop-interchange'. To use this code transformation, GCC has to 7830 be configured with `--with-isl' to enable the Graphite loop 7831 transformation infrastructure. 7832 7833`-floop-interchange' 7834 Perform loop interchange transformations on loops. Interchanging 7835 two nested loops switches the inner and outer loops. For example, 7836 given a loop like: 7837 DO J = 1, M 7838 DO I = 1, N 7839 A(J, I) = A(J, I) * C 7840 ENDDO 7841 ENDDO 7842 loop interchange transforms the loop as if it were written: 7843 DO I = 1, N 7844 DO J = 1, M 7845 A(J, I) = A(J, I) * C 7846 ENDDO 7847 ENDDO 7848 which can be beneficial when `N' is larger than the caches, 7849 because in Fortran, the elements of an array are stored in memory 7850 contiguously by column, and the original loop iterates over rows, 7851 potentially creating at each access a cache miss. This 7852 optimization applies to all the languages supported by GCC and is 7853 not limited to Fortran. To use this code transformation, GCC has 7854 to be configured with `--with-isl' to enable the Graphite loop 7855 transformation infrastructure. 7856 7857`-floop-strip-mine' 7858 Perform loop strip mining transformations on loops. Strip mining 7859 splits a loop into two nested loops. The outer loop has strides 7860 equal to the strip size and the inner loop has strides of the 7861 original loop within a strip. The strip length can be changed 7862 using the `loop-block-tile-size' parameter. For example, given a 7863 loop like: 7864 DO I = 1, N 7865 A(I) = A(I) + C 7866 ENDDO 7867 loop strip mining transforms the loop as if it were written: 7868 DO II = 1, N, 51 7869 DO I = II, min (II + 50, N) 7870 A(I) = A(I) + C 7871 ENDDO 7872 ENDDO 7873 This optimization applies to all the languages supported by GCC 7874 and is not limited to Fortran. To use this code transformation, 7875 GCC has to be configured with `--with-isl' to enable the Graphite 7876 loop transformation infrastructure. 7877 7878`-floop-block' 7879 Perform loop blocking transformations on loops. Blocking strip 7880 mines each loop in the loop nest such that the memory accesses of 7881 the element loops fit inside caches. The strip length can be 7882 changed using the `loop-block-tile-size' parameter. For example, 7883 given a loop like: 7884 DO I = 1, N 7885 DO J = 1, M 7886 A(J, I) = B(I) + C(J) 7887 ENDDO 7888 ENDDO 7889 loop blocking transforms the loop as if it were written: 7890 DO II = 1, N, 51 7891 DO JJ = 1, M, 51 7892 DO I = II, min (II + 50, N) 7893 DO J = JJ, min (JJ + 50, M) 7894 A(J, I) = B(I) + C(J) 7895 ENDDO 7896 ENDDO 7897 ENDDO 7898 ENDDO 7899 which can be beneficial when `M' is larger than the caches, 7900 because the innermost loop iterates over a smaller amount of data 7901 which can be kept in the caches. This optimization applies to all 7902 the languages supported by GCC and is not limited to Fortran. To 7903 use this code transformation, GCC has to be configured with 7904 `--with-isl' to enable the Graphite loop transformation 7905 infrastructure. 7906 7907`-fgraphite-identity' 7908 Enable the identity transformation for graphite. For every SCoP 7909 we generate the polyhedral representation and transform it back to 7910 gimple. Using `-fgraphite-identity' we can check the costs or 7911 benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation. Some 7912 minimal optimizations are also performed by the code generator 7913 ISL, like index splitting and dead code elimination in loops. 7914 7915`-floop-nest-optimize' 7916 Enable the ISL based loop nest optimizer. This is a generic loop 7917 nest optimizer based on the Pluto optimization algorithms. It 7918 calculates a loop structure optimized for data-locality and 7919 parallelism. This option is experimental. 7920 7921`-floop-unroll-and-jam' 7922 Enable unroll and jam for the ISL based loop nest optimizer. The 7923 unroll factor can be changed using the `loop-unroll-jam-size' 7924 parameter. The unrolled dimension (counting from the most inner 7925 one) can be changed using the `loop-unroll-jam-depth' parameter. 7926 . 7927 7928`-floop-parallelize-all' 7929 Use the Graphite data dependence analysis to identify loops that 7930 can be parallelized. Parallelize all the loops that can be 7931 analyzed to not contain loop carried dependences without checking 7932 that it is profitable to parallelize the loops. 7933 7934`-fcheck-data-deps' 7935 Compare the results of several data dependence analyzers. This 7936 option is used for debugging the data dependence analyzers. 7937 7938`-ftree-loop-if-convert' 7939 Attempt to transform conditional jumps in the innermost loops to 7940 branch-less equivalents. The intent is to remove control-flow from 7941 the innermost loops in order to improve the ability of the 7942 vectorization pass to handle these loops. This is enabled by 7943 default if vectorization is enabled. 7944 7945`-ftree-loop-if-convert-stores' 7946 Attempt to also if-convert conditional jumps containing memory 7947 writes. This transformation can be unsafe for multi-threaded 7948 programs as it transforms conditional memory writes into 7949 unconditional memory writes. For example, 7950 for (i = 0; i < N; i++) 7951 if (cond) 7952 A[i] = expr; 7953 is transformed to 7954 for (i = 0; i < N; i++) 7955 A[i] = cond ? expr : A[i]; 7956 potentially producing data races. 7957 7958`-ftree-loop-distribution' 7959 Perform loop distribution. This flag can improve cache 7960 performance on big loop bodies and allow further loop 7961 optimizations, like parallelization or vectorization, to take 7962 place. For example, the loop 7963 DO I = 1, N 7964 A(I) = B(I) + C 7965 D(I) = E(I) * F 7966 ENDDO 7967 is transformed to 7968 DO I = 1, N 7969 A(I) = B(I) + C 7970 ENDDO 7971 DO I = 1, N 7972 D(I) = E(I) * F 7973 ENDDO 7974 7975`-ftree-loop-distribute-patterns' 7976 Perform loop distribution of patterns that can be code generated 7977 with calls to a library. This flag is enabled by default at `-O3'. 7978 7979 This pass distributes the initialization loops and generates a 7980 call to memset zero. For example, the loop 7981 DO I = 1, N 7982 A(I) = 0 7983 B(I) = A(I) + I 7984 ENDDO 7985 is transformed to 7986 DO I = 1, N 7987 A(I) = 0 7988 ENDDO 7989 DO I = 1, N 7990 B(I) = A(I) + I 7991 ENDDO 7992 and the initialization loop is transformed into a call to memset 7993 zero. 7994 7995`-ftree-loop-im' 7996 Perform loop invariant motion on trees. This pass moves only 7997 invariants that are hard to handle at RTL level (function calls, 7998 operations that expand to nontrivial sequences of insns). With 7999 `-funswitch-loops' it also moves operands of conditions that are 8000 invariant out of the loop, so that we can use just trivial 8001 invariantness analysis in loop unswitching. The pass also includes 8002 store motion. 8003 8004`-ftree-loop-ivcanon' 8005 Create a canonical counter for number of iterations in loops for 8006 which determining number of iterations requires complicated 8007 analysis. Later optimizations then may determine the number 8008 easily. Useful especially in connection with unrolling. 8009 8010`-fivopts' 8011 Perform induction variable optimizations (strength reduction, 8012 induction variable merging and induction variable elimination) on 8013 trees. 8014 8015`-ftree-parallelize-loops=n' 8016 Parallelize loops, i.e., split their iteration space to run in n 8017 threads. This is only possible for loops whose iterations are 8018 independent and can be arbitrarily reordered. The optimization is 8019 only profitable on multiprocessor machines, for loops that are 8020 CPU-intensive, rather than constrained e.g. by memory bandwidth. 8021 This option implies `-pthread', and thus is only supported on 8022 targets that have support for `-pthread'. 8023 8024`-ftree-pta' 8025 Perform function-local points-to analysis on trees. This flag is 8026 enabled by default at `-O' and higher. 8027 8028`-ftree-sra' 8029 Perform scalar replacement of aggregates. This pass replaces 8030 structure references with scalars to prevent committing structures 8031 to memory too early. This flag is enabled by default at `-O' and 8032 higher. 8033 8034`-ftree-copyrename' 8035 Perform copy renaming on trees. This pass attempts to rename 8036 compiler temporaries to other variables at copy locations, usually 8037 resulting in variable names which more closely resemble the 8038 original variables. This flag is enabled by default at `-O' and 8039 higher. 8040 8041`-ftree-coalesce-inlined-vars' 8042 Tell the copyrename pass (see `-ftree-copyrename') to attempt to 8043 combine small user-defined variables too, but only if they are 8044 inlined from other functions. It is a more limited form of 8045 `-ftree-coalesce-vars'. This may harm debug information of such 8046 inlined variables, but it keeps variables of the inlined-into 8047 function apart from each other, such that they are more likely to 8048 contain the expected values in a debugging session. 8049 8050`-ftree-coalesce-vars' 8051 Tell the copyrename pass (see `-ftree-copyrename') to attempt to 8052 combine small user-defined variables too, instead of just compiler 8053 temporaries. This may severely limit the ability to debug an 8054 optimized program compiled with `-fno-var-tracking-assignments'. 8055 In the negated form, this flag prevents SSA coalescing of user 8056 variables, including inlined ones. This option is enabled by 8057 default. 8058 8059`-ftree-ter' 8060 Perform temporary expression replacement during the SSA->normal 8061 phase. Single use/single def temporaries are replaced at their 8062 use location with their defining expression. This results in 8063 non-GIMPLE code, but gives the expanders much more complex trees 8064 to work on resulting in better RTL generation. This is enabled by 8065 default at `-O' and higher. 8066 8067`-ftree-slsr' 8068 Perform straight-line strength reduction on trees. This 8069 recognizes related expressions involving multiplications and 8070 replaces them by less expensive calculations when possible. This 8071 is enabled by default at `-O' and higher. 8072 8073`-ftree-vectorize' 8074 Perform vectorization on trees. This flag enables 8075 `-ftree-loop-vectorize' and `-ftree-slp-vectorize' if not 8076 explicitly specified. 8077 8078`-ftree-loop-vectorize' 8079 Perform loop vectorization on trees. This flag is enabled by 8080 default at `-O3' and when `-ftree-vectorize' is enabled. 8081 8082`-ftree-slp-vectorize' 8083 Perform basic block vectorization on trees. This flag is enabled 8084 by default at `-O3' and when `-ftree-vectorize' is enabled. 8085 8086`-fvect-cost-model=MODEL' 8087 Alter the cost model used for vectorization. The MODEL argument 8088 should be one of `unlimited', `dynamic' or `cheap'. With the 8089 `unlimited' model the vectorized code-path is assumed to be 8090 profitable while with the `dynamic' model a runtime check guards 8091 the vectorized code-path to enable it only for iteration counts 8092 that will likely execute faster than when executing the original 8093 scalar loop. The `cheap' model disables vectorization of loops 8094 where doing so would be cost prohibitive for example due to 8095 required runtime checks for data dependence or alignment but 8096 otherwise is equal to the `dynamic' model. The default cost model 8097 depends on other optimization flags and is either `dynamic' or 8098 `cheap'. 8099 8100`-fsimd-cost-model=MODEL' 8101 Alter the cost model used for vectorization of loops marked with 8102 the OpenMP or Cilk Plus simd directive. The MODEL argument should 8103 be one of `unlimited', `dynamic', `cheap'. All values of MODEL 8104 have the same meaning as described in `-fvect-cost-model' and by 8105 default a cost model defined with `-fvect-cost-model' is used. 8106 8107`-ftree-vrp' 8108 Perform Value Range Propagation on trees. This is similar to the 8109 constant propagation pass, but instead of values, ranges of values 8110 are propagated. This allows the optimizers to remove unnecessary 8111 range checks like array bound checks and null pointer checks. 8112 This is enabled by default at `-O2' and higher. Null pointer check 8113 elimination is only done if `-fdelete-null-pointer-checks' is 8114 enabled. 8115 8116`-fsplit-ivs-in-unroller' 8117 Enables expression of values of induction variables in later 8118 iterations of the unrolled loop using the value in the first 8119 iteration. This breaks long dependency chains, thus improving 8120 efficiency of the scheduling passes. 8121 8122 A combination of `-fweb' and CSE is often sufficient to obtain the 8123 same effect. However, that is not reliable in cases where the 8124 loop body is more complicated than a single basic block. It also 8125 does not work at all on some architectures due to restrictions in 8126 the CSE pass. 8127 8128 This optimization is enabled by default. 8129 8130`-fvariable-expansion-in-unroller' 8131 With this option, the compiler creates multiple copies of some 8132 local variables when unrolling a loop, which can result in 8133 superior code. 8134 8135`-fpartial-inlining' 8136 Inline parts of functions. This option has any effect only when 8137 inlining itself is turned on by the `-finline-functions' or 8138 `-finline-small-functions' options. 8139 8140 Enabled at level `-O2'. 8141 8142`-fpredictive-commoning' 8143 Perform predictive commoning optimization, i.e., reusing 8144 computations (especially memory loads and stores) performed in 8145 previous iterations of loops. 8146 8147 This option is enabled at level `-O3'. 8148 8149`-fprefetch-loop-arrays' 8150 If supported by the target machine, generate instructions to 8151 prefetch memory to improve the performance of loops that access 8152 large arrays. 8153 8154 This option may generate better or worse code; results are highly 8155 dependent on the structure of loops within the source code. 8156 8157 Disabled at level `-Os'. 8158 8159`-fno-peephole' 8160`-fno-peephole2' 8161 Disable any machine-specific peephole optimizations. The 8162 difference between `-fno-peephole' and `-fno-peephole2' is in how 8163 they are implemented in the compiler; some targets use one, some 8164 use the other, a few use both. 8165 8166 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 8167 levels `-O2', `-O3', `-Os'. 8168 8169`-fno-guess-branch-probability' 8170 Do not guess branch probabilities using heuristics. 8171 8172 GCC uses heuristics to guess branch probabilities if they are not 8173 provided by profiling feedback (`-fprofile-arcs'). These 8174 heuristics are based on the control flow graph. If some branch 8175 probabilities are specified by `__builtin_expect', then the 8176 heuristics are used to guess branch probabilities for the rest of 8177 the control flow graph, taking the `__builtin_expect' info into 8178 account. The interactions between the heuristics and 8179 `__builtin_expect' can be complex, and in some cases, it may be 8180 useful to disable the heuristics so that the effects of 8181 `__builtin_expect' are easier to understand. 8182 8183 The default is `-fguess-branch-probability' at levels `-O', `-O2', 8184 `-O3', `-Os'. 8185 8186`-freorder-blocks' 8187 Reorder basic blocks in the compiled function in order to reduce 8188 number of taken branches and improve code locality. 8189 8190 Enabled at levels `-O2', `-O3'. 8191 8192`-freorder-blocks-and-partition' 8193 In addition to reordering basic blocks in the compiled function, 8194 in order to reduce number of taken branches, partitions hot and 8195 cold basic blocks into separate sections of the assembly and .o 8196 files, to improve paging and cache locality performance. 8197 8198 This optimization is automatically turned off in the presence of 8199 exception handling, for linkonce sections, for functions with a 8200 user-defined section attribute and on any architecture that does 8201 not support named sections. 8202 8203 Enabled for x86 at levels `-O2', `-O3'. 8204 8205`-freorder-functions' 8206 Reorder functions in the object file in order to improve code 8207 locality. This is implemented by using special subsections 8208 `.text.hot' for most frequently executed functions and 8209 `.text.unlikely' for unlikely executed functions. Reordering is 8210 done by the linker so object file format must support named 8211 sections and linker must place them in a reasonable way. 8212 8213 Also profile feedback must be available to make this option 8214 effective. See `-fprofile-arcs' for details. 8215 8216 Enabled at levels `-O2', `-O3', `-Os'. 8217 8218`-fstrict-aliasing' 8219 Allow the compiler to assume the strictest aliasing rules 8220 applicable to the language being compiled. For C (and C++), this 8221 activates optimizations based on the type of expressions. In 8222 particular, an object of one type is assumed never to reside at 8223 the same address as an object of a different type, unless the 8224 types are almost the same. For example, an `unsigned int' can 8225 alias an `int', but not a `void*' or a `double'. A character type 8226 may alias any other type. 8227 8228 Pay special attention to code like this: 8229 union a_union { 8230 int i; 8231 double d; 8232 }; 8233 8234 int f() { 8235 union a_union t; 8236 t.d = 3.0; 8237 return t.i; 8238 } 8239 The practice of reading from a different union member than the one 8240 most recently written to (called "type-punning") is common. Even 8241 with `-fstrict-aliasing', type-punning is allowed, provided the 8242 memory is accessed through the union type. So, the code above 8243 works as expected. *Note Structures unions enumerations and 8244 bit-fields implementation::. However, this code might not: 8245 int f() { 8246 union a_union t; 8247 int* ip; 8248 t.d = 3.0; 8249 ip = &t.i; 8250 return *ip; 8251 } 8252 8253 Similarly, access by taking the address, casting the resulting 8254 pointer and dereferencing the result has undefined behavior, even 8255 if the cast uses a union type, e.g.: 8256 int f() { 8257 double d = 3.0; 8258 return ((union a_union *) &d)->i; 8259 } 8260 8261 The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3', 8262 `-Os'. 8263 8264`-fstrict-overflow' 8265 Allow the compiler to assume strict signed overflow rules, 8266 depending on the language being compiled. For C (and C++) this 8267 means that overflow when doing arithmetic with signed numbers is 8268 undefined, which means that the compiler may assume that it does 8269 not happen. This permits various optimizations. For example, the 8270 compiler assumes that an expression like `i + 10 > i' is always 8271 true for signed `i'. This assumption is only valid if signed 8272 overflow is undefined, as the expression is false if `i + 10' 8273 overflows when using twos complement arithmetic. When this option 8274 is in effect any attempt to determine whether an operation on 8275 signed numbers overflows must be written carefully to not actually 8276 involve overflow. 8277 8278 This option also allows the compiler to assume strict pointer 8279 semantics: given a pointer to an object, if adding an offset to 8280 that pointer does not produce a pointer to the same object, the 8281 addition is undefined. This permits the compiler to conclude that 8282 `p + u > p' is always true for a pointer `p' and unsigned integer 8283 `u'. This assumption is only valid because pointer wraparound is 8284 undefined, as the expression is false if `p + u' overflows using 8285 twos complement arithmetic. 8286 8287 See also the `-fwrapv' option. Using `-fwrapv' means that integer 8288 signed overflow is fully defined: it wraps. When `-fwrapv' is 8289 used, there is no difference between `-fstrict-overflow' and 8290 `-fno-strict-overflow' for integers. With `-fwrapv' certain types 8291 of overflow are permitted. For example, if the compiler gets an 8292 overflow when doing arithmetic on constants, the overflowed value 8293 can still be used with `-fwrapv', but not otherwise. 8294 8295 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3', 8296 `-Os'. 8297 8298`-falign-functions' 8299`-falign-functions=N' 8300 Align the start of functions to the next power-of-two greater than 8301 N, skipping up to N bytes. For instance, `-falign-functions=32' 8302 aligns functions to the next 32-byte boundary, but 8303 `-falign-functions=24' aligns to the next 32-byte boundary only if 8304 this can be done by skipping 23 bytes or less. 8305 8306 `-fno-align-functions' and `-falign-functions=1' are equivalent 8307 and mean that functions are not aligned. 8308 8309 Some assemblers only support this flag when N is a power of two; 8310 in that case, it is rounded up. 8311 8312 If N is not specified or is zero, use a machine-dependent default. 8313 8314 Enabled at levels `-O2', `-O3'. 8315 8316`-falign-labels' 8317`-falign-labels=N' 8318 Align all branch targets to a power-of-two boundary, skipping up to 8319 N bytes like `-falign-functions'. This option can easily make 8320 code slower, because it must insert dummy operations for when the 8321 branch target is reached in the usual flow of the code. 8322 8323 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 8324 that labels are not aligned. 8325 8326 If `-falign-loops' or `-falign-jumps' are applicable and are 8327 greater than this value, then their values are used instead. 8328 8329 If N is not specified or is zero, use a machine-dependent default 8330 which is very likely to be `1', meaning no alignment. 8331 8332 Enabled at levels `-O2', `-O3'. 8333 8334`-falign-loops' 8335`-falign-loops=N' 8336 Align loops to a power-of-two boundary, skipping up to N bytes 8337 like `-falign-functions'. If the loops are executed many times, 8338 this makes up for any execution of the dummy operations. 8339 8340 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 8341 that loops are not aligned. 8342 8343 If N is not specified or is zero, use a machine-dependent default. 8344 8345 Enabled at levels `-O2', `-O3'. 8346 8347`-falign-jumps' 8348`-falign-jumps=N' 8349 Align branch targets to a power-of-two boundary, for branch targets 8350 where the targets can only be reached by jumping, skipping up to N 8351 bytes like `-falign-functions'. In this case, no dummy operations 8352 need be executed. 8353 8354 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 8355 that loops are not aligned. 8356 8357 If N is not specified or is zero, use a machine-dependent default. 8358 8359 Enabled at levels `-O2', `-O3'. 8360 8361`-funit-at-a-time' 8362 This option is left for compatibility reasons. `-funit-at-a-time' 8363 has no effect, while `-fno-unit-at-a-time' implies 8364 `-fno-toplevel-reorder' and `-fno-section-anchors'. 8365 8366 Enabled by default. 8367 8368`-fno-toplevel-reorder' 8369 Do not reorder top-level functions, variables, and `asm' 8370 statements. Output them in the same order that they appear in the 8371 input file. When this option is used, unreferenced static 8372 variables are not removed. This option is intended to support 8373 existing code that relies on a particular ordering. For new code, 8374 it is better to use attributes when possible. 8375 8376 Enabled at level `-O0'. When disabled explicitly, it also implies 8377 `-fno-section-anchors', which is otherwise enabled at `-O0' on some 8378 targets. 8379 8380`-fweb' 8381 Constructs webs as commonly used for register allocation purposes 8382 and assign each web individual pseudo register. This allows the 8383 register allocation pass to operate on pseudos directly, but also 8384 strengthens several other optimization passes, such as CSE, loop 8385 optimizer and trivial dead code remover. It can, however, make 8386 debugging impossible, since variables no longer stay in a "home 8387 register". 8388 8389 Enabled by default with `-funroll-loops'. 8390 8391`-fwhole-program' 8392 Assume that the current compilation unit represents the whole 8393 program being compiled. All public functions and variables with 8394 the exception of `main' and those merged by attribute 8395 `externally_visible' become static functions and in effect are 8396 optimized more aggressively by interprocedural optimizers. 8397 8398 This option should not be used in combination with `-flto'. 8399 Instead relying on a linker plugin should provide safer and more 8400 precise information. 8401 8402`-flto[=N]' 8403 This option runs the standard link-time optimizer. When invoked 8404 with source code, it generates GIMPLE (one of GCC's internal 8405 representations) and writes it to special ELF sections in the 8406 object file. When the object files are linked together, all the 8407 function bodies are read from these ELF sections and instantiated 8408 as if they had been part of the same translation unit. 8409 8410 To use the link-time optimizer, `-flto' and optimization options 8411 should be specified at compile time and during the final link. 8412 For example: 8413 8414 gcc -c -O2 -flto foo.c 8415 gcc -c -O2 -flto bar.c 8416 gcc -o myprog -flto -O2 foo.o bar.o 8417 8418 The first two invocations to GCC save a bytecode representation of 8419 GIMPLE into special ELF sections inside `foo.o' and `bar.o'. The 8420 final invocation reads the GIMPLE bytecode from `foo.o' and 8421 `bar.o', merges the two files into a single internal image, and 8422 compiles the result as usual. Since both `foo.o' and `bar.o' are 8423 merged into a single image, this causes all the interprocedural 8424 analyses and optimizations in GCC to work across the two files as 8425 if they were a single one. This means, for example, that the 8426 inliner is able to inline functions in `bar.o' into functions in 8427 `foo.o' and vice-versa. 8428 8429 Another (simpler) way to enable link-time optimization is: 8430 8431 gcc -o myprog -flto -O2 foo.c bar.c 8432 8433 The above generates bytecode for `foo.c' and `bar.c', merges them 8434 together into a single GIMPLE representation and optimizes them as 8435 usual to produce `myprog'. 8436 8437 The only important thing to keep in mind is that to enable 8438 link-time optimizations you need to use the GCC driver to perform 8439 the link-step. GCC then automatically performs link-time 8440 optimization if any of the objects involved were compiled with the 8441 `-flto' command-line option. You generally should specify the 8442 optimization options to be used for link-time optimization though 8443 GCC tries to be clever at guessing an optimization level to use 8444 from the options used at compile-time if you fail to specify one 8445 at link-time. You can always override the automatic decision to 8446 do link-time optimization at link-time by passing `-fno-lto' to 8447 the link command. 8448 8449 To make whole program optimization effective, it is necessary to 8450 make certain whole program assumptions. The compiler needs to know 8451 what functions and variables can be accessed by libraries and 8452 runtime outside of the link-time optimized unit. When supported 8453 by the linker, the linker plugin (see `-fuse-linker-plugin') 8454 passes information to the compiler about used and externally 8455 visible symbols. When the linker plugin is not available, 8456 `-fwhole-program' should be used to allow the compiler to make 8457 these assumptions, which leads to more aggressive optimization 8458 decisions. 8459 8460 When `-fuse-linker-plugin' is not enabled then, when a file is 8461 compiled with `-flto', the generated object file is larger than a 8462 regular object file because it contains GIMPLE bytecodes and the 8463 usual final code (see `-ffat-lto-objects'. This means that object 8464 files with LTO information can be linked as normal object files; 8465 if `-fno-lto' is passed to the linker, no interprocedural 8466 optimizations are applied. Note that when `-fno-fat-lto-objects' 8467 is enabled the compile-stage is faster but you cannot perform a 8468 regular, non-LTO link on them. 8469 8470 Additionally, the optimization flags used to compile individual 8471 files are not necessarily related to those used at link time. For 8472 instance, 8473 8474 gcc -c -O0 -ffat-lto-objects -flto foo.c 8475 gcc -c -O0 -ffat-lto-objects -flto bar.c 8476 gcc -o myprog -O3 foo.o bar.o 8477 8478 This produces individual object files with unoptimized assembler 8479 code, but the resulting binary `myprog' is optimized at `-O3'. 8480 If, instead, the final binary is generated with `-fno-lto', then 8481 `myprog' is not optimized. 8482 8483 When producing the final binary, GCC only applies link-time 8484 optimizations to those files that contain bytecode. Therefore, 8485 you can mix and match object files and libraries with GIMPLE 8486 bytecodes and final object code. GCC automatically selects which 8487 files to optimize in LTO mode and which files to link without 8488 further processing. 8489 8490 There are some code generation flags preserved by GCC when 8491 generating bytecodes, as they need to be used during the final link 8492 stage. Generally options specified at link-time override those 8493 specified at compile-time. 8494 8495 If you do not specify an optimization level option `-O' at 8496 link-time then GCC computes one based on the optimization levels 8497 used when compiling the object files. The highest optimization 8498 level wins here. 8499 8500 Currently, the following options and their setting are take from 8501 the first object file that explicitely specified it: `-fPIC', 8502 `-fpic', `-fpie', `-fcommon', `-fexceptions', 8503 `-fnon-call-exceptions', `-fgnu-tm' and all the `-m' target flags. 8504 8505 Certain ABI changing flags are required to match in all 8506 compilation-units and trying to override this at link-time with a 8507 conflicting value is ignored. This includes options such as 8508 `-freg-struct-return' and `-fpcc-struct-return'. 8509 8510 Other options such as `-ffp-contract', `-fno-strict-overflow', 8511 `-fwrapv', `-fno-trapv' or `-fno-strict-aliasing' are passed 8512 through to the link stage and merged conservatively for 8513 conflicting translation units. Specifically 8514 `-fno-strict-overflow', `-fwrapv' and `-fno-trapv' take precedence 8515 and for example `-ffp-contract=off' takes precedence over 8516 `-ffp-contract=fast'. You can override them at linke-time. 8517 8518 It is recommended that you compile all the files participating in 8519 the same link with the same options and also specify those options 8520 at link time. 8521 8522 If LTO encounters objects with C linkage declared with incompatible 8523 types in separate translation units to be linked together 8524 (undefined behavior according to ISO C99 6.2.7), a non-fatal 8525 diagnostic may be issued. The behavior is still undefined at run 8526 time. Similar diagnostics may be raised for other languages. 8527 8528 Another feature of LTO is that it is possible to apply 8529 interprocedural optimizations on files written in different 8530 languages: 8531 8532 gcc -c -flto foo.c 8533 g++ -c -flto bar.cc 8534 gfortran -c -flto baz.f90 8535 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran 8536 8537 Notice that the final link is done with `g++' to get the C++ 8538 runtime libraries and `-lgfortran' is added to get the Fortran 8539 runtime libraries. In general, when mixing languages in LTO mode, 8540 you should use the same link command options as when mixing 8541 languages in a regular (non-LTO) compilation. 8542 8543 If object files containing GIMPLE bytecode are stored in a library 8544 archive, say `libfoo.a', it is possible to extract and use them in 8545 an LTO link if you are using a linker with plugin support. To 8546 create static libraries suitable for LTO, use `gcc-ar' and 8547 `gcc-ranlib' instead of `ar' and `ranlib'; to show the symbols of 8548 object files with GIMPLE bytecode, use `gcc-nm'. Those commands 8549 require that `ar', `ranlib' and `nm' have been compiled with 8550 plugin support. At link time, use the the flag 8551 `-fuse-linker-plugin' to ensure that the library participates in 8552 the LTO optimization process: 8553 8554 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo 8555 8556 With the linker plugin enabled, the linker extracts the needed 8557 GIMPLE files from `libfoo.a' and passes them on to the running GCC 8558 to make them part of the aggregated GIMPLE image to be optimized. 8559 8560 If you are not using a linker with plugin support and/or do not 8561 enable the linker plugin, then the objects inside `libfoo.a' are 8562 extracted and linked as usual, but they do not participate in the 8563 LTO optimization process. In order to make a static library 8564 suitable for both LTO optimization and usual linkage, compile its 8565 object files with `-flto' `-ffat-lto-objects'. 8566 8567 Link-time optimizations do not require the presence of the whole 8568 program to operate. If the program does not require any symbols 8569 to be exported, it is possible to combine `-flto' and 8570 `-fwhole-program' to allow the interprocedural optimizers to use 8571 more aggressive assumptions which may lead to improved 8572 optimization opportunities. Use of `-fwhole-program' is not 8573 needed when linker plugin is active (see `-fuse-linker-plugin'). 8574 8575 The current implementation of LTO makes no attempt to generate 8576 bytecode that is portable between different types of hosts. The 8577 bytecode files are versioned and there is a strict version check, 8578 so bytecode files generated in one version of GCC do not work with 8579 an older or newer version of GCC. 8580 8581 Link-time optimization does not work well with generation of 8582 debugging information. Combining `-flto' with `-g' is currently 8583 experimental and expected to produce unexpected results. 8584 8585 If you specify the optional N, the optimization and code 8586 generation done at link time is executed in parallel using N 8587 parallel jobs by utilizing an installed `make' program. The 8588 environment variable `MAKE' may be used to override the program 8589 used. The default value for N is 1. 8590 8591 You can also specify `-flto=jobserver' to use GNU make's job 8592 server mode to determine the number of parallel jobs. This is 8593 useful when the Makefile calling GCC is already executing in 8594 parallel. You must prepend a `+' to the command recipe in the 8595 parent Makefile for this to work. This option likely only works 8596 if `MAKE' is GNU make. 8597 8598`-flto-partition=ALG' 8599 Specify the partitioning algorithm used by the link-time optimizer. 8600 The value is either `1to1' to specify a partitioning mirroring the 8601 original source files or `balanced' to specify partitioning into 8602 equally sized chunks (whenever possible) or `max' to create new 8603 partition for every symbol where possible. Specifying `none' as 8604 an algorithm disables partitioning and streaming completely. The 8605 default value is `balanced'. While `1to1' can be used as an 8606 workaround for various code ordering issues, the `max' 8607 partitioning is intended for internal testing only. The value 8608 `one' specifies that exactly one partition should be used while 8609 the value `none' bypasses partitioning and executes the link-time 8610 optimization step directly from the WPA phase. 8611 8612`-flto-odr-type-merging' 8613 Enable streaming of mangled types names of C++ types and their 8614 unification at linktime. This increases size of LTO object files, 8615 but enable diagnostics about One Definition Rule violations. 8616 8617`-flto-compression-level=N' 8618 This option specifies the level of compression used for 8619 intermediate language written to LTO object files, and is only 8620 meaningful in conjunction with LTO mode (`-flto'). Valid values 8621 are 0 (no compression) to 9 (maximum compression). Values outside 8622 this range are clamped to either 0 or 9. If the option is not 8623 given, a default balanced compression setting is used. 8624 8625`-flto-report' 8626 Prints a report with internal details on the workings of the 8627 link-time optimizer. The contents of this report vary from 8628 version to version. It is meant to be useful to GCC developers 8629 when processing object files in LTO mode (via `-flto'). 8630 8631 Disabled by default. 8632 8633`-flto-report-wpa' 8634 Like `-flto-report', but only print for the WPA phase of Link Time 8635 Optimization. 8636 8637`-fuse-linker-plugin' 8638 Enables the use of a linker plugin during link-time optimization. 8639 This option relies on plugin support in the linker, which is 8640 available in gold or in GNU ld 2.21 or newer. 8641 8642 This option enables the extraction of object files with GIMPLE 8643 bytecode out of library archives. This improves the quality of 8644 optimization by exposing more code to the link-time optimizer. 8645 This information specifies what symbols can be accessed externally 8646 (by non-LTO object or during dynamic linking). Resulting code 8647 quality improvements on binaries (and shared libraries that use 8648 hidden visibility) are similar to `-fwhole-program'. See `-flto' 8649 for a description of the effect of this flag and how to use it. 8650 8651 This option is enabled by default when LTO support in GCC is 8652 enabled and GCC was configured for use with a linker supporting 8653 plugins (GNU ld 2.21 or newer or gold). 8654 8655`-ffat-lto-objects' 8656 Fat LTO objects are object files that contain both the 8657 intermediate language and the object code. This makes them usable 8658 for both LTO linking and normal linking. This option is effective 8659 only when compiling with `-flto' and is ignored at link time. 8660 8661 `-fno-fat-lto-objects' improves compilation time over plain LTO, 8662 but requires the complete toolchain to be aware of LTO. It 8663 requires a linker with linker plugin support for basic 8664 functionality. Additionally, `nm', `ar' and `ranlib' need to 8665 support linker plugins to allow a full-featured build environment 8666 (capable of building static libraries etc). GCC provides the 8667 `gcc-ar', `gcc-nm', `gcc-ranlib' wrappers to pass the right options 8668 to these tools. With non fat LTO makefiles need to be modified to 8669 use them. 8670 8671 The default is `-fno-fat-lto-objects' on targets with linker plugin 8672 support. 8673 8674`-fcompare-elim' 8675 After register allocation and post-register allocation instruction 8676 splitting, identify arithmetic instructions that compute processor 8677 flags similar to a comparison operation based on that arithmetic. 8678 If possible, eliminate the explicit comparison operation. 8679 8680 This pass only applies to certain targets that cannot explicitly 8681 represent the comparison operation before register allocation is 8682 complete. 8683 8684 Enabled at levels `-O', `-O2', `-O3', `-Os'. 8685 8686`-fcprop-registers' 8687 After register allocation and post-register allocation instruction 8688 splitting, perform a copy-propagation pass to try to reduce 8689 scheduling dependencies and occasionally eliminate the copy. 8690 8691 Enabled at levels `-O', `-O2', `-O3', `-Os'. 8692 8693`-fprofile-correction' 8694 Profiles collected using an instrumented binary for multi-threaded 8695 programs may be inconsistent due to missed counter updates. When 8696 this option is specified, GCC uses heuristics to correct or smooth 8697 out such inconsistencies. By default, GCC emits an error message 8698 when an inconsistent profile is detected. 8699 8700`-fprofile-dir=PATH' 8701 Set the directory to search for the profile data files in to PATH. 8702 This option affects only the profile data generated by 8703 `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used 8704 by `-fprofile-use' and `-fbranch-probabilities' and its related 8705 options. Both absolute and relative paths can be used. By 8706 default, GCC uses the current directory as PATH, thus the profile 8707 data file appears in the same directory as the object file. 8708 8709`-fprofile-generate' 8710`-fprofile-generate=PATH' 8711 Enable options usually used for instrumenting application to 8712 produce profile useful for later recompilation with profile 8713 feedback based optimization. You must use `-fprofile-generate' 8714 both when compiling and when linking your program. 8715 8716 The following options are enabled: `-fprofile-arcs', 8717 `-fprofile-values', `-fvpt'. 8718 8719 If PATH is specified, GCC looks at the PATH to find the profile 8720 feedback data files. See `-fprofile-dir'. 8721 8722`-fprofile-use' 8723`-fprofile-use=PATH' 8724 Enable profile feedback-directed optimizations, and the following 8725 optimizations which are generally profitable only with profile 8726 feedback available: `-fbranch-probabilities', `-fvpt', 8727 `-funroll-loops', `-fpeel-loops', `-ftracer', `-ftree-vectorize', 8728 and `ftree-loop-distribute-patterns'. 8729 8730 By default, GCC emits an error message if the feedback profiles do 8731 not match the source code. This error can be turned into a 8732 warning by using `-Wcoverage-mismatch'. Note this may result in 8733 poorly optimized code. 8734 8735 If PATH is specified, GCC looks at the PATH to find the profile 8736 feedback data files. See `-fprofile-dir'. 8737 8738`-fauto-profile' 8739`-fauto-profile=PATH' 8740 Enable sampling-based feedback-directed optimizations, and the 8741 following optimizations which are generally profitable only with 8742 profile feedback available: `-fbranch-probabilities', `-fvpt', 8743 `-funroll-loops', `-fpeel-loops', `-ftracer', `-ftree-vectorize', 8744 `-finline-functions', `-fipa-cp', `-fipa-cp-clone', 8745 `-fpredictive-commoning', `-funswitch-loops', 8746 `-fgcse-after-reload', and `-ftree-loop-distribute-patterns'. 8747 8748 PATH is the name of a file containing AutoFDO profile information. 8749 If omitted, it defaults to `fbdata.afdo' in the current directory. 8750 8751 Producing an AutoFDO profile data file requires running your 8752 program with the `perf' utility on a supported GNU/Linux target 8753 system. For more information, see `https://perf.wiki.kernel.org/'. 8754 8755 E.g. 8756 perf record -e br_inst_retired:near_taken -b -o perf.data \ 8757 -- your_program 8758 8759 Then use the `create_gcov' tool to convert the raw profile data to 8760 a format that can be used by GCC. You must also supply the 8761 unstripped binary for your program to this tool. See 8762 `https://github.com/google/autofdo'. 8763 8764 E.g. 8765 create_gcov --binary=your_program.unstripped --profile=perf.data \ 8766 --gcov=profile.afdo 8767 8768 The following options control compiler behavior regarding 8769floating-point arithmetic. These options trade off between speed and 8770correctness. All must be specifically enabled. 8771 8772`-ffloat-store' 8773 Do not store floating-point variables in registers, and inhibit 8774 other options that might change whether a floating-point value is 8775 taken from a register or memory. 8776 8777 This option prevents undesirable excess precision on machines such 8778 as the 68000 where the floating registers (of the 68881) keep more 8779 precision than a `double' is supposed to have. Similarly for the 8780 x86 architecture. For most programs, the excess precision does 8781 only good, but a few programs rely on the precise definition of 8782 IEEE floating point. Use `-ffloat-store' for such programs, after 8783 modifying them to store all pertinent intermediate computations 8784 into variables. 8785 8786`-fexcess-precision=STYLE' 8787 This option allows further control over excess precision on 8788 machines where floating-point registers have more precision than 8789 the IEEE `float' and `double' types and the processor does not 8790 support operations rounding to those types. By default, 8791 `-fexcess-precision=fast' is in effect; this means that operations 8792 are carried out in the precision of the registers and that it is 8793 unpredictable when rounding to the types specified in the source 8794 code takes place. When compiling C, if 8795 `-fexcess-precision=standard' is specified then excess precision 8796 follows the rules specified in ISO C99; in particular, both casts 8797 and assignments cause values to be rounded to their semantic types 8798 (whereas `-ffloat-store' only affects assignments). This option 8799 is enabled by default for C if a strict conformance option such as 8800 `-std=c99' is used. 8801 8802 `-fexcess-precision=standard' is not implemented for languages 8803 other than C, and has no effect if `-funsafe-math-optimizations' 8804 or `-ffast-math' is specified. On the x86, it also has no effect 8805 if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the 8806 former case, IEEE semantics apply without excess precision, and in 8807 the latter, rounding is unpredictable. 8808 8809`-ffast-math' 8810 Sets the options `-fno-math-errno', `-funsafe-math-optimizations', 8811 `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans' 8812 and `-fcx-limited-range'. 8813 8814 This option causes the preprocessor macro `__FAST_MATH__' to be 8815 defined. 8816 8817 This option is not turned on by any `-O' option besides `-Ofast' 8818 since it can result in incorrect output for programs that depend 8819 on an exact implementation of IEEE or ISO rules/specifications for 8820 math functions. It may, however, yield faster code for programs 8821 that do not require the guarantees of these specifications. 8822 8823`-fno-math-errno' 8824 Do not set `errno' after calling math functions that are executed 8825 with a single instruction, e.g., `sqrt'. A program that relies on 8826 IEEE exceptions for math error handling may want to use this flag 8827 for speed while maintaining IEEE arithmetic compatibility. 8828 8829 This option is not turned on by any `-O' option since it can 8830 result in incorrect output for programs that depend on an exact 8831 implementation of IEEE or ISO rules/specifications for math 8832 functions. It may, however, yield faster code for programs that do 8833 not require the guarantees of these specifications. 8834 8835 The default is `-fmath-errno'. 8836 8837 On Darwin systems, the math library never sets `errno'. There is 8838 therefore no reason for the compiler to consider the possibility 8839 that it might, and `-fno-math-errno' is the default. 8840 8841`-funsafe-math-optimizations' 8842 Allow optimizations for floating-point arithmetic that (a) assume 8843 that arguments and results are valid and (b) may violate IEEE or 8844 ANSI standards. When used at link-time, it may include libraries 8845 or startup files that change the default FPU control word or other 8846 similar optimizations. 8847 8848 This option is not turned on by any `-O' option since it can 8849 result in incorrect output for programs that depend on an exact 8850 implementation of IEEE or ISO rules/specifications for math 8851 functions. It may, however, yield faster code for programs that do 8852 not require the guarantees of these specifications. Enables 8853 `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math' 8854 and `-freciprocal-math'. 8855 8856 The default is `-fno-unsafe-math-optimizations'. 8857 8858`-fassociative-math' 8859 Allow re-association of operands in series of floating-point 8860 operations. This violates the ISO C and C++ language standard by 8861 possibly changing computation result. NOTE: re-ordering may 8862 change the sign of zero as well as ignore NaNs and inhibit or 8863 create underflow or overflow (and thus cannot be used on code that 8864 relies on rounding behavior like `(x + 2**52) - 2**52'. May also 8865 reorder floating-point comparisons and thus may not be used when 8866 ordered comparisons are required. This option requires that both 8867 `-fno-signed-zeros' and `-fno-trapping-math' be in effect. 8868 Moreover, it doesn't make much sense with `-frounding-math'. For 8869 Fortran the option is automatically enabled when both 8870 `-fno-signed-zeros' and `-fno-trapping-math' are in effect. 8871 8872 The default is `-fno-associative-math'. 8873 8874`-freciprocal-math' 8875 Allow the reciprocal of a value to be used instead of dividing by 8876 the value if this enables optimizations. For example `x / y' can 8877 be replaced with `x * (1/y)', which is useful if `(1/y)' is 8878 subject to common subexpression elimination. Note that this loses 8879 precision and increases the number of flops operating on the value. 8880 8881 The default is `-fno-reciprocal-math'. 8882 8883`-ffinite-math-only' 8884 Allow optimizations for floating-point arithmetic that assume that 8885 arguments and results are not NaNs or +-Infs. 8886 8887 This option is not turned on by any `-O' option since it can 8888 result in incorrect output for programs that depend on an exact 8889 implementation of IEEE or ISO rules/specifications for math 8890 functions. It may, however, yield faster code for programs that do 8891 not require the guarantees of these specifications. 8892 8893 The default is `-fno-finite-math-only'. 8894 8895`-fno-signed-zeros' 8896 Allow optimizations for floating-point arithmetic that ignore the 8897 signedness of zero. IEEE arithmetic specifies the behavior of 8898 distinct +0.0 and -0.0 values, which then prohibits simplification 8899 of expressions such as x+0.0 or 0.0*x (even with 8900 `-ffinite-math-only'). This option implies that the sign of a 8901 zero result isn't significant. 8902 8903 The default is `-fsigned-zeros'. 8904 8905`-fno-trapping-math' 8906 Compile code assuming that floating-point operations cannot 8907 generate user-visible traps. These traps include division by 8908 zero, overflow, underflow, inexact result and invalid operation. 8909 This option requires that `-fno-signaling-nans' be in effect. 8910 Setting this option may allow faster code if one relies on 8911 "non-stop" IEEE arithmetic, for example. 8912 8913 This option should never be turned on by any `-O' option since it 8914 can result in incorrect output for programs that depend on an 8915 exact implementation of IEEE or ISO rules/specifications for math 8916 functions. 8917 8918 The default is `-ftrapping-math'. 8919 8920`-frounding-math' 8921 Disable transformations and optimizations that assume default 8922 floating-point rounding behavior. This is round-to-zero for all 8923 floating point to integer conversions, and round-to-nearest for 8924 all other arithmetic truncations. This option should be specified 8925 for programs that change the FP rounding mode dynamically, or that 8926 may be executed with a non-default rounding mode. This option 8927 disables constant folding of floating-point expressions at compile 8928 time (which may be affected by rounding mode) and arithmetic 8929 transformations that are unsafe in the presence of sign-dependent 8930 rounding modes. 8931 8932 The default is `-fno-rounding-math'. 8933 8934 This option is experimental and does not currently guarantee to 8935 disable all GCC optimizations that are affected by rounding mode. 8936 Future versions of GCC may provide finer control of this setting 8937 using C99's `FENV_ACCESS' pragma. This command-line option will 8938 be used to specify the default state for `FENV_ACCESS'. 8939 8940`-fsignaling-nans' 8941 Compile code assuming that IEEE signaling NaNs may generate 8942 user-visible traps during floating-point operations. Setting this 8943 option disables optimizations that may change the number of 8944 exceptions visible with signaling NaNs. This option implies 8945 `-ftrapping-math'. 8946 8947 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 8948 defined. 8949 8950 The default is `-fno-signaling-nans'. 8951 8952 This option is experimental and does not currently guarantee to 8953 disable all GCC optimizations that affect signaling NaN behavior. 8954 8955`-fsingle-precision-constant' 8956 Treat floating-point constants as single precision instead of 8957 implicitly converting them to double-precision constants. 8958 8959`-fcx-limited-range' 8960 When enabled, this option states that a range reduction step is not 8961 needed when performing complex division. Also, there is no 8962 checking whether the result of a complex multiplication or 8963 division is `NaN + I*NaN', with an attempt to rescue the situation 8964 in that case. The default is `-fno-cx-limited-range', but is 8965 enabled by `-ffast-math'. 8966 8967 This option controls the default setting of the ISO C99 8968 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to 8969 all languages. 8970 8971`-fcx-fortran-rules' 8972 Complex multiplication and division follow Fortran rules. Range 8973 reduction is done as part of complex division, but there is no 8974 checking whether the result of a complex multiplication or 8975 division is `NaN + I*NaN', with an attempt to rescue the situation 8976 in that case. 8977 8978 The default is `-fno-cx-fortran-rules'. 8979 8980 8981 The following options control optimizations that may improve 8982performance, but are not enabled by any `-O' options. This section 8983includes experimental options that may produce broken code. 8984 8985`-fbranch-probabilities' 8986 After running a program compiled with `-fprofile-arcs' (*note 8987 Options for Debugging Your Program or `gcc': Debugging Options.), 8988 you can compile it a second time using `-fbranch-probabilities', 8989 to improve optimizations based on the number of times each branch 8990 was taken. When a program compiled with `-fprofile-arcs' exits, 8991 it saves arc execution counts to a file called `SOURCENAME.gcda' 8992 for each source file. The information in this data file is very 8993 dependent on the structure of the generated code, so you must use 8994 the same source code and the same optimization options for both 8995 compilations. 8996 8997 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 8998 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 8999 optimization. Currently, they are only used in one place: in 9000 `reorg.c', instead of guessing which path a branch is most likely 9001 to take, the `REG_BR_PROB' values are used to exactly determine 9002 which path is taken more often. 9003 9004`-fprofile-values' 9005 If combined with `-fprofile-arcs', it adds code so that some data 9006 about values of expressions in the program is gathered. 9007 9008 With `-fbranch-probabilities', it reads back the data gathered 9009 from profiling values of expressions for usage in optimizations. 9010 9011 Enabled with `-fprofile-generate' and `-fprofile-use'. 9012 9013`-fprofile-reorder-functions' 9014 Function reordering based on profile instrumentation collects 9015 first time of execution of a function and orders these functions 9016 in ascending order. 9017 9018 Enabled with `-fprofile-use'. 9019 9020`-fvpt' 9021 If combined with `-fprofile-arcs', this option instructs the 9022 compiler to add code to gather information about values of 9023 expressions. 9024 9025 With `-fbranch-probabilities', it reads back the data gathered and 9026 actually performs the optimizations based on them. Currently the 9027 optimizations include specialization of division operations using 9028 the knowledge about the value of the denominator. 9029 9030`-frename-registers' 9031 Attempt to avoid false dependencies in scheduled code by making use 9032 of registers left over after register allocation. This 9033 optimization most benefits processors with lots of registers. 9034 Depending on the debug information format adopted by the target, 9035 however, it can make debugging impossible, since variables no 9036 longer stay in a "home register". 9037 9038 Enabled by default with `-funroll-loops' and `-fpeel-loops'. 9039 9040`-fschedule-fusion' 9041 Performs a target dependent pass over the instruction stream to 9042 schedule instructions of same type together because target machine 9043 can execute them more efficiently if they are adjacent to each 9044 other in the instruction flow. 9045 9046 Enabled at levels `-O2', `-O3', `-Os'. 9047 9048`-ftracer' 9049 Perform tail duplication to enlarge superblock size. This 9050 transformation simplifies the control flow of the function 9051 allowing other optimizations to do a better job. 9052 9053 Enabled with `-fprofile-use'. 9054 9055`-funroll-loops' 9056 Unroll loops whose number of iterations can be determined at 9057 compile time or upon entry to the loop. `-funroll-loops' implies 9058 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It 9059 also turns on complete loop peeling (i.e. complete removal of 9060 loops with a small constant number of iterations). This option 9061 makes code larger, and may or may not make it run faster. 9062 9063 Enabled with `-fprofile-use'. 9064 9065`-funroll-all-loops' 9066 Unroll all loops, even if their number of iterations is uncertain 9067 when the loop is entered. This usually makes programs run more 9068 slowly. `-funroll-all-loops' implies the same options as 9069 `-funroll-loops'. 9070 9071`-fpeel-loops' 9072 Peels loops for which there is enough information that they do not 9073 roll much (from profile feedback). It also turns on complete loop 9074 peeling (i.e. complete removal of loops with small constant number 9075 of iterations). 9076 9077 Enabled with `-fprofile-use'. 9078 9079`-fmove-loop-invariants' 9080 Enables the loop invariant motion pass in the RTL loop optimizer. 9081 Enabled at level `-O1' 9082 9083`-funswitch-loops' 9084 Move branches with loop invariant conditions out of the loop, with 9085 duplicates of the loop on both branches (modified according to 9086 result of the condition). 9087 9088`-ffunction-sections' 9089`-fdata-sections' 9090 Place each function or data item into its own section in the output 9091 file if the target supports arbitrary sections. The name of the 9092 function or the name of the data item determines the section's name 9093 in the output file. 9094 9095 Use these options on systems where the linker can perform 9096 optimizations to improve locality of reference in the instruction 9097 space. Most systems using the ELF object format and SPARC 9098 processors running Solaris 2 have linkers with such optimizations. 9099 AIX may have these optimizations in the future. 9100 9101 Only use these options when there are significant benefits from 9102 doing so. When you specify these options, the assembler and linker 9103 create larger object and executable files and are also slower. 9104 You cannot use `gprof' on all systems if you specify this option, 9105 and you may have problems with debugging if you specify both this 9106 option and `-g'. 9107 9108`-fbranch-target-load-optimize' 9109 Perform branch target register load optimization before prologue / 9110 epilogue threading. The use of target registers can typically be 9111 exposed only during reload, thus hoisting loads out of loops and 9112 doing inter-block scheduling needs a separate optimization pass. 9113 9114`-fbranch-target-load-optimize2' 9115 Perform branch target register load optimization after prologue / 9116 epilogue threading. 9117 9118`-fbtr-bb-exclusive' 9119 When performing branch target register load optimization, don't 9120 reuse branch target registers within any basic block. 9121 9122`-fstack-protector' 9123 Emit extra code to check for buffer overflows, such as stack 9124 smashing attacks. This is done by adding a guard variable to 9125 functions with vulnerable objects. This includes functions that 9126 call `alloca', and functions with buffers larger than 8 bytes. 9127 The guards are initialized when a function is entered and then 9128 checked when the function exits. If a guard check fails, an error 9129 message is printed and the program exits. 9130 9131`-fstack-protector-all' 9132 Like `-fstack-protector' except that all functions are protected. 9133 9134`-fstack-protector-strong' 9135 Like `-fstack-protector' but includes additional functions to be 9136 protected -- those that have local array definitions, or have 9137 references to local frame addresses. 9138 9139`-fstack-protector-explicit' 9140 Like `-fstack-protector' but only protects those functions which 9141 have the `stack_protect' attribute 9142 9143`-fstdarg-opt' 9144 Optimize the prologue of variadic argument functions with respect 9145 to usage of those arguments. 9146 9147`-fsection-anchors' 9148 Try to reduce the number of symbolic address calculations by using 9149 shared "anchor" symbols to address nearby objects. This 9150 transformation can help to reduce the number of GOT entries and 9151 GOT accesses on some targets. 9152 9153 For example, the implementation of the following function `foo': 9154 9155 static int a, b, c; 9156 int foo (void) { return a + b + c; } 9157 9158 usually calculates the addresses of all three variables, but if you 9159 compile it with `-fsection-anchors', it accesses the variables 9160 from a common anchor point instead. The effect is similar to the 9161 following pseudocode (which isn't valid C): 9162 9163 int foo (void) 9164 { 9165 register int *xr = &x; 9166 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 9167 } 9168 9169 Not all targets support this option. 9170 9171`--param NAME=VALUE' 9172 In some places, GCC uses various constants to control the amount of 9173 optimization that is done. For example, GCC does not inline 9174 functions that contain more than a certain number of instructions. 9175 You can control some of these constants on the command line using 9176 the `--param' option. 9177 9178 The names of specific parameters, and the meaning of the values, 9179 are tied to the internals of the compiler, and are subject to 9180 change without notice in future releases. 9181 9182 In each case, the VALUE is an integer. The allowable choices for 9183 NAME are: 9184 9185 `predictable-branch-outcome' 9186 When branch is predicted to be taken with probability lower 9187 than this threshold (in percent), then it is considered well 9188 predictable. The default is 10. 9189 9190 `max-crossjump-edges' 9191 The maximum number of incoming edges to consider for 9192 cross-jumping. The algorithm used by `-fcrossjumping' is 9193 O(N^2) in the number of edges incoming to each block. 9194 Increasing values mean more aggressive optimization, making 9195 the compilation time increase with probably small improvement 9196 in executable size. 9197 9198 `min-crossjump-insns' 9199 The minimum number of instructions that must be matched at 9200 the end of two blocks before cross-jumping is performed on 9201 them. This value is ignored in the case where all 9202 instructions in the block being cross-jumped from are 9203 matched. The default value is 5. 9204 9205 `max-grow-copy-bb-insns' 9206 The maximum code size expansion factor when copying basic 9207 blocks instead of jumping. The expansion is relative to a 9208 jump instruction. The default value is 8. 9209 9210 `max-goto-duplication-insns' 9211 The maximum number of instructions to duplicate to a block 9212 that jumps to a computed goto. To avoid O(N^2) behavior in a 9213 number of passes, GCC factors computed gotos early in the 9214 compilation process, and unfactors them as late as possible. 9215 Only computed jumps at the end of a basic blocks with no more 9216 than max-goto-duplication-insns are unfactored. The default 9217 value is 8. 9218 9219 `max-delay-slot-insn-search' 9220 The maximum number of instructions to consider when looking 9221 for an instruction to fill a delay slot. If more than this 9222 arbitrary number of instructions are searched, the time 9223 savings from filling the delay slot are minimal, so stop 9224 searching. Increasing values mean more aggressive 9225 optimization, making the compilation time increase with 9226 probably small improvement in execution time. 9227 9228 `max-delay-slot-live-search' 9229 When trying to fill delay slots, the maximum number of 9230 instructions to consider when searching for a block with 9231 valid live register information. Increasing this arbitrarily 9232 chosen value means more aggressive optimization, increasing 9233 the compilation time. This parameter should be removed when 9234 the delay slot code is rewritten to maintain the control-flow 9235 graph. 9236 9237 `max-gcse-memory' 9238 The approximate maximum amount of memory that can be 9239 allocated in order to perform the global common subexpression 9240 elimination optimization. If more memory than specified is 9241 required, the optimization is not done. 9242 9243 `max-gcse-insertion-ratio' 9244 If the ratio of expression insertions to deletions is larger 9245 than this value for any expression, then RTL PRE inserts or 9246 removes the expression and thus leaves partially redundant 9247 computations in the instruction stream. The default value is 9248 20. 9249 9250 `max-pending-list-length' 9251 The maximum number of pending dependencies scheduling allows 9252 before flushing the current state and starting over. Large 9253 functions with few branches or calls can create excessively 9254 large lists which needlessly consume memory and resources. 9255 9256 `max-modulo-backtrack-attempts' 9257 The maximum number of backtrack attempts the scheduler should 9258 make when modulo scheduling a loop. Larger values can 9259 exponentially increase compilation time. 9260 9261 `max-inline-insns-single' 9262 Several parameters control the tree inliner used in GCC. 9263 This number sets the maximum number of instructions (counted 9264 in GCC's internal representation) in a single function that 9265 the tree inliner considers for inlining. This only affects 9266 functions declared inline and methods implemented in a class 9267 declaration (C++). The default value is 400. 9268 9269 `max-inline-insns-auto' 9270 When you use `-finline-functions' (included in `-O3'), a lot 9271 of functions that would otherwise not be considered for 9272 inlining by the compiler are investigated. To those 9273 functions, a different (more restrictive) limit compared to 9274 functions declared inline can be applied. The default value 9275 is 40. 9276 9277 `inline-min-speedup' 9278 When estimated performance improvement of caller + callee 9279 runtime exceeds this threshold (in precent), the function can 9280 be inlined regardless the limit on `--param 9281 max-inline-insns-single' and `--param max-inline-insns-auto'. 9282 9283 `large-function-insns' 9284 The limit specifying really large functions. For functions 9285 larger than this limit after inlining, inlining is 9286 constrained by `--param large-function-growth'. This 9287 parameter is useful primarily to avoid extreme compilation 9288 time caused by non-linear algorithms used by the back end. 9289 The default value is 2700. 9290 9291 `large-function-growth' 9292 Specifies maximal growth of large function caused by inlining 9293 in percents. The default value is 100 which limits large 9294 function growth to 2.0 times the original size. 9295 9296 `large-unit-insns' 9297 The limit specifying large translation unit. Growth caused 9298 by inlining of units larger than this limit is limited by 9299 `--param inline-unit-growth'. For small units this might be 9300 too tight. For example, consider a unit consisting of 9301 function A that is inline and B that just calls A three 9302 times. If B is small relative to A, the growth of unit is 9303 300\% and yet such inlining is very sane. For very large 9304 units consisting of small inlineable functions, however, the 9305 overall unit growth limit is needed to avoid exponential 9306 explosion of code size. Thus for smaller units, the size is 9307 increased to `--param large-unit-insns' before applying 9308 `--param inline-unit-growth'. The default is 10000. 9309 9310 `inline-unit-growth' 9311 Specifies maximal overall growth of the compilation unit 9312 caused by inlining. The default value is 20 which limits 9313 unit growth to 1.2 times the original size. Cold functions 9314 (either marked cold via an attribute or by profile feedback) 9315 are not accounted into the unit size. 9316 9317 `ipcp-unit-growth' 9318 Specifies maximal overall growth of the compilation unit 9319 caused by interprocedural constant propagation. The default 9320 value is 10 which limits unit growth to 1.1 times the 9321 original size. 9322 9323 `large-stack-frame' 9324 The limit specifying large stack frames. While inlining the 9325 algorithm is trying to not grow past this limit too much. 9326 The default value is 256 bytes. 9327 9328 `large-stack-frame-growth' 9329 Specifies maximal growth of large stack frames caused by 9330 inlining in percents. The default value is 1000 which limits 9331 large stack frame growth to 11 times the original size. 9332 9333 `max-inline-insns-recursive' 9334 `max-inline-insns-recursive-auto' 9335 Specifies the maximum number of instructions an out-of-line 9336 copy of a self-recursive inline function can grow into by 9337 performing recursive inlining. 9338 9339 `--param max-inline-insns-recursive' applies to functions 9340 declared inline. For functions not declared inline, 9341 recursive inlining happens only when `-finline-functions' 9342 (included in `-O3') is enabled; `--param 9343 max-inline-insns-recursive-auto' applies instead. The 9344 default value is 450. 9345 9346 `max-inline-recursive-depth' 9347 `max-inline-recursive-depth-auto' 9348 Specifies the maximum recursion depth used for recursive 9349 inlining. 9350 9351 `--param max-inline-recursive-depth' applies to functions 9352 declared inline. For functions not declared inline, 9353 recursive inlining happens only when `-finline-functions' 9354 (included in `-O3') is enabled; `--param 9355 max-inline-recursive-depth-auto' applies instead. The 9356 default value is 8. 9357 9358 `min-inline-recursive-probability' 9359 Recursive inlining is profitable only for function having 9360 deep recursion in average and can hurt for function having 9361 little recursion depth by increasing the prologue size or 9362 complexity of function body to other optimizers. 9363 9364 When profile feedback is available (see `-fprofile-generate') 9365 the actual recursion depth can be guessed from probability 9366 that function recurses via a given call expression. This 9367 parameter limits inlining only to call expressions whose 9368 probability exceeds the given threshold (in percents). The 9369 default value is 10. 9370 9371 `early-inlining-insns' 9372 Specify growth that the early inliner can make. In effect it 9373 increases the amount of inlining for code having a large 9374 abstraction penalty. The default value is 14. 9375 9376 `max-early-inliner-iterations' 9377 Limit of iterations of the early inliner. This basically 9378 bounds the number of nested indirect calls the early inliner 9379 can resolve. Deeper chains are still handled by late 9380 inlining. 9381 9382 `comdat-sharing-probability' 9383 Probability (in percent) that C++ inline function with comdat 9384 visibility are shared across multiple compilation units. The 9385 default value is 20. 9386 9387 `profile-func-internal-id' 9388 A parameter to control whether to use function internal id in 9389 profile database lookup. If the value is 0, the compiler uses 9390 an id that is based on function assembler name and filename, 9391 which makes old profile data more tolerant to source changes 9392 such as function reordering etc. The default value is 0. 9393 9394 `min-vect-loop-bound' 9395 The minimum number of iterations under which loops are not 9396 vectorized when `-ftree-vectorize' is used. The number of 9397 iterations after vectorization needs to be greater than the 9398 value specified by this option to allow vectorization. The 9399 default value is 0. 9400 9401 `gcse-cost-distance-ratio' 9402 Scaling factor in calculation of maximum distance an 9403 expression can be moved by GCSE optimizations. This is 9404 currently supported only in the code hoisting pass. The 9405 bigger the ratio, the more aggressive code hoisting is with 9406 simple expressions, i.e., the expressions that have cost less 9407 than `gcse-unrestricted-cost'. Specifying 0 disables 9408 hoisting of simple expressions. The default value is 10. 9409 9410 `gcse-unrestricted-cost' 9411 Cost, roughly measured as the cost of a single typical machine 9412 instruction, at which GCSE optimizations do not constrain the 9413 distance an expression can travel. This is currently 9414 supported only in the code hoisting pass. The lesser the 9415 cost, the more aggressive code hoisting is. Specifying 0 9416 allows all expressions to travel unrestricted distances. The 9417 default value is 3. 9418 9419 `max-hoist-depth' 9420 The depth of search in the dominator tree for expressions to 9421 hoist. This is used to avoid quadratic behavior in hoisting 9422 algorithm. The value of 0 does not limit on the search, but 9423 may slow down compilation of huge functions. The default 9424 value is 30. 9425 9426 `max-tail-merge-comparisons' 9427 The maximum amount of similar bbs to compare a bb with. This 9428 is used to avoid quadratic behavior in tree tail merging. 9429 The default value is 10. 9430 9431 `max-tail-merge-iterations' 9432 The maximum amount of iterations of the pass over the 9433 function. This is used to limit compilation time in tree 9434 tail merging. The default value is 2. 9435 9436 `max-unrolled-insns' 9437 The maximum number of instructions that a loop may have to be 9438 unrolled. If a loop is unrolled, this parameter also 9439 determines how many times the loop code is unrolled. 9440 9441 `max-average-unrolled-insns' 9442 The maximum number of instructions biased by probabilities of 9443 their execution that a loop may have to be unrolled. If a 9444 loop is unrolled, this parameter also determines how many 9445 times the loop code is unrolled. 9446 9447 `max-unroll-times' 9448 The maximum number of unrollings of a single loop. 9449 9450 `max-peeled-insns' 9451 The maximum number of instructions that a loop may have to be 9452 peeled. If a loop is peeled, this parameter also determines 9453 how many times the loop code is peeled. 9454 9455 `max-peel-times' 9456 The maximum number of peelings of a single loop. 9457 9458 `max-peel-branches' 9459 The maximum number of branches on the hot path through the 9460 peeled sequence. 9461 9462 `max-completely-peeled-insns' 9463 The maximum number of insns of a completely peeled loop. 9464 9465 `max-completely-peel-times' 9466 The maximum number of iterations of a loop to be suitable for 9467 complete peeling. 9468 9469 `max-completely-peel-loop-nest-depth' 9470 The maximum depth of a loop nest suitable for complete 9471 peeling. 9472 9473 `max-unswitch-insns' 9474 The maximum number of insns of an unswitched loop. 9475 9476 `max-unswitch-level' 9477 The maximum number of branches unswitched in a single loop. 9478 9479 `lim-expensive' 9480 The minimum cost of an expensive expression in the loop 9481 invariant motion. 9482 9483 `iv-consider-all-candidates-bound' 9484 Bound on number of candidates for induction variables, below 9485 which all candidates are considered for each use in induction 9486 variable optimizations. If there are more candidates than 9487 this, only the most relevant ones are considered to avoid 9488 quadratic time complexity. 9489 9490 `iv-max-considered-uses' 9491 The induction variable optimizations give up on loops that 9492 contain more induction variable uses. 9493 9494 `iv-always-prune-cand-set-bound' 9495 If the number of candidates in the set is smaller than this 9496 value, always try to remove unnecessary ivs from the set when 9497 adding a new one. 9498 9499 `scev-max-expr-size' 9500 Bound on size of expressions used in the scalar evolutions 9501 analyzer. Large expressions slow the analyzer. 9502 9503 `scev-max-expr-complexity' 9504 Bound on the complexity of the expressions in the scalar 9505 evolutions analyzer. Complex expressions slow the analyzer. 9506 9507 `omega-max-vars' 9508 The maximum number of variables in an Omega constraint system. 9509 The default value is 128. 9510 9511 `omega-max-geqs' 9512 The maximum number of inequalities in an Omega constraint 9513 system. The default value is 256. 9514 9515 `omega-max-eqs' 9516 The maximum number of equalities in an Omega constraint 9517 system. The default value is 128. 9518 9519 `omega-max-wild-cards' 9520 The maximum number of wildcard variables that the Omega 9521 solver is able to insert. The default value is 18. 9522 9523 `omega-hash-table-size' 9524 The size of the hash table in the Omega solver. The default 9525 value is 550. 9526 9527 `omega-max-keys' 9528 The maximal number of keys used by the Omega solver. The 9529 default value is 500. 9530 9531 `omega-eliminate-redundant-constraints' 9532 When set to 1, use expensive methods to eliminate all 9533 redundant constraints. The default value is 0. 9534 9535 `vect-max-version-for-alignment-checks' 9536 The maximum number of run-time checks that can be performed 9537 when doing loop versioning for alignment in the vectorizer. 9538 9539 `vect-max-version-for-alias-checks' 9540 The maximum number of run-time checks that can be performed 9541 when doing loop versioning for alias in the vectorizer. 9542 9543 `vect-max-peeling-for-alignment' 9544 The maximum number of loop peels to enhance access alignment 9545 for vectorizer. Value -1 means 'no limit'. 9546 9547 `max-iterations-to-track' 9548 The maximum number of iterations of a loop the brute-force 9549 algorithm for analysis of the number of iterations of the 9550 loop tries to evaluate. 9551 9552 `hot-bb-count-ws-permille' 9553 A basic block profile count is considered hot if it 9554 contributes to the given permillage (i.e. 0...1000) of the 9555 entire profiled execution. 9556 9557 `hot-bb-frequency-fraction' 9558 Select fraction of the entry block frequency of executions of 9559 basic block in function given basic block needs to have to be 9560 considered hot. 9561 9562 `max-predicted-iterations' 9563 The maximum number of loop iterations we predict statically. 9564 This is useful in cases where a function contains a single 9565 loop with known bound and another loop with unknown bound. 9566 The known number of iterations is predicted correctly, while 9567 the unknown number of iterations average to roughly 10. This 9568 means that the loop without bounds appears artificially cold 9569 relative to the other one. 9570 9571 `builtin-expect-probability' 9572 Control the probability of the expression having the 9573 specified value. This parameter takes a percentage (i.e. 0 9574 ... 100) as input. The default probability of 90 is obtained 9575 empirically. 9576 9577 `align-threshold' 9578 Select fraction of the maximal frequency of executions of a 9579 basic block in a function to align the basic block. 9580 9581 `align-loop-iterations' 9582 A loop expected to iterate at least the selected number of 9583 iterations is aligned. 9584 9585 `tracer-dynamic-coverage' 9586 `tracer-dynamic-coverage-feedback' 9587 This value is used to limit superblock formation once the 9588 given percentage of executed instructions is covered. This 9589 limits unnecessary code size expansion. 9590 9591 The `tracer-dynamic-coverage-feedback' parameter is used only 9592 when profile feedback is available. The real profiles (as 9593 opposed to statically estimated ones) are much less balanced 9594 allowing the threshold to be larger value. 9595 9596 `tracer-max-code-growth' 9597 Stop tail duplication once code growth has reached given 9598 percentage. This is a rather artificial limit, as most of 9599 the duplicates are eliminated later in cross jumping, so it 9600 may be set to much higher values than is the desired code 9601 growth. 9602 9603 `tracer-min-branch-ratio' 9604 Stop reverse growth when the reverse probability of best edge 9605 is less than this threshold (in percent). 9606 9607 `tracer-min-branch-ratio' 9608 `tracer-min-branch-ratio-feedback' 9609 Stop forward growth if the best edge has probability lower 9610 than this threshold. 9611 9612 Similarly to `tracer-dynamic-coverage' two values are 9613 present, one for compilation for profile feedback and one for 9614 compilation without. The value for compilation with profile 9615 feedback needs to be more conservative (higher) in order to 9616 make tracer effective. 9617 9618 `max-cse-path-length' 9619 The maximum number of basic blocks on path that CSE considers. 9620 The default is 10. 9621 9622 `max-cse-insns' 9623 The maximum number of instructions CSE processes before 9624 flushing. The default is 1000. 9625 9626 `ggc-min-expand' 9627 GCC uses a garbage collector to manage its own memory 9628 allocation. This parameter specifies the minimum percentage 9629 by which the garbage collector's heap should be allowed to 9630 expand between collections. Tuning this may improve 9631 compilation speed; it has no effect on code generation. 9632 9633 The default is 30% + 70% * (RAM/1GB) with an upper bound of 9634 100% when RAM >= 1GB. If `getrlimit' is available, the 9635 notion of "RAM" is the smallest of actual RAM and 9636 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to 9637 calculate RAM on a particular platform, the lower bound of 9638 30% is used. Setting this parameter and `ggc-min-heapsize' 9639 to zero causes a full collection to occur at every 9640 opportunity. This is extremely slow, but can be useful for 9641 debugging. 9642 9643 `ggc-min-heapsize' 9644 Minimum size of the garbage collector's heap before it begins 9645 bothering to collect garbage. The first collection occurs 9646 after the heap expands by `ggc-min-expand'% beyond 9647 `ggc-min-heapsize'. Again, tuning this may improve 9648 compilation speed, and has no effect on code generation. 9649 9650 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 9651 that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 9652 exceeded, but with a lower bound of 4096 (four megabytes) and 9653 an upper bound of 131072 (128 megabytes). If GCC is not able 9654 to calculate RAM on a particular platform, the lower bound is 9655 used. Setting this parameter very large effectively disables 9656 garbage collection. Setting this parameter and 9657 `ggc-min-expand' to zero causes a full collection to occur at 9658 every opportunity. 9659 9660 `max-reload-search-insns' 9661 The maximum number of instruction reload should look backward 9662 for equivalent register. Increasing values mean more 9663 aggressive optimization, making the compilation time increase 9664 with probably slightly better performance. The default value 9665 is 100. 9666 9667 `max-cselib-memory-locations' 9668 The maximum number of memory locations cselib should take 9669 into account. Increasing values mean more aggressive 9670 optimization, making the compilation time increase with 9671 probably slightly better performance. The default value is 9672 500. 9673 9674 `reorder-blocks-duplicate' 9675 `reorder-blocks-duplicate-feedback' 9676 Used by the basic block reordering pass to decide whether to 9677 use unconditional branch or duplicate the code on its 9678 destination. Code is duplicated when its estimated size is 9679 smaller than this value multiplied by the estimated size of 9680 unconditional jump in the hot spots of the program. 9681 9682 The `reorder-block-duplicate-feedback' parameter is used only 9683 when profile feedback is available. It may be set to higher 9684 values than `reorder-block-duplicate' since information about 9685 the hot spots is more accurate. 9686 9687 `max-sched-ready-insns' 9688 The maximum number of instructions ready to be issued the 9689 scheduler should consider at any given time during the first 9690 scheduling pass. Increasing values mean more thorough 9691 searches, making the compilation time increase with probably 9692 little benefit. The default value is 100. 9693 9694 `max-sched-region-blocks' 9695 The maximum number of blocks in a region to be considered for 9696 interblock scheduling. The default value is 10. 9697 9698 `max-pipeline-region-blocks' 9699 The maximum number of blocks in a region to be considered for 9700 pipelining in the selective scheduler. The default value is 9701 15. 9702 9703 `max-sched-region-insns' 9704 The maximum number of insns in a region to be considered for 9705 interblock scheduling. The default value is 100. 9706 9707 `max-pipeline-region-insns' 9708 The maximum number of insns in a region to be considered for 9709 pipelining in the selective scheduler. The default value is 9710 200. 9711 9712 `min-spec-prob' 9713 The minimum probability (in percents) of reaching a source 9714 block for interblock speculative scheduling. The default 9715 value is 40. 9716 9717 `max-sched-extend-regions-iters' 9718 The maximum number of iterations through CFG to extend 9719 regions. A value of 0 (the default) disables region 9720 extensions. 9721 9722 `max-sched-insn-conflict-delay' 9723 The maximum conflict delay for an insn to be considered for 9724 speculative motion. The default value is 3. 9725 9726 `sched-spec-prob-cutoff' 9727 The minimal probability of speculation success (in percents), 9728 so that speculative insns are scheduled. The default value 9729 is 40. 9730 9731 `sched-spec-state-edge-prob-cutoff' 9732 The minimum probability an edge must have for the scheduler 9733 to save its state across it. The default value is 10. 9734 9735 `sched-mem-true-dep-cost' 9736 Minimal distance (in CPU cycles) between store and load 9737 targeting same memory locations. The default value is 1. 9738 9739 `selsched-max-lookahead' 9740 The maximum size of the lookahead window of selective 9741 scheduling. It is a depth of search for available 9742 instructions. The default value is 50. 9743 9744 `selsched-max-sched-times' 9745 The maximum number of times that an instruction is scheduled 9746 during selective scheduling. This is the limit on the number 9747 of iterations through which the instruction may be pipelined. 9748 The default value is 2. 9749 9750 `selsched-max-insns-to-rename' 9751 The maximum number of best instructions in the ready list 9752 that are considered for renaming in the selective scheduler. 9753 The default value is 2. 9754 9755 `sms-min-sc' 9756 The minimum value of stage count that swing modulo scheduler 9757 generates. The default value is 2. 9758 9759 `max-last-value-rtl' 9760 The maximum size measured as number of RTLs that can be 9761 recorded in an expression in combiner for a pseudo register 9762 as last known value of that register. The default is 10000. 9763 9764 `max-combine-insns' 9765 The maximum number of instructions the RTL combiner tries to 9766 combine. The default value is 2 at `-Og' and 4 otherwise. 9767 9768 `integer-share-limit' 9769 Small integer constants can use a shared data structure, 9770 reducing the compiler's memory usage and increasing its 9771 speed. This sets the maximum value of a shared integer 9772 constant. The default value is 256. 9773 9774 `ssp-buffer-size' 9775 The minimum size of buffers (i.e. arrays) that receive stack 9776 smashing protection when `-fstack-protection' is used. 9777 9778 `min-size-for-stack-sharing' 9779 The minimum size of variables taking part in stack slot 9780 sharing when not optimizing. The default value is 32. 9781 9782 `max-jump-thread-duplication-stmts' 9783 Maximum number of statements allowed in a block that needs to 9784 be duplicated when threading jumps. 9785 9786 `max-fields-for-field-sensitive' 9787 Maximum number of fields in a structure treated in a field 9788 sensitive manner during pointer analysis. The default is zero 9789 for `-O0' and `-O1', and 100 for `-Os', `-O2', and `-O3'. 9790 9791 `prefetch-latency' 9792 Estimate on average number of instructions that are executed 9793 before prefetch finishes. The distance prefetched ahead is 9794 proportional to this constant. Increasing this number may 9795 also lead to less streams being prefetched (see 9796 `simultaneous-prefetches'). 9797 9798 `simultaneous-prefetches' 9799 Maximum number of prefetches that can run at the same time. 9800 9801 `l1-cache-line-size' 9802 The size of cache line in L1 cache, in bytes. 9803 9804 `l1-cache-size' 9805 The size of L1 cache, in kilobytes. 9806 9807 `l2-cache-size' 9808 The size of L2 cache, in kilobytes. 9809 9810 `min-insn-to-prefetch-ratio' 9811 The minimum ratio between the number of instructions and the 9812 number of prefetches to enable prefetching in a loop. 9813 9814 `prefetch-min-insn-to-mem-ratio' 9815 The minimum ratio between the number of instructions and the 9816 number of memory references to enable prefetching in a loop. 9817 9818 `use-canonical-types' 9819 Whether the compiler should use the "canonical" type system. 9820 By default, this should always be 1, which uses a more 9821 efficient internal mechanism for comparing types in C++ and 9822 Objective-C++. However, if bugs in the canonical type system 9823 are causing compilation failures, set this value to 0 to 9824 disable canonical types. 9825 9826 `switch-conversion-max-branch-ratio' 9827 Switch initialization conversion refuses to create arrays 9828 that are bigger than `switch-conversion-max-branch-ratio' 9829 times the number of branches in the switch. 9830 9831 `max-partial-antic-length' 9832 Maximum length of the partial antic set computed during the 9833 tree partial redundancy elimination optimization 9834 (`-ftree-pre') when optimizing at `-O3' and above. For some 9835 sorts of source code the enhanced partial redundancy 9836 elimination optimization can run away, consuming all of the 9837 memory available on the host machine. This parameter sets a 9838 limit on the length of the sets that are computed, which 9839 prevents the runaway behavior. Setting a value of 0 for this 9840 parameter allows an unlimited set length. 9841 9842 `sccvn-max-scc-size' 9843 Maximum size of a strongly connected component (SCC) during 9844 SCCVN processing. If this limit is hit, SCCVN processing for 9845 the whole function is not done and optimizations depending on 9846 it are disabled. The default maximum SCC size is 10000. 9847 9848 `sccvn-max-alias-queries-per-access' 9849 Maximum number of alias-oracle queries we perform when 9850 looking for redundancies for loads and stores. If this limit 9851 is hit the search is aborted and the load or store is not 9852 considered redundant. The number of queries is 9853 algorithmically limited to the number of stores on all paths 9854 from the load to the function entry. The default maxmimum 9855 number of queries is 1000. 9856 9857 `ira-max-loops-num' 9858 IRA uses regional register allocation by default. If a 9859 function contains more loops than the number given by this 9860 parameter, only at most the given number of the most 9861 frequently-executed loops form regions for regional register 9862 allocation. The default value of the parameter is 100. 9863 9864 `ira-max-conflict-table-size' 9865 Although IRA uses a sophisticated algorithm to compress the 9866 conflict table, the table can still require excessive amounts 9867 of memory for huge functions. If the conflict table for a 9868 function could be more than the size in MB given by this 9869 parameter, the register allocator instead uses a faster, 9870 simpler, and lower-quality algorithm that does not require 9871 building a pseudo-register conflict table. The default value 9872 of the parameter is 2000. 9873 9874 `ira-loop-reserved-regs' 9875 IRA can be used to evaluate more accurate register pressure 9876 in loops for decisions to move loop invariants (see `-O3'). 9877 The number of available registers reserved for some other 9878 purposes is given by this parameter. The default value of 9879 the parameter is 2, which is the minimal number of registers 9880 needed by typical instructions. This value is the best found 9881 from numerous experiments. 9882 9883 `lra-inheritance-ebb-probability-cutoff' 9884 LRA tries to reuse values reloaded in registers in subsequent 9885 insns. This optimization is called inheritance. EBB is used 9886 as a region to do this optimization. The parameter defines a 9887 minimal fall-through edge probability in percentage used to 9888 add BB to inheritance EBB in LRA. The default value of the 9889 parameter is 40. The value was chosen from numerous runs of 9890 SPEC2000 on x86-64. 9891 9892 `loop-invariant-max-bbs-in-loop' 9893 Loop invariant motion can be very expensive, both in 9894 compilation time and in amount of needed compile-time memory, 9895 with very large loops. Loops with more basic blocks than 9896 this parameter won't have loop invariant motion optimization 9897 performed on them. The default value of the parameter is 9898 1000 for `-O1' and 10000 for `-O2' and above. 9899 9900 `loop-max-datarefs-for-datadeps' 9901 Building data dapendencies is expensive for very large loops. 9902 This parameter limits the number of data references in loops 9903 that are considered for data dependence analysis. These 9904 large loops are no handled by the optimizations using loop 9905 data dependencies. The default value is 1000. 9906 9907 `max-vartrack-size' 9908 Sets a maximum number of hash table slots to use during 9909 variable tracking dataflow analysis of any function. If this 9910 limit is exceeded with variable tracking at assignments 9911 enabled, analysis for that function is retried without it, 9912 after removing all debug insns from the function. If the 9913 limit is exceeded even without debug insns, var tracking 9914 analysis is completely disabled for the function. Setting 9915 the parameter to zero makes it unlimited. 9916 9917 `max-vartrack-expr-depth' 9918 Sets a maximum number of recursion levels when attempting to 9919 map variable names or debug temporaries to value expressions. 9920 This trades compilation time for more complete debug 9921 information. If this is set too low, value expressions that 9922 are available and could be represented in debug information 9923 may end up not being used; setting this higher may enable the 9924 compiler to find more complex debug expressions, but compile 9925 time and memory use may grow. The default is 12. 9926 9927 `min-nondebug-insn-uid' 9928 Use uids starting at this parameter for nondebug insns. The 9929 range below the parameter is reserved exclusively for debug 9930 insns created by `-fvar-tracking-assignments', but debug 9931 insns may get (non-overlapping) uids above it if the reserved 9932 range is exhausted. 9933 9934 `ipa-sra-ptr-growth-factor' 9935 IPA-SRA replaces a pointer to an aggregate with one or more 9936 new parameters only when their cumulative size is less or 9937 equal to `ipa-sra-ptr-growth-factor' times the size of the 9938 original pointer parameter. 9939 9940 `sra-max-scalarization-size-Ospeed' 9941 9942 `sra-max-scalarization-size-Osize' 9943 The two Scalar Reduction of Aggregates passes (SRA and 9944 IPA-SRA) aim to replace scalar parts of aggregates with uses 9945 of independent scalar variables. These parameters control 9946 the maximum size, in storage units, of aggregate which is 9947 considered for replacement when compiling for speed 9948 (`sra-max-scalarization-size-Ospeed') or size 9949 (`sra-max-scalarization-size-Osize') respectively. 9950 9951 `tm-max-aggregate-size' 9952 When making copies of thread-local variables in a 9953 transaction, this parameter specifies the size in bytes after 9954 which variables are saved with the logging functions as 9955 opposed to save/restore code sequence pairs. This option 9956 only applies when using `-fgnu-tm'. 9957 9958 `graphite-max-nb-scop-params' 9959 To avoid exponential effects in the Graphite loop transforms, 9960 the number of parameters in a Static Control Part (SCoP) is 9961 bounded. The default value is 10 parameters. A variable 9962 whose value is unknown at compilation time and defined 9963 outside a SCoP is a parameter of the SCoP. 9964 9965 `graphite-max-bbs-per-function' 9966 To avoid exponential effects in the detection of SCoPs, the 9967 size of the functions analyzed by Graphite is bounded. The 9968 default value is 100 basic blocks. 9969 9970 `loop-block-tile-size' 9971 Loop blocking or strip mining transforms, enabled with 9972 `-floop-block' or `-floop-strip-mine', strip mine each loop 9973 in the loop nest by a given number of iterations. The strip 9974 length can be changed using the `loop-block-tile-size' 9975 parameter. The default value is 51 iterations. 9976 9977 `loop-unroll-jam-size' 9978 Specify the unroll factor for the `-floop-unroll-and-jam' 9979 option. The default value is 4. 9980 9981 `loop-unroll-jam-depth' 9982 Specify the dimension to be unrolled (counting from the most 9983 inner loop) for the `-floop-unroll-and-jam'. The default 9984 value is 2. 9985 9986 `ipa-cp-value-list-size' 9987 IPA-CP attempts to track all possible values and types passed 9988 to a function's parameter in order to propagate them and 9989 perform devirtualization. `ipa-cp-value-list-size' is the 9990 maximum number of values and types it stores per one formal 9991 parameter of a function. 9992 9993 `ipa-cp-eval-threshold' 9994 IPA-CP calculates its own score of cloning profitability 9995 heuristics and performs those cloning opportunities with 9996 scores that exceed `ipa-cp-eval-threshold'. 9997 9998 `ipa-cp-recursion-penalty' 9999 Percentage penalty the recursive functions will receive when 10000 they are evaluated for cloning. 10001 10002 `ipa-cp-single-call-penalty' 10003 Percentage penalty functions containg a single call to another 10004 function will receive when they are evaluated for cloning. 10005 10006 `ipa-max-agg-items' 10007 IPA-CP is also capable to propagate a number of scalar values 10008 passed in an aggregate. `ipa-max-agg-items' controls the 10009 maximum number of such values per one parameter. 10010 10011 `ipa-cp-loop-hint-bonus' 10012 When IPA-CP determines that a cloning candidate would make 10013 the number of iterations of a loop known, it adds a bonus of 10014 `ipa-cp-loop-hint-bonus' to the profitability score of the 10015 candidate. 10016 10017 `ipa-cp-array-index-hint-bonus' 10018 When IPA-CP determines that a cloning candidate would make 10019 the index of an array access known, it adds a bonus of 10020 `ipa-cp-array-index-hint-bonus' to the profitability score of 10021 the candidate. 10022 10023 `ipa-max-aa-steps' 10024 During its analysis of function bodies, IPA-CP employs alias 10025 analysis in order to track values pointed to by function 10026 parameters. In order not spend too much time analyzing huge 10027 functions, it gives up and consider all memory clobbered 10028 after examining `ipa-max-aa-steps' statements modifying 10029 memory. 10030 10031 `lto-partitions' 10032 Specify desired number of partitions produced during WHOPR 10033 compilation. The number of partitions should exceed the 10034 number of CPUs used for compilation. The default value is 32. 10035 10036 `lto-minpartition' 10037 Size of minimal partition for WHOPR (in estimated 10038 instructions). This prevents expenses of splitting very 10039 small programs into too many partitions. 10040 10041 `cxx-max-namespaces-for-diagnostic-help' 10042 The maximum number of namespaces to consult for suggestions 10043 when C++ name lookup fails for an identifier. The default is 10044 1000. 10045 10046 `sink-frequency-threshold' 10047 The maximum relative execution frequency (in percents) of the 10048 target block relative to a statement's original block to 10049 allow statement sinking of a statement. Larger numbers 10050 result in more aggressive statement sinking. The default 10051 value is 75. A small positive adjustment is applied for 10052 statements with memory operands as those are even more 10053 profitable so sink. 10054 10055 `max-stores-to-sink' 10056 The maximum number of conditional stores paires that can be 10057 sunk. Set to 0 if either vectorization (`-ftree-vectorize') 10058 or if-conversion (`-ftree-loop-if-convert') is disabled. The 10059 default is 2. 10060 10061 `allow-store-data-races' 10062 Allow optimizers to introduce new data races on stores. Set 10063 to 1 to allow, otherwise to 0. This option is enabled by 10064 default at optimization level `-Ofast'. 10065 10066 `case-values-threshold' 10067 The smallest number of different values for which it is best 10068 to use a jump-table instead of a tree of conditional 10069 branches. If the value is 0, use the default for the 10070 machine. The default is 0. 10071 10072 `tree-reassoc-width' 10073 Set the maximum number of instructions executed in parallel in 10074 reassociated tree. This parameter overrides target dependent 10075 heuristics used by default if has non zero value. 10076 10077 `sched-pressure-algorithm' 10078 Choose between the two available implementations of 10079 `-fsched-pressure'. Algorithm 1 is the original 10080 implementation and is the more likely to prevent instructions 10081 from being reordered. Algorithm 2 was designed to be a 10082 compromise between the relatively conservative approach taken 10083 by algorithm 1 and the rather aggressive approach taken by 10084 the default scheduler. It relies more heavily on having a 10085 regular register file and accurate register pressure classes. 10086 See `haifa-sched.c' in the GCC sources for more details. 10087 10088 The default choice depends on the target. 10089 10090 `max-slsr-cand-scan' 10091 Set the maximum number of existing candidates that are 10092 considered when seeking a basis for a new straight-line 10093 strength reduction candidate. 10094 10095 `asan-globals' 10096 Enable buffer overflow detection for global objects. This 10097 kind of protection is enabled by default if you are using 10098 `-fsanitize=address' option. To disable global objects 10099 protection use `--param asan-globals=0'. 10100 10101 `asan-stack' 10102 Enable buffer overflow detection for stack objects. This 10103 kind of protection is enabled by default when 10104 using`-fsanitize=address'. To disable stack protection use 10105 `--param asan-stack=0' option. 10106 10107 `asan-instrument-reads' 10108 Enable buffer overflow detection for memory reads. This kind 10109 of protection is enabled by default when using 10110 `-fsanitize=address'. To disable memory reads protection use 10111 `--param asan-instrument-reads=0'. 10112 10113 `asan-instrument-writes' 10114 Enable buffer overflow detection for memory writes. This 10115 kind of protection is enabled by default when using 10116 `-fsanitize=address'. To disable memory writes protection use 10117 `--param asan-instrument-writes=0' option. 10118 10119 `asan-memintrin' 10120 Enable detection for built-in functions. This kind of 10121 protection is enabled by default when using 10122 `-fsanitize=address'. To disable built-in functions 10123 protection use `--param asan-memintrin=0'. 10124 10125 `asan-use-after-return' 10126 Enable detection of use-after-return. This kind of protection 10127 is enabled by default when using `-fsanitize=address' option. 10128 To disable use-after-return detection use `--param 10129 asan-use-after-return=0'. 10130 10131 `asan-instrumentation-with-call-threshold' 10132 If number of memory accesses in function being instrumented 10133 is greater or equal to this number, use callbacks instead of 10134 inline checks. E.g. to disable inline code use `--param 10135 asan-instrumentation-with-call-threshold=0'. 10136 10137 `chkp-max-ctor-size' 10138 Static constructors generated by Pointer Bounds Checker may 10139 become very large and significantly increase compile time at 10140 optimization level `-O1' and higher. This parameter is a 10141 maximum nubmer of statements in a single generated 10142 constructor. Default value is 5000. 10143 10144 `max-fsm-thread-path-insns' 10145 Maximum number of instructions to copy when duplicating 10146 blocks on a finite state automaton jump thread path. The 10147 default is 100. 10148 10149 `max-fsm-thread-length' 10150 Maximum number of basic blocks on a finite state automaton 10151 jump thread path. The default is 10. 10152 10153 `max-fsm-thread-paths' 10154 Maximum number of new jump thread paths to create for a 10155 finite state automaton. The default is 50. 10156 10157 10158 10159File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 10160 101613.11 Options Controlling the Preprocessor 10162========================================= 10163 10164These options control the C preprocessor, which is run on each C source 10165file before actual compilation. 10166 10167 If you use the `-E' option, nothing is done except preprocessing. 10168Some of these options make sense only together with `-E' because they 10169cause the preprocessor output to be unsuitable for actual compilation. 10170 10171`-Wp,OPTION' 10172 You can use `-Wp,OPTION' to bypass the compiler driver and pass 10173 OPTION directly through to the preprocessor. If OPTION contains 10174 commas, it is split into multiple options at the commas. However, 10175 many options are modified, translated or interpreted by the 10176 compiler driver before being passed to the preprocessor, and `-Wp' 10177 forcibly bypasses this phase. The preprocessor's direct interface 10178 is undocumented and subject to change, so whenever possible you 10179 should avoid using `-Wp' and let the driver handle the options 10180 instead. 10181 10182`-Xpreprocessor OPTION' 10183 Pass OPTION as an option to the preprocessor. You can use this to 10184 supply system-specific preprocessor options that GCC does not 10185 recognize. 10186 10187 If you want to pass an option that takes an argument, you must use 10188 `-Xpreprocessor' twice, once for the option and once for the 10189 argument. 10190 10191`-no-integrated-cpp' 10192 Perform preprocessing as a separate pass before compilation. By 10193 default, GCC performs preprocessing as an integrated part of input 10194 tokenization and parsing. If this option is provided, the 10195 appropriate language front end (`cc1', `cc1plus', or `cc1obj' for 10196 C, C++, and Objective-C, respectively) is instead invoked twice, 10197 once for preprocessing only and once for actual compilation of the 10198 preprocessed input. This option may be useful in conjunction with 10199 the `-B' or `-wrapper' options to specify an alternate 10200 preprocessor or perform additional processing of the program 10201 source between normal preprocessing and compilation. 10202 10203`-D NAME' 10204 Predefine NAME as a macro, with definition `1'. 10205 10206`-D NAME=DEFINITION' 10207 The contents of DEFINITION are tokenized and processed as if they 10208 appeared during translation phase three in a `#define' directive. 10209 In particular, the definition will be truncated by embedded 10210 newline characters. 10211 10212 If you are invoking the preprocessor from a shell or shell-like 10213 program you may need to use the shell's quoting syntax to protect 10214 characters such as spaces that have a meaning in the shell syntax. 10215 10216 If you wish to define a function-like macro on the command line, 10217 write its argument list with surrounding parentheses before the 10218 equals sign (if any). Parentheses are meaningful to most shells, 10219 so you will need to quote the option. With `sh' and `csh', 10220 `-D'NAME(ARGS...)=DEFINITION'' works. 10221 10222 `-D' and `-U' options are processed in the order they are given on 10223 the command line. All `-imacros FILE' and `-include FILE' options 10224 are processed after all `-D' and `-U' options. 10225 10226`-U NAME' 10227 Cancel any previous definition of NAME, either built in or 10228 provided with a `-D' option. 10229 10230`-undef' 10231 Do not predefine any system-specific or GCC-specific macros. The 10232 standard predefined macros remain defined. 10233 10234`-I DIR' 10235 Add the directory DIR to the list of directories to be searched 10236 for header files. Directories named by `-I' are searched before 10237 the standard system include directories. If the directory DIR is 10238 a standard system include directory, the option is ignored to 10239 ensure that the default search order for system directories and 10240 the special treatment of system headers are not defeated . If DIR 10241 begins with `=', then the `=' will be replaced by the sysroot 10242 prefix; see `--sysroot' and `-isysroot'. 10243 10244`-o FILE' 10245 Write output to FILE. This is the same as specifying FILE as the 10246 second non-option argument to `cpp'. `gcc' has a different 10247 interpretation of a second non-option argument, so you must use 10248 `-o' to specify the output file. 10249 10250`-Wall' 10251 Turns on all optional warnings which are desirable for normal code. 10252 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 10253 warning about integer promotion causing a change of sign in `#if' 10254 expressions. Note that many of the preprocessor's warnings are on 10255 by default and have no options to control them. 10256 10257`-Wcomment' 10258`-Wcomments' 10259 Warn whenever a comment-start sequence `/*' appears in a `/*' 10260 comment, or whenever a backslash-newline appears in a `//' comment. 10261 (Both forms have the same effect.) 10262 10263`-Wtrigraphs' 10264 Most trigraphs in comments cannot affect the meaning of the 10265 program. However, a trigraph that would form an escaped newline 10266 (`??/' at the end of a line) can, by changing where the comment 10267 begins or ends. Therefore, only trigraphs that would form escaped 10268 newlines produce warnings inside a comment. 10269 10270 This option is implied by `-Wall'. If `-Wall' is not given, this 10271 option is still enabled unless trigraphs are enabled. To get 10272 trigraph conversion without warnings, but get the other `-Wall' 10273 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 10274 10275`-Wtraditional' 10276 Warn about certain constructs that behave differently in 10277 traditional and ISO C. Also warn about ISO C constructs that have 10278 no traditional C equivalent, and problematic constructs which 10279 should be avoided. 10280 10281`-Wundef' 10282 Warn whenever an identifier which is not a macro is encountered in 10283 an `#if' directive, outside of `defined'. Such identifiers are 10284 replaced with zero. 10285 10286`-Wunused-macros' 10287 Warn about macros defined in the main file that are unused. A 10288 macro is "used" if it is expanded or tested for existence at least 10289 once. The preprocessor will also warn if the macro has not been 10290 used at the time it is redefined or undefined. 10291 10292 Built-in macros, macros defined on the command line, and macros 10293 defined in include files are not warned about. 10294 10295 _Note:_ If a macro is actually used, but only used in skipped 10296 conditional blocks, then CPP will report it as unused. To avoid 10297 the warning in such a case, you might improve the scope of the 10298 macro's definition by, for example, moving it into the first 10299 skipped block. Alternatively, you could provide a dummy use with 10300 something like: 10301 10302 #if defined the_macro_causing_the_warning 10303 #endif 10304 10305`-Wendif-labels' 10306 Warn whenever an `#else' or an `#endif' are followed by text. 10307 This usually happens in code of the form 10308 10309 #if FOO 10310 ... 10311 #else FOO 10312 ... 10313 #endif FOO 10314 10315 The second and third `FOO' should be in comments, but often are not 10316 in older programs. This warning is on by default. 10317 10318`-Werror' 10319 Make all warnings into hard errors. Source code which triggers 10320 warnings will be rejected. 10321 10322`-Wsystem-headers' 10323 Issue warnings for code in system headers. These are normally 10324 unhelpful in finding bugs in your own code, therefore suppressed. 10325 If you are responsible for the system library, you may want to see 10326 them. 10327 10328`-w' 10329 Suppress all warnings, including those which GNU CPP issues by 10330 default. 10331 10332`-pedantic' 10333 Issue all the mandatory diagnostics listed in the C standard. 10334 Some of them are left out by default, since they trigger 10335 frequently on harmless code. 10336 10337`-pedantic-errors' 10338 Issue all the mandatory diagnostics, and make all mandatory 10339 diagnostics into errors. This includes mandatory diagnostics that 10340 GCC issues without `-pedantic' but treats as warnings. 10341 10342`-M' 10343 Instead of outputting the result of preprocessing, output a rule 10344 suitable for `make' describing the dependencies of the main source 10345 file. The preprocessor outputs one `make' rule containing the 10346 object file name for that source file, a colon, and the names of 10347 all the included files, including those coming from `-include' or 10348 `-imacros' command-line options. 10349 10350 Unless specified explicitly (with `-MT' or `-MQ'), the object file 10351 name consists of the name of the source file with any suffix 10352 replaced with object file suffix and with any leading directory 10353 parts removed. If there are many included files then the rule is 10354 split into several lines using `\'-newline. The rule has no 10355 commands. 10356 10357 This option does not suppress the preprocessor's debug output, 10358 such as `-dM'. To avoid mixing such debug output with the 10359 dependency rules you should explicitly specify the dependency 10360 output file with `-MF', or use an environment variable like 10361 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 10362 output will still be sent to the regular output stream as normal. 10363 10364 Passing `-M' to the driver implies `-E', and suppresses warnings 10365 with an implicit `-w'. 10366 10367`-MM' 10368 Like `-M' but do not mention header files that are found in system 10369 header directories, nor header files that are included, directly 10370 or indirectly, from such a header. 10371 10372 This implies that the choice of angle brackets or double quotes in 10373 an `#include' directive does not in itself determine whether that 10374 header will appear in `-MM' dependency output. This is a slight 10375 change in semantics from GCC versions 3.0 and earlier. 10376 10377`-MF FILE' 10378 When used with `-M' or `-MM', specifies a file to write the 10379 dependencies to. If no `-MF' switch is given the preprocessor 10380 sends the rules to the same place it would have sent preprocessed 10381 output. 10382 10383 When used with the driver options `-MD' or `-MMD', `-MF' overrides 10384 the default dependency output file. 10385 10386`-MG' 10387 In conjunction with an option such as `-M' requesting dependency 10388 generation, `-MG' assumes missing header files are generated files 10389 and adds them to the dependency list without raising an error. 10390 The dependency filename is taken directly from the `#include' 10391 directive without prepending any path. `-MG' also suppresses 10392 preprocessed output, as a missing header file renders this useless. 10393 10394 This feature is used in automatic updating of makefiles. 10395 10396`-MP' 10397 This option instructs CPP to add a phony target for each dependency 10398 other than the main file, causing each to depend on nothing. These 10399 dummy rules work around errors `make' gives if you remove header 10400 files without updating the `Makefile' to match. 10401 10402 This is typical output: 10403 10404 test.o: test.c test.h 10405 10406 test.h: 10407 10408`-MT TARGET' 10409 Change the target of the rule emitted by dependency generation. By 10410 default CPP takes the name of the main input file, deletes any 10411 directory components and any file suffix such as `.c', and appends 10412 the platform's usual object suffix. The result is the target. 10413 10414 An `-MT' option will set the target to be exactly the string you 10415 specify. If you want multiple targets, you can specify them as a 10416 single argument to `-MT', or use multiple `-MT' options. 10417 10418 For example, `-MT '$(objpfx)foo.o'' might give 10419 10420 $(objpfx)foo.o: foo.c 10421 10422`-MQ TARGET' 10423 Same as `-MT', but it quotes any characters which are special to 10424 Make. `-MQ '$(objpfx)foo.o'' gives 10425 10426 $$(objpfx)foo.o: foo.c 10427 10428 The default target is automatically quoted, as if it were given 10429 with `-MQ'. 10430 10431`-MD' 10432 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 10433 implied. The driver determines FILE based on whether an `-o' 10434 option is given. If it is, the driver uses its argument but with 10435 a suffix of `.d', otherwise it takes the name of the input file, 10436 removes any directory components and suffix, and applies a `.d' 10437 suffix. 10438 10439 If `-MD' is used in conjunction with `-E', any `-o' switch is 10440 understood to specify the dependency output file (*note -MF: 10441 dashMF.), but if used without `-E', each `-o' is understood to 10442 specify a target object file. 10443 10444 Since `-E' is not implied, `-MD' can be used to generate a 10445 dependency output file as a side-effect of the compilation process. 10446 10447`-MMD' 10448 Like `-MD' except mention only user header files, not system 10449 header files. 10450 10451`-fpch-deps' 10452 When using precompiled headers (*note Precompiled Headers::), this 10453 flag will cause the dependency-output flags to also list the files 10454 from the precompiled header's dependencies. If not specified only 10455 the precompiled header would be listed and not the files that were 10456 used to create it because those files are not consulted when a 10457 precompiled header is used. 10458 10459`-fpch-preprocess' 10460 This option allows use of a precompiled header (*note Precompiled 10461 Headers::) together with `-E'. It inserts a special `#pragma', 10462 `#pragma GCC pch_preprocess "FILENAME"' in the output to mark the 10463 place where the precompiled header was found, and its FILENAME. 10464 When `-fpreprocessed' is in use, GCC recognizes this `#pragma' and 10465 loads the PCH. 10466 10467 This option is off by default, because the resulting preprocessed 10468 output is only really suitable as input to GCC. It is switched on 10469 by `-save-temps'. 10470 10471 You should not write this `#pragma' in your own code, but it is 10472 safe to edit the filename if the PCH file is available in a 10473 different location. The filename may be absolute or it may be 10474 relative to GCC's current directory. 10475 10476`-x c' 10477`-x c++' 10478`-x objective-c' 10479`-x assembler-with-cpp' 10480 Specify the source language: C, C++, Objective-C, or assembly. 10481 This has nothing to do with standards conformance or extensions; 10482 it merely selects which base syntax to expect. If you give none 10483 of these options, cpp will deduce the language from the extension 10484 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 10485 extensions for C++ and assembly are also recognized. If cpp does 10486 not recognize the extension, it will treat the file as C; this is 10487 the most generic mode. 10488 10489 _Note:_ Previous versions of cpp accepted a `-lang' option which 10490 selected both the language and the standards conformance level. 10491 This option has been removed, because it conflicts with the `-l' 10492 option. 10493 10494`-std=STANDARD' 10495`-ansi' 10496 Specify the standard to which the code should conform. Currently 10497 CPP knows about C and C++ standards; others may be added in the 10498 future. 10499 10500 STANDARD may be one of: 10501 `c90' 10502 `c89' 10503 `iso9899:1990' 10504 The ISO C standard from 1990. `c90' is the customary 10505 shorthand for this version of the standard. 10506 10507 The `-ansi' option is equivalent to `-std=c90'. 10508 10509 `iso9899:199409' 10510 The 1990 C standard, as amended in 1994. 10511 10512 `iso9899:1999' 10513 `c99' 10514 `iso9899:199x' 10515 `c9x' 10516 The revised ISO C standard, published in December 1999. 10517 Before publication, this was known as C9X. 10518 10519 `iso9899:2011' 10520 `c11' 10521 `c1x' 10522 The revised ISO C standard, published in December 2011. 10523 Before publication, this was known as C1X. 10524 10525 `gnu90' 10526 `gnu89' 10527 The 1990 C standard plus GNU extensions. This is the default. 10528 10529 `gnu99' 10530 `gnu9x' 10531 The 1999 C standard plus GNU extensions. 10532 10533 `gnu11' 10534 `gnu1x' 10535 The 2011 C standard plus GNU extensions. 10536 10537 `c++98' 10538 The 1998 ISO C++ standard plus amendments. 10539 10540 `gnu++98' 10541 The same as `-std=c++98' plus GNU extensions. This is the 10542 default for C++ code. 10543 10544`-I-' 10545 Split the include path. Any directories specified with `-I' 10546 options before `-I-' are searched only for headers requested with 10547 `#include "FILE"'; they are not searched for `#include <FILE>'. 10548 If additional directories are specified with `-I' options after 10549 the `-I-', those directories are searched for all `#include' 10550 directives. 10551 10552 In addition, `-I-' inhibits the use of the directory of the current 10553 file directory as the first search directory for `#include "FILE"'. 10554 This option has been deprecated. 10555 10556`-nostdinc' 10557 Do not search the standard system directories for header files. 10558 Only the directories you have specified with `-I' options (and the 10559 directory of the current file, if appropriate) are searched. 10560 10561`-nostdinc++' 10562 Do not search for header files in the C++-specific standard 10563 directories, but do still search the other standard directories. 10564 (This option is used when building the C++ library.) 10565 10566`-include FILE' 10567 Process FILE as if `#include "file"' appeared as the first line of 10568 the primary source file. However, the first directory searched 10569 for FILE is the preprocessor's working directory _instead of_ the 10570 directory containing the main source file. If not found there, it 10571 is searched for in the remainder of the `#include "..."' search 10572 chain as normal. 10573 10574 If multiple `-include' options are given, the files are included 10575 in the order they appear on the command line. 10576 10577`-imacros FILE' 10578 Exactly like `-include', except that any output produced by 10579 scanning FILE is thrown away. Macros it defines remain defined. 10580 This allows you to acquire all the macros from a header without 10581 also processing its declarations. 10582 10583 All files specified by `-imacros' are processed before all files 10584 specified by `-include'. 10585 10586`-idirafter DIR' 10587 Search DIR for header files, but do it _after_ all directories 10588 specified with `-I' and the standard system directories have been 10589 exhausted. DIR is treated as a system include directory. If DIR 10590 begins with `=', then the `=' will be replaced by the sysroot 10591 prefix; see `--sysroot' and `-isysroot'. 10592 10593`-iprefix PREFIX' 10594 Specify PREFIX as the prefix for subsequent `-iwithprefix' 10595 options. If the prefix represents a directory, you should include 10596 the final `/'. 10597 10598`-iwithprefix DIR' 10599`-iwithprefixbefore DIR' 10600 Append DIR to the prefix specified previously with `-iprefix', and 10601 add the resulting directory to the include search path. 10602 `-iwithprefixbefore' puts it in the same place `-I' would; 10603 `-iwithprefix' puts it where `-idirafter' would. 10604 10605`-isysroot DIR' 10606 This option is like the `--sysroot' option, but applies only to 10607 header files (except for Darwin targets, where it applies to both 10608 header files and libraries). See the `--sysroot' option for more 10609 information. 10610 10611`-imultilib DIR' 10612 Use DIR as a subdirectory of the directory containing 10613 target-specific C++ headers. 10614 10615`-isystem DIR' 10616 Search DIR for header files, after all directories specified by 10617 `-I' but before the standard system directories. Mark it as a 10618 system directory, so that it gets the same special treatment as is 10619 applied to the standard system directories. If DIR begins with 10620 `=', then the `=' will be replaced by the sysroot prefix; see 10621 `--sysroot' and `-isysroot'. 10622 10623`-iquote DIR' 10624 Search DIR only for header files requested with `#include "FILE"'; 10625 they are not searched for `#include <FILE>', before all 10626 directories specified by `-I' and before the standard system 10627 directories. If DIR begins with `=', then the `=' will be replaced 10628 by the sysroot prefix; see `--sysroot' and `-isysroot'. 10629 10630`-fdirectives-only' 10631 When preprocessing, handle directives, but do not expand macros. 10632 10633 The option's behavior depends on the `-E' and `-fpreprocessed' 10634 options. 10635 10636 With `-E', preprocessing is limited to the handling of directives 10637 such as `#define', `#ifdef', and `#error'. Other preprocessor 10638 operations, such as macro expansion and trigraph conversion are 10639 not performed. In addition, the `-dD' option is implicitly 10640 enabled. 10641 10642 With `-fpreprocessed', predefinition of command line and most 10643 builtin macros is disabled. Macros such as `__LINE__', which are 10644 contextually dependent, are handled normally. This enables 10645 compilation of files previously preprocessed with `-E 10646 -fdirectives-only'. 10647 10648 With both `-E' and `-fpreprocessed', the rules for 10649 `-fpreprocessed' take precedence. This enables full preprocessing 10650 of files previously preprocessed with `-E -fdirectives-only'. 10651 10652`-fdollars-in-identifiers' 10653 Accept `$' in identifiers. 10654 10655`-fextended-identifiers' 10656 Accept universal character names in identifiers. This option is 10657 enabled by default for C99 (and later C standard versions) and C++. 10658 10659`-fno-canonical-system-headers' 10660 When preprocessing, do not shorten system header paths with 10661 canonicalization. 10662 10663`-fpreprocessed' 10664 Indicate to the preprocessor that the input file has already been 10665 preprocessed. This suppresses things like macro expansion, 10666 trigraph conversion, escaped newline splicing, and processing of 10667 most directives. The preprocessor still recognizes and removes 10668 comments, so that you can pass a file preprocessed with `-C' to 10669 the compiler without problems. In this mode the integrated 10670 preprocessor is little more than a tokenizer for the front ends. 10671 10672 `-fpreprocessed' is implicit if the input file has one of the 10673 extensions `.i', `.ii' or `.mi'. These are the extensions that 10674 GCC uses for preprocessed files created by `-save-temps'. 10675 10676`-ftabstop=WIDTH' 10677 Set the distance between tab stops. This helps the preprocessor 10678 report correct column numbers in warnings or errors, even if tabs 10679 appear on the line. If the value is less than 1 or greater than 10680 100, the option is ignored. The default is 8. 10681 10682`-fdebug-cpp' 10683 This option is only useful for debugging GCC. When used with 10684 `-E', dumps debugging information about location maps. Every 10685 token in the output is preceded by the dump of the map its location 10686 belongs to. The dump of the map holding the location of a token 10687 would be: 10688 {`P':`/file/path';`F':`/includer/path';`L':LINE_NUM;`C':COL_NUM;`S':SYSTEM_HEADER_P;`M':MAP_ADDRESS;`E':MACRO_EXPANSION_P,`loc':LOCATION} 10689 10690 When used without `-E', this option has no effect. 10691 10692`-ftrack-macro-expansion[=LEVEL]' 10693 Track locations of tokens across macro expansions. This allows the 10694 compiler to emit diagnostic about the current macro expansion stack 10695 when a compilation error occurs in a macro expansion. Using this 10696 option makes the preprocessor and the compiler consume more 10697 memory. The LEVEL parameter can be used to choose the level of 10698 precision of token location tracking thus decreasing the memory 10699 consumption if necessary. Value `0' of LEVEL de-activates this 10700 option just as if no `-ftrack-macro-expansion' was present on the 10701 command line. Value `1' tracks tokens locations in a degraded mode 10702 for the sake of minimal memory overhead. In this mode all tokens 10703 resulting from the expansion of an argument of a function-like 10704 macro have the same location. Value `2' tracks tokens locations 10705 completely. This value is the most memory hungry. When this 10706 option is given no argument, the default parameter value is `2'. 10707 10708 Note that `-ftrack-macro-expansion=2' is activated by default. 10709 10710`-fexec-charset=CHARSET' 10711 Set the execution character set, used for string and character 10712 constants. The default is UTF-8. CHARSET can be any encoding 10713 supported by the system's `iconv' library routine. 10714 10715`-fwide-exec-charset=CHARSET' 10716 Set the wide execution character set, used for wide string and 10717 character constants. The default is UTF-32 or UTF-16, whichever 10718 corresponds to the width of `wchar_t'. As with `-fexec-charset', 10719 CHARSET can be any encoding supported by the system's `iconv' 10720 library routine; however, you will have problems with encodings 10721 that do not fit exactly in `wchar_t'. 10722 10723`-finput-charset=CHARSET' 10724 Set the input character set, used for translation from the 10725 character set of the input file to the source character set used 10726 by GCC. If the locale does not specify, or GCC cannot get this 10727 information from the locale, the default is UTF-8. This can be 10728 overridden by either the locale or this command-line option. 10729 Currently the command-line option takes precedence if there's a 10730 conflict. CHARSET can be any encoding supported by the system's 10731 `iconv' library routine. 10732 10733`-fworking-directory' 10734 Enable generation of linemarkers in the preprocessor output that 10735 will let the compiler know the current working directory at the 10736 time of preprocessing. When this option is enabled, the 10737 preprocessor will emit, after the initial linemarker, a second 10738 linemarker with the current working directory followed by two 10739 slashes. GCC will use this directory, when it's present in the 10740 preprocessed input, as the directory emitted as the current 10741 working directory in some debugging information formats. This 10742 option is implicitly enabled if debugging information is enabled, 10743 but this can be inhibited with the negated form 10744 `-fno-working-directory'. If the `-P' flag is present in the 10745 command line, this option has no effect, since no `#line' 10746 directives are emitted whatsoever. 10747 10748`-fno-show-column' 10749 Do not print column numbers in diagnostics. This may be necessary 10750 if diagnostics are being scanned by a program that does not 10751 understand the column numbers, such as `dejagnu'. 10752 10753`-A PREDICATE=ANSWER' 10754 Make an assertion with the predicate PREDICATE and answer ANSWER. 10755 This form is preferred to the older form `-A PREDICATE(ANSWER)', 10756 which is still supported, because it does not use shell special 10757 characters. 10758 10759`-A -PREDICATE=ANSWER' 10760 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 10761 10762`-dCHARS' 10763 CHARS is a sequence of one or more of the following characters, 10764 and must not be preceded by a space. Other characters are 10765 interpreted by the compiler proper, or reserved for future 10766 versions of GCC, and so are silently ignored. If you specify 10767 characters whose behavior conflicts, the result is undefined. 10768 10769 `M' 10770 Instead of the normal output, generate a list of `#define' 10771 directives for all the macros defined during the execution of 10772 the preprocessor, including predefined macros. This gives 10773 you a way of finding out what is predefined in your version 10774 of the preprocessor. Assuming you have no file `foo.h', the 10775 command 10776 10777 touch foo.h; cpp -dM foo.h 10778 10779 will show all the predefined macros. 10780 10781 If you use `-dM' without the `-E' option, `-dM' is 10782 interpreted as a synonym for `-fdump-rtl-mach'. *Note 10783 Debugging Options: (gcc)Debugging Options. 10784 10785 `D' 10786 Like `M' except in two respects: it does _not_ include the 10787 predefined macros, and it outputs _both_ the `#define' 10788 directives and the result of preprocessing. Both kinds of 10789 output go to the standard output file. 10790 10791 `N' 10792 Like `D', but emit only the macro names, not their expansions. 10793 10794 `I' 10795 Output `#include' directives in addition to the result of 10796 preprocessing. 10797 10798 `U' 10799 Like `D' except that only macros that are expanded, or whose 10800 definedness is tested in preprocessor directives, are output; 10801 the output is delayed until the use or test of the macro; and 10802 `#undef' directives are also output for macros tested but 10803 undefined at the time. 10804 10805`-P' 10806 Inhibit generation of linemarkers in the output from the 10807 preprocessor. This might be useful when running the preprocessor 10808 on something that is not C code, and will be sent to a program 10809 which might be confused by the linemarkers. 10810 10811`-C' 10812 Do not discard comments. All comments are passed through to the 10813 output file, except for comments in processed directives, which 10814 are deleted along with the directive. 10815 10816 You should be prepared for side effects when using `-C'; it causes 10817 the preprocessor to treat comments as tokens in their own right. 10818 For example, comments appearing at the start of what would be a 10819 directive line have the effect of turning that line into an 10820 ordinary source line, since the first token on the line is no 10821 longer a `#'. 10822 10823`-CC' 10824 Do not discard comments, including during macro expansion. This is 10825 like `-C', except that comments contained within macros are also 10826 passed through to the output file where the macro is expanded. 10827 10828 In addition to the side-effects of the `-C' option, the `-CC' 10829 option causes all C++-style comments inside a macro to be 10830 converted to C-style comments. This is to prevent later use of 10831 that macro from inadvertently commenting out the remainder of the 10832 source line. 10833 10834 The `-CC' option is generally used to support lint comments. 10835 10836`-traditional-cpp' 10837 Try to imitate the behavior of old-fashioned C preprocessors, as 10838 opposed to ISO C preprocessors. 10839 10840`-trigraphs' 10841 Process trigraph sequences. These are three-character sequences, 10842 all starting with `??', that are defined by ISO C to stand for 10843 single characters. For example, `??/' stands for `\', so `'??/n'' 10844 is a character constant for a newline. By default, GCC ignores 10845 trigraphs, but in standard-conforming modes it converts them. See 10846 the `-std' and `-ansi' options. 10847 10848 The nine trigraphs and their replacements are 10849 10850 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 10851 Replacement: [ ] { } # \ ^ | ~ 10852 10853`-remap' 10854 Enable special code to work around file systems which only permit 10855 very short file names, such as MS-DOS. 10856 10857`--help' 10858`--target-help' 10859 Print text describing all the command-line options instead of 10860 preprocessing anything. 10861 10862`-v' 10863 Verbose mode. Print out GNU CPP's version number at the beginning 10864 of execution, and report the final form of the include path. 10865 10866`-H' 10867 Print the name of each header file used, in addition to other 10868 normal activities. Each name is indented to show how deep in the 10869 `#include' stack it is. Precompiled header files are also 10870 printed, even if they are found to be invalid; an invalid 10871 precompiled header file is printed with `...x' and a valid one 10872 with `...!' . 10873 10874`-version' 10875`--version' 10876 Print out GNU CPP's version number. With one dash, proceed to 10877 preprocess as normal. With two dashes, exit immediately. 10878 10879 10880File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 10881 108823.12 Passing Options to the Assembler 10883===================================== 10884 10885You can pass options to the assembler. 10886 10887`-Wa,OPTION' 10888 Pass OPTION as an option to the assembler. If OPTION contains 10889 commas, it is split into multiple options at the commas. 10890 10891`-Xassembler OPTION' 10892 Pass OPTION as an option to the assembler. You can use this to 10893 supply system-specific assembler options that GCC does not 10894 recognize. 10895 10896 If you want to pass an option that takes an argument, you must use 10897 `-Xassembler' twice, once for the option and once for the argument. 10898 10899 10900 10901File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 10902 109033.13 Options for Linking 10904======================== 10905 10906These options come into play when the compiler links object files into 10907an executable output file. They are meaningless if the compiler is not 10908doing a link step. 10909 10910`OBJECT-FILE-NAME' 10911 A file name that does not end in a special recognized suffix is 10912 considered to name an object file or library. (Object files are 10913 distinguished from libraries by the linker according to the file 10914 contents.) If linking is done, these object files are used as 10915 input to the linker. 10916 10917`-c' 10918`-S' 10919`-E' 10920 If any of these options is used, then the linker is not run, and 10921 object file names should not be used as arguments. *Note Overall 10922 Options::. 10923 10924`-fuse-ld=bfd' 10925 Use the `bfd' linker instead of the default linker. 10926 10927`-fuse-ld=gold' 10928 Use the `gold' linker instead of the default linker. 10929 10930`-lLIBRARY' 10931`-l LIBRARY' 10932 Search the library named LIBRARY when linking. (The second 10933 alternative with the library as a separate argument is only for 10934 POSIX compliance and is not recommended.) 10935 10936 It makes a difference where in the command you write this option; 10937 the linker searches and processes libraries and object files in 10938 the order they are specified. Thus, `foo.o -lz bar.o' searches 10939 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 10940 refers to functions in `z', those functions may not be loaded. 10941 10942 The linker searches a standard list of directories for the library, 10943 which is actually a file named `libLIBRARY.a'. The linker then 10944 uses this file as if it had been specified precisely by name. 10945 10946 The directories searched include several standard system 10947 directories plus any that you specify with `-L'. 10948 10949 Normally the files found this way are library files--archive files 10950 whose members are object files. The linker handles an archive 10951 file by scanning through it for members which define symbols that 10952 have so far been referenced but not defined. But if the file that 10953 is found is an ordinary object file, it is linked in the usual 10954 fashion. The only difference between using an `-l' option and 10955 specifying a file name is that `-l' surrounds LIBRARY with `lib' 10956 and `.a' and searches several directories. 10957 10958`-lobjc' 10959 You need this special case of the `-l' option in order to link an 10960 Objective-C or Objective-C++ program. 10961 10962`-nostartfiles' 10963 Do not use the standard system startup files when linking. The 10964 standard system libraries are used normally, unless `-nostdlib' or 10965 `-nodefaultlibs' is used. 10966 10967`-nodefaultlibs' 10968 Do not use the standard system libraries when linking. Only the 10969 libraries you specify are passed to the linker, and options 10970 specifying linkage of the system libraries, such as 10971 `-static-libgcc' or `-shared-libgcc', are ignored. The standard 10972 startup files are used normally, unless `-nostartfiles' is used. 10973 10974 The compiler may generate calls to `memcmp', `memset', `memcpy' 10975 and `memmove'. These entries are usually resolved by entries in 10976 libc. These entry points should be supplied through some other 10977 mechanism when this option is specified. 10978 10979`-nostdlib' 10980 Do not use the standard system startup files or libraries when 10981 linking. No startup files and only the libraries you specify are 10982 passed to the linker, and options specifying linkage of the system 10983 libraries, such as `-static-libgcc' or `-shared-libgcc', are 10984 ignored. 10985 10986 The compiler may generate calls to `memcmp', `memset', `memcpy' 10987 and `memmove'. These entries are usually resolved by entries in 10988 libc. These entry points should be supplied through some other 10989 mechanism when this option is specified. 10990 10991 One of the standard libraries bypassed by `-nostdlib' and 10992 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 10993 which GCC uses to overcome shortcomings of particular machines, or 10994 special needs for some languages. (*Note Interfacing to GCC 10995 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 10996 most cases, you need `libgcc.a' even when you want to avoid other 10997 standard libraries. In other words, when you specify `-nostdlib' 10998 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 10999 This ensures that you have no unresolved references to internal GCC 11000 library subroutines. (An example of such an internal subroutine 11001 is `__main', used to ensure C++ constructors are called; *note 11002 `collect2': (gccint)Collect2.) 11003 11004`-pie' 11005 Produce a position independent executable on targets that support 11006 it. For predictable results, you must also specify the same set 11007 of options used for compilation (`-fpie', `-fPIE', or model 11008 suboptions) when you specify this linker option. 11009 11010`-rdynamic' 11011 Pass the flag `-export-dynamic' to the ELF linker, on targets that 11012 support it. This instructs the linker to add all symbols, not only 11013 used ones, to the dynamic symbol table. This option is needed for 11014 some uses of `dlopen' or to allow obtaining backtraces from within 11015 a program. 11016 11017`-s' 11018 Remove all symbol table and relocation information from the 11019 executable. 11020 11021`-static' 11022 On systems that support dynamic linking, this prevents linking 11023 with the shared libraries. On other systems, this option has no 11024 effect. 11025 11026`-shared' 11027 Produce a shared object which can then be linked with other 11028 objects to form an executable. Not all systems support this 11029 option. For predictable results, you must also specify the same 11030 set of options used for compilation (`-fpic', `-fPIC', or model 11031 suboptions) when you specify this linker option.(1) 11032 11033`-shared-libgcc' 11034`-static-libgcc' 11035 On systems that provide `libgcc' as a shared library, these options 11036 force the use of either the shared or static version, respectively. 11037 If no shared version of `libgcc' was built when the compiler was 11038 configured, these options have no effect. 11039 11040 There are several situations in which an application should use the 11041 shared `libgcc' instead of the static version. The most common of 11042 these is when the application wishes to throw and catch exceptions 11043 across different shared libraries. In that case, each of the 11044 libraries as well as the application itself should use the shared 11045 `libgcc'. 11046 11047 Therefore, the G++ and GCJ drivers automatically add 11048 `-shared-libgcc' whenever you build a shared library or a main 11049 executable, because C++ and Java programs typically use 11050 exceptions, so this is the right thing to do. 11051 11052 If, instead, you use the GCC driver to create shared libraries, 11053 you may find that they are not always linked with the shared 11054 `libgcc'. If GCC finds, at its configuration time, that you have 11055 a non-GNU linker or a GNU linker that does not support option 11056 `--eh-frame-hdr', it links the shared version of `libgcc' into 11057 shared libraries by default. Otherwise, it takes advantage of the 11058 linker and optimizes away the linking with the shared version of 11059 `libgcc', linking with the static version of libgcc by default. 11060 This allows exceptions to propagate through such shared libraries, 11061 without incurring relocation costs at library load time. 11062 11063 However, if a library or main executable is supposed to throw or 11064 catch exceptions, you must link it using the G++ or GCJ driver, as 11065 appropriate for the languages used in the program, or using the 11066 option `-shared-libgcc', such that it is linked with the shared 11067 `libgcc'. 11068 11069`-static-libasan' 11070 When the `-fsanitize=address' option is used to link a program, 11071 the GCC driver automatically links against `libasan'. If 11072 `libasan' is available as a shared library, and the `-static' 11073 option is not used, then this links against the shared version of 11074 `libasan'. The `-static-libasan' option directs the GCC driver to 11075 link `libasan' statically, without necessarily linking other 11076 libraries statically. 11077 11078`-static-libtsan' 11079 When the `-fsanitize=thread' option is used to link a program, the 11080 GCC driver automatically links against `libtsan'. If `libtsan' is 11081 available as a shared library, and the `-static' option is not 11082 used, then this links against the shared version of `libtsan'. 11083 The `-static-libtsan' option directs the GCC driver to link 11084 `libtsan' statically, without necessarily linking other libraries 11085 statically. 11086 11087`-static-liblsan' 11088 When the `-fsanitize=leak' option is used to link a program, the 11089 GCC driver automatically links against `liblsan'. If `liblsan' is 11090 available as a shared library, and the `-static' option is not 11091 used, then this links against the shared version of `liblsan'. 11092 The `-static-liblsan' option directs the GCC driver to link 11093 `liblsan' statically, without necessarily linking other libraries 11094 statically. 11095 11096`-static-libubsan' 11097 When the `-fsanitize=undefined' option is used to link a program, 11098 the GCC driver automatically links against `libubsan'. If 11099 `libubsan' is available as a shared library, and the `-static' 11100 option is not used, then this links against the shared version of 11101 `libubsan'. The `-static-libubsan' option directs the GCC driver 11102 to link `libubsan' statically, without necessarily linking other 11103 libraries statically. 11104 11105`-static-libmpx' 11106 When the `-fcheck-pointer bounds' and `-mmpx' options are used to 11107 link a program, the GCC driver automatically links against 11108 `libmpx'. If `libmpx' is available as a shared library, and the 11109 `-static' option is not used, then this links against the shared 11110 version of `libmpx'. The `-static-libmpx' option directs the GCC 11111 driver to link `libmpx' statically, without necessarily linking 11112 other libraries statically. 11113 11114`-static-libmpxwrappers' 11115 When the `-fcheck-pointer bounds' and `-mmpx' options are used to 11116 link a program without also using `-fno-chkp-use-wrappers', the 11117 GCC driver automatically links against `libmpxwrappers'. If 11118 `libmpxwrappers' is available as a shared library, and the 11119 `-static' option is not used, then this links against the shared 11120 version of `libmpxwrappers'. The `-static-libmpxwrappers' option 11121 directs the GCC driver to link `libmpxwrappers' statically, 11122 without necessarily linking other libraries statically. 11123 11124`-static-libstdc++' 11125 When the `g++' program is used to link a C++ program, it normally 11126 automatically links against `libstdc++'. If `libstdc++' is 11127 available as a shared library, and the `-static' option is not 11128 used, then this links against the shared version of `libstdc++'. 11129 That is normally fine. However, it is sometimes useful to freeze 11130 the version of `libstdc++' used by the program without going all 11131 the way to a fully static link. The `-static-libstdc++' option 11132 directs the `g++' driver to link `libstdc++' statically, without 11133 necessarily linking other libraries statically. 11134 11135`-symbolic' 11136 Bind references to global symbols when building a shared object. 11137 Warn about any unresolved references (unless overridden by the 11138 link editor option `-Xlinker -z -Xlinker defs'). Only a few 11139 systems support this option. 11140 11141`-T SCRIPT' 11142 Use SCRIPT as the linker script. This option is supported by most 11143 systems using the GNU linker. On some targets, such as bare-board 11144 targets without an operating system, the `-T' option may be 11145 required when linking to avoid references to undefined symbols. 11146 11147`-Xlinker OPTION' 11148 Pass OPTION as an option to the linker. You can use this to 11149 supply system-specific linker options that GCC does not recognize. 11150 11151 If you want to pass an option that takes a separate argument, you 11152 must use `-Xlinker' twice, once for the option and once for the 11153 argument. For example, to pass `-assert definitions', you must 11154 write `-Xlinker -assert -Xlinker definitions'. It does not work 11155 to write `-Xlinker "-assert definitions"', because this passes the 11156 entire string as a single argument, which is not what the linker 11157 expects. 11158 11159 When using the GNU linker, it is usually more convenient to pass 11160 arguments to linker options using the `OPTION=VALUE' syntax than 11161 as separate arguments. For example, you can specify `-Xlinker 11162 -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'. 11163 Other linkers may not support this syntax for command-line options. 11164 11165`-Wl,OPTION' 11166 Pass OPTION as an option to the linker. If OPTION contains 11167 commas, it is split into multiple options at the commas. You can 11168 use this syntax to pass an argument to the option. For example, 11169 `-Wl,-Map,output.map' passes `-Map output.map' to the linker. 11170 When using the GNU linker, you can also get the same effect with 11171 `-Wl,-Map=output.map'. 11172 11173`-u SYMBOL' 11174 Pretend the symbol SYMBOL is undefined, to force linking of 11175 library modules to define it. You can use `-u' multiple times with 11176 different symbols to force loading of additional library modules. 11177 11178`-z KEYWORD' 11179 `-z' is passed directly on to the linker along with the keyword 11180 KEYWORD. See the section in the documentation of your linker for 11181 permitted values and their meanings. 11182 11183 ---------- Footnotes ---------- 11184 11185 (1) On some systems, `gcc -shared' needs to build supplementary stub 11186code for constructors to work. On multi-libbed systems, `gcc -shared' 11187must select the correct support libraries to link against. Failing to 11188supply the correct flags may lead to subtle defects. Supplying them in 11189cases where they are not necessary is innocuous. 11190 11191 11192File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 11193 111943.14 Options for Directory Search 11195================================= 11196 11197These options specify directories to search for header files, for 11198libraries and for parts of the compiler: 11199 11200`-IDIR' 11201 Add the directory DIR to the head of the list of directories to be 11202 searched for header files. This can be used to override a system 11203 header file, substituting your own version, since these 11204 directories are searched before the system header file 11205 directories. However, you should not use this option to add 11206 directories that contain vendor-supplied system header files (use 11207 `-isystem' for that). If you use more than one `-I' option, the 11208 directories are scanned in left-to-right order; the standard 11209 system directories come after. 11210 11211 If a standard system include directory, or a directory specified 11212 with `-isystem', is also specified with `-I', the `-I' option is 11213 ignored. The directory is still searched but as a system 11214 directory at its normal position in the system include chain. 11215 This is to ensure that GCC's procedure to fix buggy system headers 11216 and the ordering for the `include_next' directive are not 11217 inadvertently changed. If you really need to change the search 11218 order for system directories, use the `-nostdinc' and/or 11219 `-isystem' options. 11220 11221`-iplugindir=DIR' 11222 Set the directory to search for plugins that are passed by 11223 `-fplugin=NAME' instead of `-fplugin=PATH/NAME.so'. This option 11224 is not meant to be used by the user, but only passed by the driver. 11225 11226`-iquoteDIR' 11227 Add the directory DIR to the head of the list of directories to be 11228 searched for header files only for the case of `#include "FILE"'; 11229 they are not searched for `#include <FILE>', otherwise just like 11230 `-I'. 11231 11232`-LDIR' 11233 Add directory DIR to the list of directories to be searched for 11234 `-l'. 11235 11236`-BPREFIX' 11237 This option specifies where to find the executables, libraries, 11238 include files, and data files of the compiler itself. 11239 11240 The compiler driver program runs one or more of the subprograms 11241 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 11242 program it tries to run, both with and without `MACHINE/VERSION/' 11243 (*note Target Options::). 11244 11245 For each subprogram to be run, the compiler driver first tries the 11246 `-B' prefix, if any. If that name is not found, or if `-B' is not 11247 specified, the driver tries two standard prefixes, `/usr/lib/gcc/' 11248 and `/usr/local/lib/gcc/'. If neither of those results in a file 11249 name that is found, the unmodified program name is searched for 11250 using the directories specified in your `PATH' environment 11251 variable. 11252 11253 The compiler checks to see if the path provided by `-B' refers to 11254 a directory, and if necessary it adds a directory separator 11255 character at the end of the path. 11256 11257 `-B' prefixes that effectively specify directory names also apply 11258 to libraries in the linker, because the compiler translates these 11259 options into `-L' options for the linker. They also apply to 11260 include files in the preprocessor, because the compiler translates 11261 these options into `-isystem' options for the preprocessor. In 11262 this case, the compiler appends `include' to the prefix. 11263 11264 The runtime support file `libgcc.a' can also be searched for using 11265 the `-B' prefix, if needed. If it is not found there, the two 11266 standard prefixes above are tried, and that is all. The file is 11267 left out of the link if it is not found by those means. 11268 11269 Another way to specify a prefix much like the `-B' prefix is to use 11270 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 11271 Variables::. 11272 11273 As a special kludge, if the path provided by `-B' is 11274 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 11275 is replaced by `[dir/]include'. This is to help with 11276 boot-strapping the compiler. 11277 11278`-specs=FILE' 11279 Process FILE after the compiler reads in the standard `specs' 11280 file, in order to override the defaults which the `gcc' driver 11281 program uses when determining what switches to pass to `cc1', 11282 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 11283 specified on the command line, and they are processed in order, 11284 from left to right. 11285 11286`--sysroot=DIR' 11287 Use DIR as the logical root directory for headers and libraries. 11288 For example, if the compiler normally searches for headers in 11289 `/usr/include' and libraries in `/usr/lib', it instead searches 11290 `DIR/usr/include' and `DIR/usr/lib'. 11291 11292 If you use both this option and the `-isysroot' option, then the 11293 `--sysroot' option applies to libraries, but the `-isysroot' 11294 option applies to header files. 11295 11296 The GNU linker (beginning with version 2.16) has the necessary 11297 support for this option. If your linker does not support this 11298 option, the header file aspect of `--sysroot' still works, but the 11299 library aspect does not. 11300 11301`--no-sysroot-suffix' 11302 For some targets, a suffix is added to the root directory specified 11303 with `--sysroot', depending on the other options used, so that 11304 headers may for example be found in `DIR/SUFFIX/usr/include' 11305 instead of `DIR/usr/include'. This option disables the addition of 11306 such a suffix. 11307 11308`-I-' 11309 This option has been deprecated. Please use `-iquote' instead for 11310 `-I' directories before the `-I-' and remove the `-I-' option. 11311 Any directories you specify with `-I' options before the `-I-' 11312 option are searched only for the case of `#include "FILE"'; they 11313 are not searched for `#include <FILE>'. 11314 11315 If additional directories are specified with `-I' options after 11316 the `-I-' option, these directories are searched for all `#include' 11317 directives. (Ordinarily _all_ `-I' directories are used this way.) 11318 11319 In addition, the `-I-' option inhibits the use of the current 11320 directory (where the current input file came from) as the first 11321 search directory for `#include "FILE"'. There is no way to 11322 override this effect of `-I-'. With `-I.' you can specify 11323 searching the directory that is current when the compiler is 11324 invoked. That is not exactly the same as what the preprocessor 11325 does by default, but it is often satisfactory. 11326 11327 `-I-' does not inhibit the use of the standard system directories 11328 for header files. Thus, `-I-' and `-nostdinc' are independent. 11329 11330 11331File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 11332 113333.15 Specifying Subprocesses and the Switches to Pass to Them 11334============================================================= 11335 11336`gcc' is a driver program. It performs its job by invoking a sequence 11337of other programs to do the work of compiling, assembling and linking. 11338GCC interprets its command-line parameters and uses these to deduce 11339which programs it should invoke, and which command-line options it 11340ought to place on their command lines. This behavior is controlled by 11341"spec strings". In most cases there is one spec string for each 11342program that GCC can invoke, but a few programs have multiple spec 11343strings to control their behavior. The spec strings built into GCC can 11344be overridden by using the `-specs=' command-line switch to specify a 11345spec file. 11346 11347 "Spec files" are plaintext files that are used to construct spec 11348strings. They consist of a sequence of directives separated by blank 11349lines. The type of directive is determined by the first non-whitespace 11350character on the line, which can be one of the following: 11351 11352`%COMMAND' 11353 Issues a COMMAND to the spec file processor. The commands that can 11354 appear here are: 11355 11356 `%include <FILE>' 11357 Search for FILE and insert its text at the current point in 11358 the specs file. 11359 11360 `%include_noerr <FILE>' 11361 Just like `%include', but do not generate an error message if 11362 the include file cannot be found. 11363 11364 `%rename OLD_NAME NEW_NAME' 11365 Rename the spec string OLD_NAME to NEW_NAME. 11366 11367 11368`*[SPEC_NAME]:' 11369 This tells the compiler to create, override or delete the named 11370 spec string. All lines after this directive up to the next 11371 directive or blank line are considered to be the text for the spec 11372 string. If this results in an empty string then the spec is 11373 deleted. (Or, if the spec did not exist, then nothing happens.) 11374 Otherwise, if the spec does not currently exist a new spec is 11375 created. If the spec does exist then its contents are overridden 11376 by the text of this directive, unless the first character of that 11377 text is the `+' character, in which case the text is appended to 11378 the spec. 11379 11380`[SUFFIX]:' 11381 Creates a new `[SUFFIX] spec' pair. All lines after this directive 11382 and up to the next directive or blank line are considered to make 11383 up the spec string for the indicated suffix. When the compiler 11384 encounters an input file with the named suffix, it processes the 11385 spec string in order to work out how to compile that file. For 11386 example: 11387 11388 .ZZ: 11389 z-compile -input %i 11390 11391 This says that any input file whose name ends in `.ZZ' should be 11392 passed to the program `z-compile', which should be invoked with the 11393 command-line switch `-input' and with the result of performing the 11394 `%i' substitution. (See below.) 11395 11396 As an alternative to providing a spec string, the text following a 11397 suffix directive can be one of the following: 11398 11399 `@LANGUAGE' 11400 This says that the suffix is an alias for a known LANGUAGE. 11401 This is similar to using the `-x' command-line switch to GCC 11402 to specify a language explicitly. For example: 11403 11404 .ZZ: 11405 @c++ 11406 11407 Says that .ZZ files are, in fact, C++ source files. 11408 11409 `#NAME' 11410 This causes an error messages saying: 11411 11412 NAME compiler not installed on this system. 11413 11414 GCC already has an extensive list of suffixes built into it. This 11415 directive adds an entry to the end of the list of suffixes, but 11416 since the list is searched from the end backwards, it is 11417 effectively possible to override earlier entries using this 11418 technique. 11419 11420 11421 GCC has the following spec strings built into it. Spec files can 11422override these strings or create their own. Note that individual 11423targets can also add their own spec strings to this list. 11424 11425 asm Options to pass to the assembler 11426 asm_final Options to pass to the assembler post-processor 11427 cpp Options to pass to the C preprocessor 11428 cc1 Options to pass to the C compiler 11429 cc1plus Options to pass to the C++ compiler 11430 endfile Object files to include at the end of the link 11431 link Options to pass to the linker 11432 lib Libraries to include on the command line to the linker 11433 libgcc Decides which GCC support library to pass to the linker 11434 linker Sets the name of the linker 11435 predefines Defines to be passed to the C preprocessor 11436 signed_char Defines to pass to CPP to say whether `char' is signed 11437 by default 11438 startfile Object files to include at the start of the link 11439 11440 Here is a small example of a spec file: 11441 11442 %rename lib old_lib 11443 11444 *lib: 11445 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 11446 11447 This example renames the spec called `lib' to `old_lib' and then 11448overrides the previous definition of `lib' with a new one. The new 11449definition adds in some extra command-line options before including the 11450text of the old definition. 11451 11452 "Spec strings" are a list of command-line options to be passed to their 11453corresponding program. In addition, the spec strings can contain 11454`%'-prefixed sequences to substitute variable text or to conditionally 11455insert text into the command line. Using these constructs it is 11456possible to generate quite complex command lines. 11457 11458 Here is a table of all defined `%'-sequences for spec strings. Note 11459that spaces are not generated automatically around the results of 11460expanding these sequences. Therefore you can concatenate them together 11461or combine them with constant text in a single argument. 11462 11463`%%' 11464 Substitute one `%' into the program name or argument. 11465 11466`%i' 11467 Substitute the name of the input file being processed. 11468 11469`%b' 11470 Substitute the basename of the input file being processed. This 11471 is the substring up to (and not including) the last period and not 11472 including the directory. 11473 11474`%B' 11475 This is the same as `%b', but include the file suffix (text after 11476 the last period). 11477 11478`%d' 11479 Marks the argument containing or following the `%d' as a temporary 11480 file name, so that that file is deleted if GCC exits successfully. 11481 Unlike `%g', this contributes no text to the argument. 11482 11483`%gSUFFIX' 11484 Substitute a file name that has suffix SUFFIX and is chosen once 11485 per compilation, and mark the argument in the same way as `%d'. 11486 To reduce exposure to denial-of-service attacks, the file name is 11487 now chosen in a way that is hard to predict even when previously 11488 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 11489 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 11490 matches the regexp `[.A-Za-z]*' or the special string `%O', which 11491 is treated exactly as if `%O' had been preprocessed. Previously, 11492 `%g' was simply substituted with a file name chosen once per 11493 compilation, without regard to any appended suffix (which was 11494 therefore treated just like ordinary text), making such attacks 11495 more likely to succeed. 11496 11497`%uSUFFIX' 11498 Like `%g', but generates a new temporary file name each time it 11499 appears instead of once per compilation. 11500 11501`%USUFFIX' 11502 Substitutes the last file name generated with `%uSUFFIX', 11503 generating a new one if there is no such last file name. In the 11504 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 11505 they don't share the same suffix _space_, so `%g.s ... %U.s ... 11506 %g.s ... %U.s' involves the generation of two distinct file names, 11507 one for each `%g.s' and another for each `%U.s'. Previously, `%U' 11508 was simply substituted with a file name chosen for the previous 11509 `%u', without regard to any appended suffix. 11510 11511`%jSUFFIX' 11512 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 11513 writable, and if `-save-temps' is not used; otherwise, substitute 11514 the name of a temporary file, just like `%u'. This temporary file 11515 is not meant for communication between processes, but rather as a 11516 junk disposal mechanism. 11517 11518`%|SUFFIX' 11519`%mSUFFIX' 11520 Like `%g', except if `-pipe' is in effect. In that case `%|' 11521 substitutes a single dash and `%m' substitutes nothing at all. 11522 These are the two most common ways to instruct a program that it 11523 should read from standard input or write to standard output. If 11524 you need something more elaborate you can use an `%{pipe:`X'}' 11525 construct: see for example `f/lang-specs.h'. 11526 11527`%.SUFFIX' 11528 Substitutes .SUFFIX for the suffixes of a matched switch's args 11529 when it is subsequently output with `%*'. SUFFIX is terminated by 11530 the next space or %. 11531 11532`%w' 11533 Marks the argument containing or following the `%w' as the 11534 designated output file of this compilation. This puts the argument 11535 into the sequence of arguments that `%o' substitutes. 11536 11537`%o' 11538 Substitutes the names of all the output files, with spaces 11539 automatically placed around them. You should write spaces around 11540 the `%o' as well or the results are undefined. `%o' is for use in 11541 the specs for running the linker. Input files whose names have no 11542 recognized suffix are not compiled at all, but they are included 11543 among the output files, so they are linked. 11544 11545`%O' 11546 Substitutes the suffix for object files. Note that this is 11547 handled specially when it immediately follows `%g, %u, or %U', 11548 because of the need for those to form complete file names. The 11549 handling is such that `%O' is treated exactly as if it had already 11550 been substituted, except that `%g, %u, and %U' do not currently 11551 support additional SUFFIX characters following `%O' as they do 11552 following, for example, `.o'. 11553 11554`%p' 11555 Substitutes the standard macro predefinitions for the current 11556 target machine. Use this when running `cpp'. 11557 11558`%P' 11559 Like `%p', but puts `__' before and after the name of each 11560 predefined macro, except for macros that start with `__' or with 11561 `_L', where L is an uppercase letter. This is for ISO C. 11562 11563`%I' 11564 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 11565 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made 11566 from `COMPILER_PATH' and `-B' options) and `-imultilib' as 11567 necessary. 11568 11569`%s' 11570 Current argument is the name of a library or startup file of some 11571 sort. Search for that file in a standard list of directories and 11572 substitute the full name found. The current working directory is 11573 included in the list of directories scanned. 11574 11575`%T' 11576 Current argument is the name of a linker script. Search for that 11577 file in the current list of directories to scan for libraries. If 11578 the file is located insert a `--script' option into the command 11579 line followed by the full path name found. If the file is not 11580 found then generate an error message. Note: the current working 11581 directory is not searched. 11582 11583`%eSTR' 11584 Print STR as an error message. STR is terminated by a newline. 11585 Use this when inconsistent options are detected. 11586 11587`%(NAME)' 11588 Substitute the contents of spec string NAME at this point. 11589 11590`%x{OPTION}' 11591 Accumulate an option for `%X'. 11592 11593`%X' 11594 Output the accumulated linker options specified by `-Wl' or a `%x' 11595 spec string. 11596 11597`%Y' 11598 Output the accumulated assembler options specified by `-Wa'. 11599 11600`%Z' 11601 Output the accumulated preprocessor options specified by `-Wp'. 11602 11603`%a' 11604 Process the `asm' spec. This is used to compute the switches to 11605 be passed to the assembler. 11606 11607`%A' 11608 Process the `asm_final' spec. This is a spec string for passing 11609 switches to an assembler post-processor, if such a program is 11610 needed. 11611 11612`%l' 11613 Process the `link' spec. This is the spec for computing the 11614 command line passed to the linker. Typically it makes use of the 11615 `%L %G %S %D and %E' sequences. 11616 11617`%D' 11618 Dump out a `-L' option for each directory that GCC believes might 11619 contain startup files. If the target supports multilibs then the 11620 current multilib directory is prepended to each of these paths. 11621 11622`%L' 11623 Process the `lib' spec. This is a spec string for deciding which 11624 libraries are included on the command line to the linker. 11625 11626`%G' 11627 Process the `libgcc' spec. This is a spec string for deciding 11628 which GCC support library is included on the command line to the 11629 linker. 11630 11631`%S' 11632 Process the `startfile' spec. This is a spec for deciding which 11633 object files are the first ones passed to the linker. Typically 11634 this might be a file named `crt0.o'. 11635 11636`%E' 11637 Process the `endfile' spec. This is a spec string that specifies 11638 the last object files that are passed to the linker. 11639 11640`%C' 11641 Process the `cpp' spec. This is used to construct the arguments 11642 to be passed to the C preprocessor. 11643 11644`%1' 11645 Process the `cc1' spec. This is used to construct the options to 11646 be passed to the actual C compiler (`cc1'). 11647 11648`%2' 11649 Process the `cc1plus' spec. This is used to construct the options 11650 to be passed to the actual C++ compiler (`cc1plus'). 11651 11652`%*' 11653 Substitute the variable part of a matched option. See below. 11654 Note that each comma in the substituted string is replaced by a 11655 single space. 11656 11657`%<`S'' 11658 Remove all occurrences of `-S' from the command line. Note--this 11659 command is position dependent. `%' commands in the spec string 11660 before this one see `-S', `%' commands in the spec string after 11661 this one do not. 11662 11663`%:FUNCTION(ARGS)' 11664 Call the named function FUNCTION, passing it ARGS. ARGS is first 11665 processed as a nested spec string, then split into an argument 11666 vector in the usual fashion. The function returns a string which 11667 is processed as if it had appeared literally as part of the 11668 current spec. 11669 11670 The following built-in spec functions are provided: 11671 11672 ``getenv'' 11673 The `getenv' spec function takes two arguments: an environment 11674 variable name and a string. If the environment variable is 11675 not defined, a fatal error is issued. Otherwise, the return 11676 value is the value of the environment variable concatenated 11677 with the string. For example, if `TOPDIR' is defined as 11678 `/path/to/top', then: 11679 11680 %:getenv(TOPDIR /include) 11681 11682 expands to `/path/to/top/include'. 11683 11684 ``if-exists'' 11685 The `if-exists' spec function takes one argument, an absolute 11686 pathname to a file. If the file exists, `if-exists' returns 11687 the pathname. Here is a small example of its usage: 11688 11689 *startfile: 11690 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 11691 11692 ``if-exists-else'' 11693 The `if-exists-else' spec function is similar to the 11694 `if-exists' spec function, except that it takes two 11695 arguments. The first argument is an absolute pathname to a 11696 file. If the file exists, `if-exists-else' returns the 11697 pathname. If it does not exist, it returns the second 11698 argument. This way, `if-exists-else' can be used to select 11699 one file or another, based on the existence of the first. 11700 Here is a small example of its usage: 11701 11702 *startfile: 11703 crt0%O%s %:if-exists(crti%O%s) \ 11704 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 11705 11706 ``replace-outfile'' 11707 The `replace-outfile' spec function takes two arguments. It 11708 looks for the first argument in the outfiles array and 11709 replaces it with the second argument. Here is a small 11710 example of its usage: 11711 11712 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 11713 11714 ``remove-outfile'' 11715 The `remove-outfile' spec function takes one argument. It 11716 looks for the first argument in the outfiles array and 11717 removes it. Here is a small example its usage: 11718 11719 %:remove-outfile(-lm) 11720 11721 ``pass-through-libs'' 11722 The `pass-through-libs' spec function takes any number of 11723 arguments. It finds any `-l' options and any non-options 11724 ending in `.a' (which it assumes are the names of linker 11725 input library archive files) and returns a result containing 11726 all the found arguments each prepended by 11727 `-plugin-opt=-pass-through=' and joined by spaces. This list 11728 is intended to be passed to the LTO linker plugin. 11729 11730 %:pass-through-libs(%G %L %G) 11731 11732 ``print-asm-header'' 11733 The `print-asm-header' function takes no arguments and simply 11734 prints a banner like: 11735 11736 Assembler options 11737 ================= 11738 11739 Use "-Wa,OPTION" to pass "OPTION" to the assembler. 11740 11741 It is used to separate compiler options from assembler options 11742 in the `--target-help' output. 11743 11744`%{`S'}' 11745 Substitutes the `-S' switch, if that switch is given to GCC. If 11746 that switch is not specified, this substitutes nothing. Note that 11747 the leading dash is omitted when specifying this option, and it is 11748 automatically inserted if the substitution is performed. Thus the 11749 spec string `%{foo}' matches the command-line option `-foo' and 11750 outputs the command-line option `-foo'. 11751 11752`%W{`S'}' 11753 Like %{`S'} but mark last argument supplied within as a file to be 11754 deleted on failure. 11755 11756`%{`S'*}' 11757 Substitutes all the switches specified to GCC whose names start 11758 with `-S', but which also take an argument. This is used for 11759 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 11760 being one switch whose name starts with `o'. %{o*} substitutes 11761 this text, including the space. Thus two arguments are generated. 11762 11763`%{`S'*&`T'*}' 11764 Like %{`S'*}, but preserve order of `S' and `T' options (the order 11765 of `S' and `T' in the spec is not significant). There can be any 11766 number of ampersand-separated variables; for each the wild card is 11767 optional. Useful for CPP as `%{D*&U*&A*}'. 11768 11769`%{`S':`X'}' 11770 Substitutes `X', if the `-S' switch is given to GCC. 11771 11772`%{!`S':`X'}' 11773 Substitutes `X', if the `-S' switch is _not_ given to GCC. 11774 11775`%{`S'*:`X'}' 11776 Substitutes `X' if one or more switches whose names start with 11777 `-S' are specified to GCC. Normally `X' is substituted only once, 11778 no matter how many such switches appeared. However, if `%*' 11779 appears somewhere in `X', then `X' is substituted once for each 11780 matching switch, with the `%*' replaced by the part of that switch 11781 matching the `*'. 11782 11783 If `%*' appears as the last part of a spec sequence then a space 11784 is added after the end of the last substitution. If there is more 11785 text in the sequence, however, then a space is not generated. This 11786 allows the `%*' substitution to be used as part of a larger 11787 string. For example, a spec string like this: 11788 11789 %{mcu=*:--script=%*/memory.ld} 11790 11791 when matching an option like `-mcu=newchip' produces: 11792 11793 --script=newchip/memory.ld 11794 11795`%{.`S':`X'}' 11796 Substitutes `X', if processing a file with suffix `S'. 11797 11798`%{!.`S':`X'}' 11799 Substitutes `X', if _not_ processing a file with suffix `S'. 11800 11801`%{,`S':`X'}' 11802 Substitutes `X', if processing a file for language `S'. 11803 11804`%{!,`S':`X'}' 11805 Substitutes `X', if not processing a file for language `S'. 11806 11807`%{`S'|`P':`X'}' 11808 Substitutes `X' if either `-S' or `-P' is given to GCC. This may 11809 be combined with `!', `.', `,', and `*' sequences as well, 11810 although they have a stronger binding than the `|'. If `%*' 11811 appears in `X', all of the alternatives must be starred, and only 11812 the first matching alternative is substituted. 11813 11814 For example, a spec string like this: 11815 11816 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 11817 11818 outputs the following command-line options from the following input 11819 command-line options: 11820 11821 fred.c -foo -baz 11822 jim.d -bar -boggle 11823 -d fred.c -foo -baz -boggle 11824 -d jim.d -bar -baz -boggle 11825 11826`%{S:X; T:Y; :D}' 11827 If `S' is given to GCC, substitutes `X'; else if `T' is given to 11828 GCC, substitutes `Y'; else substitutes `D'. There can be as many 11829 clauses as you need. This may be combined with `.', `,', `!', 11830 `|', and `*' as needed. 11831 11832 11833 The conditional text `X' in a %{`S':`X'} or similar construct may 11834contain other nested `%' constructs or spaces, or even newlines. They 11835are processed as usual, as described above. Trailing white space in 11836`X' is ignored. White space may also appear anywhere on the left side 11837of the colon in these constructs, except between `.' or `*' and the 11838corresponding word. 11839 11840 The `-O', `-f', `-m', and `-W' switches are handled specifically in 11841these constructs. If another value of `-O' or the negated form of a 11842`-f', `-m', or `-W' switch is found later in the command line, the 11843earlier switch value is ignored, except with {`S'*} where `S' is just 11844one letter, which passes all matching options. 11845 11846 The character `|' at the beginning of the predicate text is used to 11847indicate that a command should be piped to the following command, but 11848only if `-pipe' is specified. 11849 11850 It is built into GCC which switches take arguments and which do not. 11851(You might think it would be useful to generalize this to allow each 11852compiler's spec to say which switches take arguments. But this cannot 11853be done in a consistent fashion. GCC cannot even decide which input 11854files have been specified without knowing which switches take arguments, 11855and it must know which input files to compile in order to tell which 11856compilers to run). 11857 11858 GCC also knows implicitly that arguments starting in `-l' are to be 11859treated as compiler output files, and passed to the linker in their 11860proper position among the other output files. 11861 11862 11863File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 11864 118653.16 Specifying Target Machine and Compiler Version 11866=================================================== 11867 11868The usual way to run GCC is to run the executable called `gcc', or 11869`MACHINE-gcc' when cross-compiling, or `MACHINE-gcc-VERSION' to run a 11870version other than the one that was installed last. 11871 11872 11873File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 11874 118753.17 Hardware Models and Configurations 11876======================================= 11877 11878Each target machine types can have its own special options, starting 11879with `-m', to choose among various hardware models or 11880configurations--for example, 68010 vs 68020, floating coprocessor or 11881none. A single installed version of the compiler can compile for any 11882model or configuration, according to the options specified. 11883 11884 Some configurations of the compiler also support additional special 11885options, usually for compatibility with other compilers on the same 11886platform. 11887 11888* Menu: 11889 11890* AArch64 Options:: 11891* Adapteva Epiphany Options:: 11892* ARC Options:: 11893* ARM Options:: 11894* AVR Options:: 11895* Blackfin Options:: 11896* C6X Options:: 11897* CRIS Options:: 11898* CR16 Options:: 11899* Darwin Options:: 11900* DEC Alpha Options:: 11901* FR30 Options:: 11902* FRV Options:: 11903* GNU/Linux Options:: 11904* H8/300 Options:: 11905* HPPA Options:: 11906* IA-64 Options:: 11907* LM32 Options:: 11908* M32C Options:: 11909* M32R/D Options:: 11910* M680x0 Options:: 11911* MCore Options:: 11912* MeP Options:: 11913* MicroBlaze Options:: 11914* MIPS Options:: 11915* MMIX Options:: 11916* MN10300 Options:: 11917* Moxie Options:: 11918* MSP430 Options:: 11919* NDS32 Options:: 11920* Nios II Options:: 11921* Nvidia PTX Options:: 11922* PDP-11 Options:: 11923* picoChip Options:: 11924* PowerPC Options:: 11925* RL78 Options:: 11926* RS/6000 and PowerPC Options:: 11927* RX Options:: 11928* S/390 and zSeries Options:: 11929* Score Options:: 11930* SH Options:: 11931* Solaris 2 Options:: 11932* SPARC Options:: 11933* SPU Options:: 11934* System V Options:: 11935* TILE-Gx Options:: 11936* TILEPro Options:: 11937* V850 Options:: 11938* VAX Options:: 11939* Visium Options:: 11940* VMS Options:: 11941* VxWorks Options:: 11942* x86 Options:: 11943* x86 Windows Options:: 11944* Xstormy16 Options:: 11945* Xtensa Options:: 11946* zSeries Options:: 11947 11948 11949File: gcc.info, Node: AArch64 Options, Next: Adapteva Epiphany Options, Up: Submodel Options 11950 119513.17.1 AArch64 Options 11952---------------------- 11953 11954These options are defined for AArch64 implementations: 11955 11956`-mabi=NAME' 11957 Generate code for the specified data model. Permissible values 11958 are `ilp32' for SysV-like data model where int, long int and 11959 pointer are 32-bit, and `lp64' for SysV-like data model where int 11960 is 32-bit, but long int and pointer are 64-bit. 11961 11962 The default depends on the specific target configuration. Note 11963 that the LP64 and ILP32 ABIs are not link-compatible; you must 11964 compile your entire program with the same ABI, and link with a 11965 compatible set of libraries. 11966 11967`-mbig-endian' 11968 Generate big-endian code. This is the default when GCC is 11969 configured for an `aarch64_be-*-*' target. 11970 11971`-mgeneral-regs-only' 11972 Generate code which uses only the general registers. 11973 11974`-mlittle-endian' 11975 Generate little-endian code. This is the default when GCC is 11976 configured for an `aarch64-*-*' but not an `aarch64_be-*-*' target. 11977 11978`-mcmodel=tiny' 11979 Generate code for the tiny code model. The program and its 11980 statically defined symbols must be within 1GB of each other. 11981 Pointers are 64 bits. Programs can be statically or dynamically 11982 linked. This model is not fully implemented and mostly treated as 11983 `small'. 11984 11985`-mcmodel=small' 11986 Generate code for the small code model. The program and its 11987 statically defined symbols must be within 4GB of each other. 11988 Pointers are 64 bits. Programs can be statically or dynamically 11989 linked. This is the default code model. 11990 11991`-mcmodel=large' 11992 Generate code for the large code model. This makes no assumptions 11993 about addresses and sizes of sections. Pointers are 64 bits. 11994 Programs can be statically linked only. 11995 11996`-mstrict-align' 11997 Do not assume that unaligned memory references are handled by the 11998 system. 11999 12000`-momit-leaf-frame-pointer' 12001`-mno-omit-leaf-frame-pointer' 12002 Omit or keep the frame pointer in leaf functions. The former 12003 behaviour is the default. 12004 12005`-mtls-dialect=desc' 12006 Use TLS descriptors as the thread-local storage mechanism for 12007 dynamic accesses of TLS variables. This is the default. 12008 12009`-mtls-dialect=traditional' 12010 Use traditional TLS as the thread-local storage mechanism for 12011 dynamic accesses of TLS variables. 12012 12013`-mfix-cortex-a53-835769' 12014`-mno-fix-cortex-a53-835769' 12015 Enable or disable the workaround for the ARM Cortex-A53 erratum 12016 number 835769. This involves inserting a NOP instruction between 12017 memory instructions and 64-bit integer multiply-accumulate 12018 instructions. 12019 12020`-mfix-cortex-a53-843419' 12021`-mno-fix-cortex-a53-843419' 12022 Enable or disable the workaround for the ARM Cortex-A53 erratum 12023 number 843419. This erratum workaround is made at link time and 12024 this will only pass the corresponding flag to the linker. 12025 12026`-march=NAME' 12027 Specify the name of the target architecture, optionally suffixed 12028 by one or more feature modifiers. This option has the form 12029 `-march=ARCH{+[no]FEATURE}*', where the only permissible value for 12030 ARCH is `armv8-a'. The permissible values for FEATURE are 12031 documented in the sub-section below. 12032 12033 Where conflicting feature modifiers are specified, the right-most 12034 feature is used. 12035 12036 GCC uses this name to determine what kind of instructions it can 12037 emit when generating assembly code. 12038 12039 Where `-march' is specified without either of `-mtune' or `-mcpu' 12040 also being specified, the code is tuned to perform well across a 12041 range of target processors implementing the target architecture. 12042 12043`-mtune=NAME' 12044 Specify the name of the target processor for which GCC should tune 12045 the performance of the code. Permissible values for this option 12046 are: `generic', `cortex-a53', `cortex-a57', `cortex-a72', 12047 `exynos-m1', `thunderx', `xgene1'. 12048 12049 Additionally, this option can specify that GCC should tune the 12050 performance of the code for a big.LITTLE system. Permissible 12051 values for this option are: `cortex-a57.cortex-a53', 12052 `cortex-a72.cortex-a53'. 12053 12054 Where none of `-mtune=', `-mcpu=' or `-march=' are specified, the 12055 code is tuned to perform well across a range of target processors. 12056 12057 This option cannot be suffixed by feature modifiers. 12058 12059`-mcpu=NAME' 12060 Specify the name of the target processor, optionally suffixed by 12061 one or more feature modifiers. This option has the form 12062 `-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU 12063 are the same as those available for `-mtune'. 12064 12065 The permissible values for FEATURE are documented in the 12066 sub-section below. 12067 12068 Where conflicting feature modifiers are specified, the right-most 12069 feature is used. 12070 12071 GCC uses this name to determine what kind of instructions it can 12072 emit when generating assembly code (as if by `-march') and to 12073 determine the target processor for which to tune for performance 12074 (as if by `-mtune'). Where this option is used in conjunction 12075 with `-march' or `-mtune', those options take precedence over the 12076 appropriate part of this option. 12077 120783.17.1.1 `-march' and `-mcpu' Feature Modifiers 12079............................................... 12080 12081Feature modifiers used with `-march' and `-mcpu' can be one the 12082following: 12083 12084`crc' 12085 Enable CRC extension. 12086 12087`crypto' 12088 Enable Crypto extension. This implies Advanced SIMD is enabled. 12089 12090`fp' 12091 Enable floating-point instructions. 12092 12093`simd' 12094 Enable Advanced SIMD instructions. This implies floating-point 12095 instructions are enabled. This is the default for all current 12096 possible values for options `-march' and `-mcpu='. 12097 12098 12099File: gcc.info, Node: Adapteva Epiphany Options, Next: ARC Options, Prev: AArch64 Options, Up: Submodel Options 12100 121013.17.2 Adapteva Epiphany Options 12102-------------------------------- 12103 12104These `-m' options are defined for Adapteva Epiphany: 12105 12106`-mhalf-reg-file' 12107 Don't allocate any register in the range `r32'...`r63'. That 12108 allows code to run on hardware variants that lack these registers. 12109 12110`-mprefer-short-insn-regs' 12111 Preferrentially allocate registers that allow short instruction 12112 generation. This can result in increased instruction count, so 12113 this may either reduce or increase overall code size. 12114 12115`-mbranch-cost=NUM' 12116 Set the cost of branches to roughly NUM "simple" instructions. 12117 This cost is only a heuristic and is not guaranteed to produce 12118 consistent results across releases. 12119 12120`-mcmove' 12121 Enable the generation of conditional moves. 12122 12123`-mnops=NUM' 12124 Emit NUM NOPs before every other generated instruction. 12125 12126`-mno-soft-cmpsf' 12127 For single-precision floating-point comparisons, emit an `fsub' 12128 instruction and test the flags. This is faster than a software 12129 comparison, but can get incorrect results in the presence of NaNs, 12130 or when two different small numbers are compared such that their 12131 difference is calculated as zero. The default is `-msoft-cmpsf', 12132 which uses slower, but IEEE-compliant, software comparisons. 12133 12134`-mstack-offset=NUM' 12135 Set the offset between the top of the stack and the stack pointer. 12136 E.g., a value of 8 means that the eight bytes in the range 12137 `sp+0...sp+7' can be used by leaf functions without stack 12138 allocation. Values other than `8' or `16' are untested and 12139 unlikely to work. Note also that this option changes the ABI; 12140 compiling a program with a different stack offset than the 12141 libraries have been compiled with generally does not work. This 12142 option can be useful if you want to evaluate if a different stack 12143 offset would give you better code, but to actually use a different 12144 stack offset to build working programs, it is recommended to 12145 configure the toolchain with the appropriate 12146 `--with-stack-offset=NUM' option. 12147 12148`-mno-round-nearest' 12149 Make the scheduler assume that the rounding mode has been set to 12150 truncating. The default is `-mround-nearest'. 12151 12152`-mlong-calls' 12153 If not otherwise specified by an attribute, assume all calls might 12154 be beyond the offset range of the `b' / `bl' instructions, and 12155 therefore load the function address into a register before 12156 performing a (otherwise direct) call. This is the default. 12157 12158`-mshort-calls' 12159 If not otherwise specified by an attribute, assume all direct 12160 calls are in the range of the `b' / `bl' instructions, so use 12161 these instructions for direct calls. The default is 12162 `-mlong-calls'. 12163 12164`-msmall16' 12165 Assume addresses can be loaded as 16-bit unsigned values. This 12166 does not apply to function addresses for which `-mlong-calls' 12167 semantics are in effect. 12168 12169`-mfp-mode=MODE' 12170 Set the prevailing mode of the floating-point unit. This 12171 determines the floating-point mode that is provided and expected 12172 at function call and return time. Making this mode match the mode 12173 you predominantly need at function start can make your programs 12174 smaller and faster by avoiding unnecessary mode switches. 12175 12176 MODE can be set to one the following values: 12177 12178 `caller' 12179 Any mode at function entry is valid, and retained or restored 12180 when the function returns, and when it calls other functions. 12181 This mode is useful for compiling libraries or other 12182 compilation units you might want to incorporate into 12183 different programs with different prevailing FPU modes, and 12184 the convenience of being able to use a single object file 12185 outweighs the size and speed overhead for any extra mode 12186 switching that might be needed, compared with what would be 12187 needed with a more specific choice of prevailing FPU mode. 12188 12189 `truncate' 12190 This is the mode used for floating-point calculations with 12191 truncating (i.e. round towards zero) rounding mode. That 12192 includes conversion from floating point to integer. 12193 12194 `round-nearest' 12195 This is the mode used for floating-point calculations with 12196 round-to-nearest-or-even rounding mode. 12197 12198 `int' 12199 This is the mode used to perform integer calculations in the 12200 FPU, e.g. integer multiply, or integer 12201 multiply-and-accumulate. 12202 12203 The default is `-mfp-mode=caller' 12204 12205`-mnosplit-lohi' 12206`-mno-postinc' 12207`-mno-postmodify' 12208 Code generation tweaks that disable, respectively, splitting of 12209 32-bit loads, generation of post-increment addresses, and 12210 generation of post-modify addresses. The defaults are 12211 `msplit-lohi', `-mpost-inc', and `-mpost-modify'. 12212 12213`-mnovect-double' 12214 Change the preferred SIMD mode to SImode. The default is 12215 `-mvect-double', which uses DImode as preferred SIMD mode. 12216 12217`-max-vect-align=NUM' 12218 The maximum alignment for SIMD vector mode types. NUM may be 4 or 12219 8. The default is 8. Note that this is an ABI change, even 12220 though many library function interfaces are unaffected if they 12221 don't use SIMD vector modes in places that affect size and/or 12222 alignment of relevant types. 12223 12224`-msplit-vecmove-early' 12225 Split vector moves into single word moves before reload. In 12226 theory this can give better register allocation, but so far the 12227 reverse seems to be generally the case. 12228 12229`-m1reg-REG' 12230 Specify a register to hold the constant -1, which makes loading 12231 small negative constants and certain bitmasks faster. Allowable 12232 values for REG are `r43' and `r63', which specify use of that 12233 register as a fixed register, and `none', which means that no 12234 register is used for this purpose. The default is `-m1reg-none'. 12235 12236 12237 12238File: gcc.info, Node: ARC Options, Next: ARM Options, Prev: Adapteva Epiphany Options, Up: Submodel Options 12239 122403.17.3 ARC Options 12241------------------ 12242 12243The following options control the architecture variant for which code 12244is being compiled: 12245 12246`-mbarrel-shifter' 12247 Generate instructions supported by barrel shifter. This is the 12248 default unless `-mcpu=ARC601' is in effect. 12249 12250`-mcpu=CPU' 12251 Set architecture type, register usage, and instruction scheduling 12252 parameters for CPU. There are also shortcut alias options 12253 available for backward compatibility and convenience. Supported 12254 values for CPU are 12255 12256 `ARC600' 12257 Compile for ARC600. Aliases: `-mA6', `-mARC600'. 12258 12259 `ARC601' 12260 Compile for ARC601. Alias: `-mARC601'. 12261 12262 `ARC700' 12263 Compile for ARC700. Aliases: `-mA7', `-mARC700'. This is 12264 the default when configured with `--with-cpu=arc700'. 12265 12266`-mdpfp' 12267`-mdpfp-compact' 12268 FPX: Generate Double Precision FPX instructions, tuned for the 12269 compact implementation. 12270 12271`-mdpfp-fast' 12272 FPX: Generate Double Precision FPX instructions, tuned for the fast 12273 implementation. 12274 12275`-mno-dpfp-lrsr' 12276 Disable LR and SR instructions from using FPX extension aux 12277 registers. 12278 12279`-mea' 12280 Generate Extended arithmetic instructions. Currently only 12281 `divaw', `adds', `subs', and `sat16' are supported. This is 12282 always enabled for `-mcpu=ARC700'. 12283 12284`-mno-mpy' 12285 Do not generate mpy instructions for ARC700. 12286 12287`-mmul32x16' 12288 Generate 32x16 bit multiply and mac instructions. 12289 12290`-mmul64' 12291 Generate mul64 and mulu64 instructions. Only valid for 12292 `-mcpu=ARC600'. 12293 12294`-mnorm' 12295 Generate norm instruction. This is the default if `-mcpu=ARC700' 12296 is in effect. 12297 12298`-mspfp' 12299`-mspfp-compact' 12300 FPX: Generate Single Precision FPX instructions, tuned for the 12301 compact implementation. 12302 12303`-mspfp-fast' 12304 FPX: Generate Single Precision FPX instructions, tuned for the fast 12305 implementation. 12306 12307`-msimd' 12308 Enable generation of ARC SIMD instructions via target-specific 12309 builtins. Only valid for `-mcpu=ARC700'. 12310 12311`-msoft-float' 12312 This option ignored; it is provided for compatibility purposes 12313 only. Software floating point code is emitted by default, and 12314 this default can overridden by FPX options; `mspfp', 12315 `mspfp-compact', or `mspfp-fast' for single precision, and `mdpfp', 12316 `mdpfp-compact', or `mdpfp-fast' for double precision. 12317 12318`-mswap' 12319 Generate swap instructions. 12320 12321 12322 The following options are passed through to the assembler, and also 12323define preprocessor macro symbols. 12324 12325`-mdsp-packa' 12326 Passed down to the assembler to enable the DSP Pack A extensions. 12327 Also sets the preprocessor symbol `__Xdsp_packa'. 12328 12329`-mdvbf' 12330 Passed down to the assembler to enable the dual viterbi butterfly 12331 extension. Also sets the preprocessor symbol `__Xdvbf'. 12332 12333`-mlock' 12334 Passed down to the assembler to enable the Locked Load/Store 12335 Conditional extension. Also sets the preprocessor symbol 12336 `__Xlock'. 12337 12338`-mmac-d16' 12339 Passed down to the assembler. Also sets the preprocessor symbol 12340 `__Xxmac_d16'. 12341 12342`-mmac-24' 12343 Passed down to the assembler. Also sets the preprocessor symbol 12344 `__Xxmac_24'. 12345 12346`-mrtsc' 12347 Passed down to the assembler to enable the 64-bit Time-Stamp 12348 Counter extension instruction. Also sets the preprocessor symbol 12349 `__Xrtsc'. 12350 12351`-mswape' 12352 Passed down to the assembler to enable the swap byte ordering 12353 extension instruction. Also sets the preprocessor symbol 12354 `__Xswape'. 12355 12356`-mtelephony' 12357 Passed down to the assembler to enable dual and single operand 12358 instructions for telephony. Also sets the preprocessor symbol 12359 `__Xtelephony'. 12360 12361`-mxy' 12362 Passed down to the assembler to enable the XY Memory extension. 12363 Also sets the preprocessor symbol `__Xxy'. 12364 12365 12366 The following options control how the assembly code is annotated: 12367 12368`-misize' 12369 Annotate assembler instructions with estimated addresses. 12370 12371`-mannotate-align' 12372 Explain what alignment considerations lead to the decision to make 12373 an instruction short or long. 12374 12375 12376 The following options are passed through to the linker: 12377 12378`-marclinux' 12379 Passed through to the linker, to specify use of the `arclinux' 12380 emulation. This option is enabled by default in tool chains built 12381 for `arc-linux-uclibc' and `arceb-linux-uclibc' targets when 12382 profiling is not requested. 12383 12384`-marclinux_prof' 12385 Passed through to the linker, to specify use of the 12386 `arclinux_prof' emulation. This option is enabled by default in 12387 tool chains built for `arc-linux-uclibc' and `arceb-linux-uclibc' 12388 targets when profiling is requested. 12389 12390 12391 The following options control the semantics of generated code: 12392 12393`-mepilogue-cfi' 12394 Enable generation of call frame information for epilogues. 12395 12396`-mno-epilogue-cfi' 12397 Disable generation of call frame information for epilogues. 12398 12399`-mlong-calls' 12400 Generate call insns as register indirect calls, thus providing 12401 access to the full 32-bit address range. 12402 12403`-mmedium-calls' 12404 Don't use less than 25 bit addressing range for calls, which is the 12405 offset available for an unconditional branch-and-link instruction. 12406 Conditional execution of function calls is suppressed, to allow 12407 use of the 25-bit range, rather than the 21-bit range with 12408 conditional branch-and-link. This is the default for tool chains 12409 built for `arc-linux-uclibc' and `arceb-linux-uclibc' targets. 12410 12411`-mno-sdata' 12412 Do not generate sdata references. This is the default for tool 12413 chains built for `arc-linux-uclibc' and `arceb-linux-uclibc' 12414 targets. 12415 12416`-mucb-mcount' 12417 Instrument with mcount calls as used in UCB code. I.e. do the 12418 counting in the callee, not the caller. By default ARC 12419 instrumentation counts in the caller. 12420 12421`-mvolatile-cache' 12422 Use ordinarily cached memory accesses for volatile references. 12423 This is the default. 12424 12425`-mno-volatile-cache' 12426 Enable cache bypass for volatile references. 12427 12428 12429 The following options fine tune code generation: 12430`-malign-call' 12431 Do alignment optimizations for call instructions. 12432 12433`-mauto-modify-reg' 12434 Enable the use of pre/post modify with register displacement. 12435 12436`-mbbit-peephole' 12437 Enable bbit peephole2. 12438 12439`-mno-brcc' 12440 This option disables a target-specific pass in `arc_reorg' to 12441 generate `BRcc' instructions. It has no effect on `BRcc' 12442 generation driven by the combiner pass. 12443 12444`-mcase-vector-pcrel' 12445 Use pc-relative switch case tables - this enables case table 12446 shortening. This is the default for `-Os'. 12447 12448`-mcompact-casesi' 12449 Enable compact casesi pattern. This is the default for `-Os'. 12450 12451`-mno-cond-exec' 12452 Disable ARCompact specific pass to generate conditional execution 12453 instructions. Due to delay slot scheduling and interactions 12454 between operand numbers, literal sizes, instruction lengths, and 12455 the support for conditional execution, the target-independent pass 12456 to generate conditional execution is often lacking, so the ARC 12457 port has kept a special pass around that tries to find more 12458 conditional execution generating opportunities after register 12459 allocation, branch shortening, and delay slot scheduling have been 12460 done. This pass generally, but not always, improves performance 12461 and code size, at the cost of extra compilation time, which is why 12462 there is an option to switch it off. If you have a problem with 12463 call instructions exceeding their allowable offset range because 12464 they are conditionalized, you should consider using 12465 `-mmedium-calls' instead. 12466 12467`-mearly-cbranchsi' 12468 Enable pre-reload use of the cbranchsi pattern. 12469 12470`-mexpand-adddi' 12471 Expand `adddi3' and `subdi3' at rtl generation time into `add.f', 12472 `adc' etc. 12473 12474`-mindexed-loads' 12475 Enable the use of indexed loads. This can be problematic because 12476 some optimizers then assume that indexed stores exist, which is not 12477 the case. 12478 12479`-mlra' 12480 Enable Local Register Allocation. This is still experimental for 12481 ARC, so by default the compiler uses standard reload (i.e. 12482 `-mno-lra'). 12483 12484`-mlra-priority-none' 12485 Don't indicate any priority for target registers. 12486 12487`-mlra-priority-compact' 12488 Indicate target register priority for r0..r3 / r12..r15. 12489 12490`-mlra-priority-noncompact' 12491 Reduce target regsiter priority for r0..r3 / r12..r15. 12492 12493`-mno-millicode' 12494 When optimizing for size (using `-Os'), prologues and epilogues 12495 that have to save or restore a large number of registers are often 12496 shortened by using call to a special function in libgcc; this is 12497 referred to as a _millicode_ call. As these calls can pose 12498 performance issues, and/or cause linking issues when linking in a 12499 nonstandard way, this option is provided to turn off millicode call 12500 generation. 12501 12502`-mmixed-code' 12503 Tweak register allocation to help 16-bit instruction generation. 12504 This generally has the effect of decreasing the average 12505 instruction size while increasing the instruction count. 12506 12507`-mq-class' 12508 Enable 'q' instruction alternatives. This is the default for 12509 `-Os'. 12510 12511`-mRcq' 12512 Enable Rcq constraint handling - most short code generation 12513 depends on this. This is the default. 12514 12515`-mRcw' 12516 Enable Rcw constraint handling - ccfsm condexec mostly depends on 12517 this. This is the default. 12518 12519`-msize-level=LEVEL' 12520 Fine-tune size optimization with regards to instruction lengths 12521 and alignment. The recognized values for LEVEL are: 12522 `0' 12523 No size optimization. This level is deprecated and treated 12524 like `1'. 12525 12526 `1' 12527 Short instructions are used opportunistically. 12528 12529 `2' 12530 In addition, alignment of loops and of code after barriers 12531 are dropped. 12532 12533 `3' 12534 In addition, optional data alignment is dropped, and the 12535 option `Os' is enabled. 12536 12537 12538 This defaults to `3' when `-Os' is in effect. Otherwise, the 12539 behavior when this is not set is equivalent to level `1'. 12540 12541`-mtune=CPU' 12542 Set instruction scheduling parameters for CPU, overriding any 12543 implied by `-mcpu='. 12544 12545 Supported values for CPU are 12546 12547 `ARC600' 12548 Tune for ARC600 cpu. 12549 12550 `ARC601' 12551 Tune for ARC601 cpu. 12552 12553 `ARC700' 12554 Tune for ARC700 cpu with standard multiplier block. 12555 12556 `ARC700-xmac' 12557 Tune for ARC700 cpu with XMAC block. 12558 12559 `ARC725D' 12560 Tune for ARC725D cpu. 12561 12562 `ARC750D' 12563 Tune for ARC750D cpu. 12564 12565 12566`-mmultcost=NUM' 12567 Cost to assume for a multiply instruction, with `4' being equal to 12568 a normal instruction. 12569 12570`-munalign-prob-threshold=PROBABILITY' 12571 Set probability threshold for unaligning branches. When tuning 12572 for `ARC700' and optimizing for speed, branches without filled 12573 delay slot are preferably emitted unaligned and long, unless 12574 profiling indicates that the probability for the branch to be taken 12575 is below PROBABILITY. *Note Cross-profiling::. The default is 12576 (REG_BR_PROB_BASE/2), i.e. 5000. 12577 12578 12579 The following options are maintained for backward compatibility, but 12580are now deprecated and will be removed in a future release: 12581 12582`-margonaut' 12583 Obsolete FPX. 12584 12585`-mbig-endian' 12586`-EB' 12587 Compile code for big endian targets. Use of these options is now 12588 deprecated. Users wanting big-endian code, should use the 12589 `arceb-elf32' and `arceb-linux-uclibc' targets when building the 12590 tool chain, for which big-endian is the default. 12591 12592`-mlittle-endian' 12593`-EL' 12594 Compile code for little endian targets. Use of these options is 12595 now deprecated. Users wanting little-endian code should use the 12596 `arc-elf32' and `arc-linux-uclibc' targets when building the tool 12597 chain, for which little-endian is the default. 12598 12599`-mbarrel_shifter' 12600 Replaced by `-mbarrel-shifter'. 12601 12602`-mdpfp_compact' 12603 Replaced by `-mdpfp-compact'. 12604 12605`-mdpfp_fast' 12606 Replaced by `-mdpfp-fast'. 12607 12608`-mdsp_packa' 12609 Replaced by `-mdsp-packa'. 12610 12611`-mEA' 12612 Replaced by `-mea'. 12613 12614`-mmac_24' 12615 Replaced by `-mmac-24'. 12616 12617`-mmac_d16' 12618 Replaced by `-mmac-d16'. 12619 12620`-mspfp_compact' 12621 Replaced by `-mspfp-compact'. 12622 12623`-mspfp_fast' 12624 Replaced by `-mspfp-fast'. 12625 12626`-mtune=CPU' 12627 Values `arc600', `arc601', `arc700' and `arc700-xmac' for CPU are 12628 replaced by `ARC600', `ARC601', `ARC700' and `ARC700-xmac' 12629 respectively 12630 12631`-multcost=NUM' 12632 Replaced by `-mmultcost'. 12633 12634 12635 12636File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options 12637 126383.17.4 ARM Options 12639------------------ 12640 12641These `-m' options are defined for the ARM port: 12642 12643`-mabi=NAME' 12644 Generate code for the specified ABI. Permissible values are: 12645 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 12646 12647`-mapcs-frame' 12648 Generate a stack frame that is compliant with the ARM Procedure 12649 Call Standard for all functions, even if this is not strictly 12650 necessary for correct execution of the code. Specifying 12651 `-fomit-frame-pointer' with this option causes the stack frames 12652 not to be generated for leaf functions. The default is 12653 `-mno-apcs-frame'. This option is deprecated. 12654 12655`-mapcs' 12656 This is a synonym for `-mapcs-frame' and is deprecated. 12657 12658`-mthumb-interwork' 12659 Generate code that supports calling between the ARM and Thumb 12660 instruction sets. Without this option, on pre-v5 architectures, 12661 the two instruction sets cannot be reliably used inside one 12662 program. The default is `-mno-thumb-interwork', since slightly 12663 larger code is generated when `-mthumb-interwork' is specified. 12664 In AAPCS configurations this option is meaningless. 12665 12666`-mno-sched-prolog' 12667 Prevent the reordering of instructions in the function prologue, 12668 or the merging of those instruction with the instructions in the 12669 function's body. This means that all functions start with a 12670 recognizable set of instructions (or in fact one of a choice from 12671 a small set of different function prologues), and this information 12672 can be used to locate the start of functions inside an executable 12673 piece of code. The default is `-msched-prolog'. 12674 12675`-mfloat-abi=NAME' 12676 Specifies which floating-point ABI to use. Permissible values 12677 are: `soft', `softfp' and `hard'. 12678 12679 Specifying `soft' causes GCC to generate output containing library 12680 calls for floating-point operations. `softfp' allows the 12681 generation of code using hardware floating-point instructions, but 12682 still uses the soft-float calling conventions. `hard' allows 12683 generation of floating-point instructions and uses FPU-specific 12684 calling conventions. 12685 12686 The default depends on the specific target configuration. Note 12687 that the hard-float and soft-float ABIs are not link-compatible; 12688 you must compile your entire program with the same ABI, and link 12689 with a compatible set of libraries. 12690 12691`-mlittle-endian' 12692 Generate code for a processor running in little-endian mode. This 12693 is the default for all standard configurations. 12694 12695`-mbig-endian' 12696 Generate code for a processor running in big-endian mode; the 12697 default is to compile code for a little-endian processor. 12698 12699`-march=NAME' 12700 This specifies the name of the target ARM architecture. GCC uses 12701 this name to determine what kind of instructions it can emit when 12702 generating assembly code. This option can be used in conjunction 12703 with or instead of the `-mcpu=' option. Permissible names are: 12704 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 12705 `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2', 12706 `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r', 12707 `armv7-m', `armv7e-m', `armv7ve', `armv8-a', `armv8-a+crc', 12708 `iwmmxt', `iwmmxt2', `ep9312'. 12709 12710 `-march=armv7ve' is the armv7-a architecture with virtualization 12711 extensions. 12712 12713 `-march=armv8-a+crc' enables code generation for the ARMv8-A 12714 architecture together with the optional CRC32 extensions. 12715 12716 `-march=native' causes the compiler to auto-detect the architecture 12717 of the build computer. At present, this feature is only supported 12718 on GNU/Linux, and not all architectures are recognized. If the 12719 auto-detect is unsuccessful the option has no effect. 12720 12721`-mtune=NAME' 12722 This option specifies the name of the target ARM processor for 12723 which GCC should tune the performance of the code. For some ARM 12724 implementations better performance can be obtained by using this 12725 option. Permissible names are: `arm2', `arm250', `arm3', `arm6', 12726 `arm60', `arm600', `arm610', `arm620', `arm7', `arm7m', `arm7d', 12727 `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', `arm700i', 12728 `arm710', `arm710c', `arm7100', `arm720', `arm7500', `arm7500fe', 12729 `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', `arm740t', 12730 `strongarm', `strongarm110', `strongarm1100', `strongarm1110', 12731 `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t', `arm922t', 12732 `arm946e-s', `arm966e-s', `arm968e-s', `arm926ej-s', `arm940t', 12733 `arm9tdmi', `arm10tdmi', `arm1020t', `arm1026ej-s', `arm10e', 12734 `arm1020e', `arm1022e', `arm1136j-s', `arm1136jf-s', `mpcore', 12735 `mpcorenovfp', `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', 12736 `arm1176jzf-s', `cortex-a5', `cortex-a7', `cortex-a8', `cortex-a9', 12737 `cortex-a12', `cortex-a15', `cortex-a53', `cortex-a57', 12738 `cortex-a72', `cortex-r4', `cortex-r4f', `cortex-r5', `cortex-r7', 12739 `cortex-m7', `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0', 12740 `cortex-m0plus', `cortex-m1.small-multiply', 12741 `cortex-m0.small-multiply', `cortex-m0plus.small-multiply', 12742 `exynos-m1', `marvell-pj4', `xscale', `iwmmxt', `iwmmxt2', 12743 `ep9312', `fa526', `fa626', `fa606te', `fa626te', `fmp626', 12744 `fa726te', `xgene1'. 12745 12746 Additionally, this option can specify that GCC should tune the 12747 performance of the code for a big.LITTLE system. Permissible 12748 names are: `cortex-a15.cortex-a7', `cortex-a57.cortex-a53', 12749 `cortex-a72.cortex-a53'. 12750 12751 `-mtune=generic-ARCH' specifies that GCC should tune the 12752 performance for a blend of processors within architecture ARCH. 12753 The aim is to generate code that run well on the current most 12754 popular processors, balancing between optimizations that benefit 12755 some CPUs in the range, and avoiding performance pitfalls of other 12756 CPUs. The effects of this option may change in future GCC 12757 versions as CPU models come and go. 12758 12759 `-mtune=native' causes the compiler to auto-detect the CPU of the 12760 build computer. At present, this feature is only supported on 12761 GNU/Linux, and not all architectures are recognized. If the 12762 auto-detect is unsuccessful the option has no effect. 12763 12764`-mcpu=NAME' 12765 This specifies the name of the target ARM processor. GCC uses 12766 this name to derive the name of the target ARM architecture (as if 12767 specified by `-march') and the ARM processor type for which to 12768 tune for performance (as if specified by `-mtune'). Where this 12769 option is used in conjunction with `-march' or `-mtune', those 12770 options take precedence over the appropriate part of this option. 12771 12772 Permissible names for this option are the same as those for 12773 `-mtune'. 12774 12775 `-mcpu=generic-ARCH' is also permissible, and is equivalent to 12776 `-march=ARCH -mtune=generic-ARCH'. See `-mtune' for more 12777 information. 12778 12779 `-mcpu=native' causes the compiler to auto-detect the CPU of the 12780 build computer. At present, this feature is only supported on 12781 GNU/Linux, and not all architectures are recognized. If the 12782 auto-detect is unsuccessful the option has no effect. 12783 12784`-mfpu=NAME' 12785 This specifies what floating-point hardware (or hardware 12786 emulation) is available on the target. Permissible names are: 12787 `vfp', `vfpv3', `vfpv3-fp16', `vfpv3-d16', `vfpv3-d16-fp16', 12788 `vfpv3xd', `vfpv3xd-fp16', `neon', `neon-fp16', `vfpv4', 12789 `vfpv4-d16', `fpv4-sp-d16', `neon-vfpv4', `fpv5-d16', 12790 `fpv5-sp-d16', `fp-armv8', `neon-fp-armv8', and 12791 `crypto-neon-fp-armv8'. 12792 12793 If `-msoft-float' is specified this specifies the format of 12794 floating-point values. 12795 12796 If the selected floating-point hardware includes the NEON extension 12797 (e.g. `-mfpu'=`neon'), note that floating-point operations are not 12798 generated by GCC's auto-vectorization pass unless 12799 `-funsafe-math-optimizations' is also specified. This is because 12800 NEON hardware does not fully implement the IEEE 754 standard for 12801 floating-point arithmetic (in particular denormal values are 12802 treated as zero), so the use of NEON instructions may lead to a 12803 loss of precision. 12804 12805`-mfp16-format=NAME' 12806 Specify the format of the `__fp16' half-precision floating-point 12807 type. Permissible names are `none', `ieee', and `alternative'; 12808 the default is `none', in which case the `__fp16' type is not 12809 defined. *Note Half-Precision::, for more information. 12810 12811`-mstructure-size-boundary=N' 12812 The sizes of all structures and unions are rounded up to a multiple 12813 of the number of bits set by this option. Permissible values are 12814 8, 32 and 64. The default value varies for different toolchains. 12815 For the COFF targeted toolchain the default value is 8. A value 12816 of 64 is only allowed if the underlying ABI supports it. 12817 12818 Specifying a larger number can produce faster, more efficient 12819 code, but can also increase the size of the program. Different 12820 values are potentially incompatible. Code compiled with one value 12821 cannot necessarily expect to work with code or libraries compiled 12822 with another value, if they exchange information using structures 12823 or unions. 12824 12825`-mabort-on-noreturn' 12826 Generate a call to the function `abort' at the end of a `noreturn' 12827 function. It is executed if the function tries to return. 12828 12829`-mlong-calls' 12830`-mno-long-calls' 12831 Tells the compiler to perform function calls by first loading the 12832 address of the function into a register and then performing a 12833 subroutine call on this register. This switch is needed if the 12834 target function lies outside of the 64-megabyte addressing range 12835 of the offset-based version of subroutine call instruction. 12836 12837 Even if this switch is enabled, not all function calls are turned 12838 into long calls. The heuristic is that static functions, functions 12839 that have the `short_call' attribute, functions that are inside 12840 the scope of a `#pragma no_long_calls' directive, and functions 12841 whose definitions have already been compiled within the current 12842 compilation unit are not turned into long calls. The exceptions 12843 to this rule are that weak function definitions, functions with 12844 the `long_call' attribute or the `section' attribute, and 12845 functions that are within the scope of a `#pragma long_calls' 12846 directive are always turned into long calls. 12847 12848 This feature is not enabled by default. Specifying 12849 `-mno-long-calls' restores the default behavior, as does placing 12850 the function calls within the scope of a `#pragma long_calls_off' 12851 directive. Note these switches have no effect on how the compiler 12852 generates code to handle function calls via function pointers. 12853 12854`-msingle-pic-base' 12855 Treat the register used for PIC addressing as read-only, rather 12856 than loading it in the prologue for each function. The runtime 12857 system is responsible for initializing this register with an 12858 appropriate value before execution begins. 12859 12860`-mpic-register=REG' 12861 Specify the register to be used for PIC addressing. For standard 12862 PIC base case, the default is any suitable register determined by 12863 compiler. For single PIC base case, the default is `R9' if target 12864 is EABI based or stack-checking is enabled, otherwise the default 12865 is `R10'. 12866 12867`-mpic-data-is-text-relative' 12868 Assume that each data segments are relative to text segment at 12869 load time. Therefore, it permits addressing data using 12870 PC-relative operations. This option is on by default for targets 12871 other than VxWorks RTP. 12872 12873`-mpoke-function-name' 12874 Write the name of each function into the text section, directly 12875 preceding the function prologue. The generated code is similar to 12876 this: 12877 12878 t0 12879 .ascii "arm_poke_function_name", 0 12880 .align 12881 t1 12882 .word 0xff000000 + (t1 - t0) 12883 arm_poke_function_name 12884 mov ip, sp 12885 stmfd sp!, {fp, ip, lr, pc} 12886 sub fp, ip, #4 12887 12888 When performing a stack backtrace, code can inspect the value of 12889 `pc' stored at `fp + 0'. If the trace function then looks at 12890 location `pc - 12' and the top 8 bits are set, then we know that 12891 there is a function name embedded immediately preceding this 12892 location and has length `((pc[-3]) & 0xff000000)'. 12893 12894`-mthumb' 12895`-marm' 12896 Select between generating code that executes in ARM and Thumb 12897 states. The default for most configurations is to generate code 12898 that executes in ARM state, but the default can be changed by 12899 configuring GCC with the `--with-mode='STATE configure option. 12900 12901`-mtpcs-frame' 12902 Generate a stack frame that is compliant with the Thumb Procedure 12903 Call Standard for all non-leaf functions. (A leaf function is one 12904 that does not call any other functions.) The default is 12905 `-mno-tpcs-frame'. 12906 12907`-mtpcs-leaf-frame' 12908 Generate a stack frame that is compliant with the Thumb Procedure 12909 Call Standard for all leaf functions. (A leaf function is one 12910 that does not call any other functions.) The default is 12911 `-mno-apcs-leaf-frame'. 12912 12913`-mcallee-super-interworking' 12914 Gives all externally visible functions in the file being compiled 12915 an ARM instruction set header which switches to Thumb mode before 12916 executing the rest of the function. This allows these functions 12917 to be called from non-interworking code. This option is not valid 12918 in AAPCS configurations because interworking is enabled by default. 12919 12920`-mcaller-super-interworking' 12921 Allows calls via function pointers (including virtual functions) to 12922 execute correctly regardless of whether the target code has been 12923 compiled for interworking or not. There is a small overhead in 12924 the cost of executing a function pointer if this option is 12925 enabled. This option is not valid in AAPCS configurations because 12926 interworking is enabled by default. 12927 12928`-mtp=NAME' 12929 Specify the access model for the thread local storage pointer. 12930 The valid models are `soft', which generates calls to 12931 `__aeabi_read_tp', `cp15', which fetches the thread pointer from 12932 `cp15' directly (supported in the arm6k architecture), and `auto', 12933 which uses the best available method for the selected processor. 12934 The default setting is `auto'. 12935 12936`-mtls-dialect=DIALECT' 12937 Specify the dialect to use for accessing thread local storage. Two 12938 DIALECTs are supported--`gnu' and `gnu2'. The `gnu' dialect 12939 selects the original GNU scheme for supporting local and global 12940 dynamic TLS models. The `gnu2' dialect selects the GNU descriptor 12941 scheme, which provides better performance for shared libraries. 12942 The GNU descriptor scheme is compatible with the original scheme, 12943 but does require new assembler, linker and library support. 12944 Initial and local exec TLS models are unaffected by this option 12945 and always use the original scheme. 12946 12947`-mword-relocations' 12948 Only generate absolute relocations on word-sized values (i.e. 12949 R_ARM_ABS32). This is enabled by default on targets (uClinux, 12950 SymbianOS) where the runtime loader imposes this restriction, and 12951 when `-fpic' or `-fPIC' is specified. 12952 12953`-mfix-cortex-m3-ldrd' 12954 Some Cortex-M3 cores can cause data corruption when `ldrd' 12955 instructions with overlapping destination and base registers are 12956 used. This option avoids generating these instructions. This 12957 option is enabled by default when `-mcpu=cortex-m3' is specified. 12958 12959`-munaligned-access' 12960`-mno-unaligned-access' 12961 Enables (or disables) reading and writing of 16- and 32- bit values 12962 from addresses that are not 16- or 32- bit aligned. By default 12963 unaligned access is disabled for all pre-ARMv6 and all ARMv6-M 12964 architectures, and enabled for all other architectures. If 12965 unaligned access is not enabled then words in packed data 12966 structures are accessed a byte at a time. 12967 12968 The ARM attribute `Tag_CPU_unaligned_access' is set in the 12969 generated object file to either true or false, depending upon the 12970 setting of this option. If unaligned access is enabled then the 12971 preprocessor symbol `__ARM_FEATURE_UNALIGNED' is also defined. 12972 12973`-mneon-for-64bits' 12974 Enables using Neon to handle scalar 64-bits operations. This is 12975 disabled by default since the cost of moving data from core 12976 registers to Neon is high. 12977 12978`-mslow-flash-data' 12979 Assume loading data from flash is slower than fetching instruction. 12980 Therefore literal load is minimized for better performance. This 12981 option is only supported when compiling for ARMv7 M-profile and 12982 off by default. 12983 12984`-masm-syntax-unified' 12985 Assume inline assembler is using unified asm syntax. The default 12986 is currently off which implies divided syntax. Currently this 12987 option is available only for Thumb1 and has no effect on ARM state 12988 and Thumb2. However, this may change in future releases of GCC. 12989 Divided syntax should be considered deprecated. 12990 12991`-mrestrict-it' 12992 Restricts generation of IT blocks to conform to the rules of ARMv8. 12993 IT blocks can only contain a single 16-bit instruction from a 12994 select set of instructions. This option is on by default for ARMv8 12995 Thumb mode. 12996 12997`-mprint-tune-info' 12998 Print CPU tuning information as comment in assembler file. This is 12999 an option used only for regression testing of the compiler and not 13000 intended for ordinary use in compiling code. This option is 13001 disabled by default. 13002 13003 13004File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 13005 130063.17.5 AVR Options 13007------------------ 13008 13009These options are defined for AVR implementations: 13010 13011`-mmcu=MCU' 13012 Specify Atmel AVR instruction set architectures (ISA) or MCU type. 13013 13014 The default for this option is `avr2'. 13015 13016 GCC supports the following AVR devices and ISAs: 13017 13018 `avr2' 13019 "Classic" devices with up to 8 KiB of program memory. 13020 MCU = `attiny22', `attiny26', `at90c8534', `at90s2313', 13021 `at90s2323', `at90s2333', `at90s2343', `at90s4414', 13022 `at90s4433', `at90s4434', `at90s8515', `at90s8535'. 13023 13024 `avr25' 13025 "Classic" devices with up to 8 KiB of program memory and with 13026 the `MOVW' instruction. 13027 MCU = `ata5272', `ata6616c', `attiny13', `attiny13a', 13028 `attiny2313', `attiny2313a', `attiny24', `attiny24a', 13029 `attiny25', `attiny261', `attiny261a', `attiny43u', 13030 `attiny4313', `attiny44', `attiny44a', `attiny441', 13031 `attiny45', `attiny461', `attiny461a', `attiny48', 13032 `attiny828', `attiny84', `attiny84a', `attiny841', 13033 `attiny85', `attiny861', `attiny861a', `attiny87', 13034 `attiny88', `at86rf401'. 13035 13036 `avr3' 13037 "Classic" devices with 16 KiB up to 64 KiB of program memory. 13038 MCU = `at43usb355', `at76c711'. 13039 13040 `avr31' 13041 "Classic" devices with 128 KiB of program memory. 13042 MCU = `atmega103', `at43usb320'. 13043 13044 `avr35' 13045 "Classic" devices with 16 KiB up to 64 KiB of program memory 13046 and with the `MOVW' instruction. 13047 MCU = `ata5505', `ata6617c', `ata664251', `atmega16u2', 13048 `atmega32u2', `atmega8u2', `attiny1634', `attiny167', 13049 `at90usb162', `at90usb82'. 13050 13051 `avr4' 13052 "Enhanced" devices with up to 8 KiB of program memory. 13053 MCU = `ata6285', `ata6286', `ata6289', `ata6612c', 13054 `atmega48', `atmega48a', `atmega48p', `atmega48pa', 13055 `atmega8', `atmega8a', `atmega8hva', `atmega8515', 13056 `atmega8535', `atmega88', `atmega88a', `atmega88p', 13057 `atmega88pa', `at90pwm1', `at90pwm2', `at90pwm2b', 13058 `at90pwm3', `at90pwm3b', `at90pwm81'. 13059 13060 `avr5' 13061 "Enhanced" devices with 16 KiB up to 64 KiB of program memory. 13062 MCU = `ata5702m322', `ata5782', `ata5790', `ata5790n', 13063 `ata5795', `ata5831', `ata6613c', `ata6614q', `atmega16', 13064 `atmega16a', `atmega16hva', `atmega16hva2', `atmega16hvb', 13065 `atmega16hvbrevb', `atmega16m1', `atmega16u4', `atmega161', 13066 `atmega162', `atmega163', `atmega164a', `atmega164p', 13067 `atmega164pa', `atmega165', `atmega165a', `atmega165p', 13068 `atmega165pa', `atmega168', `atmega168a', `atmega168p', 13069 `atmega168pa', `atmega169', `atmega169a', `atmega169p', 13070 `atmega169pa', `atmega32', `atmega32a', `atmega32c1', 13071 `atmega32hvb', `atmega32hvbrevb', `atmega32m1', `atmega32u4', 13072 `atmega32u6', `atmega323', `atmega324a', `atmega324p', 13073 `atmega324pa', `atmega325', `atmega325a', `atmega325p', 13074 `atmega325pa', `atmega3250', `atmega3250a', `atmega3250p', 13075 `atmega3250pa', `atmega328', `atmega328p', `atmega329', 13076 `atmega329a', `atmega329p', `atmega329pa', `atmega3290', 13077 `atmega3290a', `atmega3290p', `atmega3290pa', `atmega406', 13078 `atmega64', `atmega64a', `atmega64c1', `atmega64hve', 13079 `atmega64hve2', `atmega64m1', `atmega64rfr2', `atmega640', 13080 `atmega644', `atmega644a', `atmega644p', `atmega644pa', 13081 `atmega644rfr2', `atmega645', `atmega645a', `atmega645p', 13082 `atmega6450', `atmega6450a', `atmega6450p', `atmega649', 13083 `atmega649a', `atmega649p', `atmega6490', `atmega6490a', 13084 `atmega6490p', `at90can32', `at90can64', `at90pwm161', 13085 `at90pwm216', `at90pwm316', `at90scr100', `at90usb646', 13086 `at90usb647', `at94k', `m3000'. 13087 13088 `avr51' 13089 "Enhanced" devices with 128 KiB of program memory. 13090 MCU = `atmega128', `atmega128a', `atmega128rfa1', 13091 `atmega128rfr2', `atmega1280', `atmega1281', `atmega1284', 13092 `atmega1284p', `atmega1284rfr2', `at90can128', `at90usb1286', 13093 `at90usb1287'. 13094 13095 `avr6' 13096 "Enhanced" devices with 3-byte PC, i.e. with more than 13097 128 KiB of program memory. 13098 MCU = `atmega256rfr2', `atmega2560', `atmega2561', 13099 `atmega2564rfr2'. 13100 13101 `avrxmega2' 13102 "XMEGA" devices with more than 8 KiB and up to 64 KiB of 13103 program memory. 13104 MCU = `atxmega16a4', `atxmega16a4u', `atxmega16c4', 13105 `atxmega16d4', `atxmega16e5', `atxmega32a4', `atxmega32a4u', 13106 `atxmega32c3', `atxmega32c4', `atxmega32d3', `atxmega32d4', 13107 `atxmega32e5', `atxmega8e5'. 13108 13109 `avrxmega4' 13110 "XMEGA" devices with more than 64 KiB and up to 128 KiB of 13111 program memory. 13112 MCU = `atxmega64a3', `atxmega64a3u', `atxmega64a4u', 13113 `atxmega64b1', `atxmega64b3', `atxmega64c3', `atxmega64d3', 13114 `atxmega64d4'. 13115 13116 `avrxmega5' 13117 "XMEGA" devices with more than 64 KiB and up to 128 KiB of 13118 program memory and more than 64 KiB of RAM. 13119 MCU = `atxmega64a1', `atxmega64a1u'. 13120 13121 `avrxmega6' 13122 "XMEGA" devices with more than 128 KiB of program memory. 13123 MCU = `atxmega128a3', `atxmega128a3u', `atxmega128b1', 13124 `atxmega128b3', `atxmega128c3', `atxmega128d3', 13125 `atxmega128d4', `atxmega192a3', `atxmega192a3u', 13126 `atxmega192c3', `atxmega192d3', `atxmega256a3', 13127 `atxmega256a3b', `atxmega256a3bu', `atxmega256a3u', 13128 `atxmega256c3', `atxmega256d3', `atxmega384c3', 13129 `atxmega384d3'. 13130 13131 `avrxmega7' 13132 "XMEGA" devices with more than 128 KiB of program memory and 13133 more than 64 KiB of RAM. 13134 MCU = `atxmega128a1', `atxmega128a1u', `atxmega128a4u'. 13135 13136 `avrtiny' 13137 "TINY" Tiny core devices with 512 B up to 4 KiB of program 13138 memory. 13139 MCU = `attiny10', `attiny20', `attiny4', `attiny40', 13140 `attiny5', `attiny9'. 13141 13142 `avr1' 13143 This ISA is implemented by the minimal AVR core and supported 13144 for assembler only. 13145 MCU = `attiny11', `attiny12', `attiny15', `attiny28', 13146 `at90s1200'. 13147 13148 13149`-maccumulate-args' 13150 Accumulate outgoing function arguments and acquire/release the 13151 needed stack space for outgoing function arguments once in function 13152 prologue/epilogue. Without this option, outgoing arguments are 13153 pushed before calling a function and popped afterwards. 13154 13155 Popping the arguments after the function call can be expensive on 13156 AVR so that accumulating the stack space might lead to smaller 13157 executables because arguments need not to be removed from the 13158 stack after such a function call. 13159 13160 This option can lead to reduced code size for functions that 13161 perform several calls to functions that get their arguments on the 13162 stack like calls to printf-like functions. 13163 13164`-mbranch-cost=COST' 13165 Set the branch costs for conditional branch instructions to COST. 13166 Reasonable values for COST are small, non-negative integers. The 13167 default branch cost is 0. 13168 13169`-mcall-prologues' 13170 Functions prologues/epilogues are expanded as calls to appropriate 13171 subroutines. Code size is smaller. 13172 13173`-mint8' 13174 Assume `int' to be 8-bit integer. This affects the sizes of all 13175 types: a `char' is 1 byte, an `int' is 1 byte, a `long' is 2 bytes, 13176 and `long long' is 4 bytes. Please note that this option does not 13177 conform to the C standards, but it results in smaller code size. 13178 13179`-mn-flash=NUM' 13180 Assume that the flash memory has a size of NUM times 64 KiB. 13181 13182`-mno-interrupts' 13183 Generated code is not compatible with hardware interrupts. Code 13184 size is smaller. 13185 13186`-mrelax' 13187 Try to replace `CALL' resp. `JMP' instruction by the shorter 13188 `RCALL' resp. `RJMP' instruction if applicable. Setting `-mrelax' 13189 just adds the `--mlink-relax' option to the assembler's command 13190 line and the `--relax' option to the linker's command line. 13191 13192 Jump relaxing is performed by the linker because jump offsets are 13193 not known before code is located. Therefore, the assembler code 13194 generated by the compiler is the same, but the instructions in the 13195 executable may differ from instructions in the assembler code. 13196 13197 Relaxing must be turned on if linker stubs are needed, see the 13198 section on `EIND' and linker stubs below. 13199 13200`-mrmw' 13201 Assume that the device supports the Read-Modify-Write instructions 13202 `XCH', `LAC', `LAS' and `LAT'. 13203 13204`-msp8' 13205 Treat the stack pointer register as an 8-bit register, i.e. assume 13206 the high byte of the stack pointer is zero. In general, you don't 13207 need to set this option by hand. 13208 13209 This option is used internally by the compiler to select and build 13210 multilibs for architectures `avr2' and `avr25'. These 13211 architectures mix devices with and without `SPH'. For any setting 13212 other than `-mmcu=avr2' or `-mmcu=avr25' the compiler driver adds 13213 or removes this option from the compiler proper's command line, 13214 because the compiler then knows if the device or architecture has 13215 an 8-bit stack pointer and thus no `SPH' register or not. 13216 13217`-mstrict-X' 13218 Use address register `X' in a way proposed by the hardware. This 13219 means that `X' is only used in indirect, post-increment or 13220 pre-decrement addressing. 13221 13222 Without this option, the `X' register may be used in the same way 13223 as `Y' or `Z' which then is emulated by additional instructions. 13224 For example, loading a value with `X+const' addressing with a 13225 small non-negative `const < 64' to a register RN is performed as 13226 13227 adiw r26, const ; X += const 13228 ld RN, X ; RN = *X 13229 sbiw r26, const ; X -= const 13230 13231`-mtiny-stack' 13232 Only change the lower 8 bits of the stack pointer. 13233 13234`-nodevicelib' 13235 Don't link against AVR-LibC's device specific library `libdev.a'. 13236 13237`-Waddr-space-convert' 13238 Warn about conversions between address spaces in the case where the 13239 resulting address space is not contained in the incoming address 13240 space. 13241 132423.17.5.1 `EIND' and Devices with More Than 128 Ki Bytes of Flash 13243................................................................ 13244 13245Pointers in the implementation are 16 bits wide. The address of a 13246function or label is represented as word address so that indirect jumps 13247and calls can target any code address in the range of 64 Ki words. 13248 13249 In order to facilitate indirect jump on devices with more than 128 Ki 13250bytes of program memory space, there is a special function register 13251called `EIND' that serves as most significant part of the target address 13252when `EICALL' or `EIJMP' instructions are used. 13253 13254 Indirect jumps and calls on these devices are handled as follows by 13255the compiler and are subject to some limitations: 13256 13257 * The compiler never sets `EIND'. 13258 13259 * The compiler uses `EIND' implicitely in `EICALL'/`EIJMP' 13260 instructions or might read `EIND' directly in order to emulate an 13261 indirect call/jump by means of a `RET' instruction. 13262 13263 * The compiler assumes that `EIND' never changes during the startup 13264 code or during the application. In particular, `EIND' is not 13265 saved/restored in function or interrupt service routine 13266 prologue/epilogue. 13267 13268 * For indirect calls to functions and computed goto, the linker 13269 generates _stubs_. Stubs are jump pads sometimes also called 13270 _trampolines_. Thus, the indirect call/jump jumps to such a stub. 13271 The stub contains a direct jump to the desired address. 13272 13273 * Linker relaxation must be turned on so that the linker generates 13274 the stubs correctly in all situations. See the compiler option 13275 `-mrelax' and the linker option `--relax'. There are corner cases 13276 where the linker is supposed to generate stubs but aborts without 13277 relaxation and without a helpful error message. 13278 13279 * The default linker script is arranged for code with `EIND = 0'. 13280 If code is supposed to work for a setup with `EIND != 0', a custom 13281 linker script has to be used in order to place the sections whose 13282 name start with `.trampolines' into the segment where `EIND' 13283 points to. 13284 13285 * The startup code from libgcc never sets `EIND'. Notice that 13286 startup code is a blend of code from libgcc and AVR-LibC. For the 13287 impact of AVR-LibC on `EIND', see the 13288 AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/). 13289 13290 * It is legitimate for user-specific startup code to set up `EIND' 13291 early, for example by means of initialization code located in 13292 section `.init3'. Such code runs prior to general startup code 13293 that initializes RAM and calls constructors, but after the bit of 13294 startup code from AVR-LibC that sets `EIND' to the segment where 13295 the vector table is located. 13296 #include <avr/io.h> 13297 13298 static void 13299 __attribute__((section(".init3"),naked,used,no_instrument_function)) 13300 init3_set_eind (void) 13301 { 13302 __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t" 13303 "out %i0,r24" :: "n" (&EIND) : "r24","memory"); 13304 } 13305 13306 The `__trampolines_start' symbol is defined in the linker script. 13307 13308 * Stubs are generated automatically by the linker if the following 13309 two conditions are met: 13310 - The address of a label is taken by means of the `gs' modifier 13311 (short for _generate stubs_) like so: 13312 LDI r24, lo8(gs(FUNC)) 13313 LDI r25, hi8(gs(FUNC)) 13314 13315 - The final location of that label is in a code segment 13316 _outside_ the segment where the stubs are located. 13317 13318 * The compiler emits such `gs' modifiers for code labels in the 13319 following situations: 13320 - Taking address of a function or code label. 13321 13322 - Computed goto. 13323 13324 - If prologue-save function is used, see `-mcall-prologues' 13325 command-line option. 13326 13327 - Switch/case dispatch tables. If you do not want such dispatch 13328 tables you can specify the `-fno-jump-tables' command-line 13329 option. 13330 13331 - C and C++ constructors/destructors called during 13332 startup/shutdown. 13333 13334 - If the tools hit a `gs()' modifier explained above. 13335 13336 * Jumping to non-symbolic addresses like so is _not_ supported: 13337 13338 int main (void) 13339 { 13340 /* Call function at word address 0x2 */ 13341 return ((int(*)(void)) 0x2)(); 13342 } 13343 13344 Instead, a stub has to be set up, i.e. the function has to be 13345 called through a symbol (`func_4' in the example): 13346 13347 int main (void) 13348 { 13349 extern int func_4 (void); 13350 13351 /* Call function at byte address 0x4 */ 13352 return func_4(); 13353 } 13354 13355 and the application be linked with `-Wl,--defsym,func_4=0x4'. 13356 Alternatively, `func_4' can be defined in the linker script. 13357 133583.17.5.2 Handling of the `RAMPD', `RAMPX', `RAMPY' and `RAMPZ' Special Function Registers 13359......................................................................................... 13360 13361Some AVR devices support memories larger than the 64 KiB range that can 13362be accessed with 16-bit pointers. To access memory locations outside 13363this 64 KiB range, the contentent of a `RAMP' register is used as high 13364part of the address: The `X', `Y', `Z' address register is concatenated 13365with the `RAMPX', `RAMPY', `RAMPZ' special function register, 13366respectively, to get a wide address. Similarly, `RAMPD' is used 13367together with direct addressing. 13368 13369 * The startup code initializes the `RAMP' special function registers 13370 with zero. 13371 13372 * If a *note named address space: AVR Named Address Spaces. other 13373 than generic or `__flash' is used, then `RAMPZ' is set as needed 13374 before the operation. 13375 13376 * If the device supports RAM larger than 64 KiB and the compiler 13377 needs to change `RAMPZ' to accomplish an operation, `RAMPZ' is 13378 reset to zero after the operation. 13379 13380 * If the device comes with a specific `RAMP' register, the ISR 13381 prologue/epilogue saves/restores that SFR and initializes it with 13382 zero in case the ISR code might (implicitly) use it. 13383 13384 * RAM larger than 64 KiB is not supported by GCC for AVR targets. 13385 If you use inline assembler to read from locations outside the 13386 16-bit address range and change one of the `RAMP' registers, you 13387 must reset it to zero after the access. 13388 13389 133903.17.5.3 AVR Built-in Macros 13391............................ 13392 13393GCC defines several built-in macros so that the user code can test for 13394the presence or absence of features. Almost any of the following 13395built-in macros are deduced from device capabilities and thus triggered 13396by the `-mmcu=' command-line option. 13397 13398 For even more AVR-specific built-in macros see *note AVR Named Address 13399Spaces:: and *note AVR Built-in Functions::. 13400 13401`__AVR_ARCH__' 13402 Build-in macro that resolves to a decimal number that identifies 13403 the architecture and depends on the `-mmcu=MCU' option. Possible 13404 values are: 13405 13406 `2', `25', `3', `31', `35', `4', `5', `51', `6' 13407 13408 for MCU=`avr2', `avr25', `avr3', `avr31', `avr35', `avr4', `avr5', 13409 `avr51', `avr6', 13410 13411 respectively and 13412 13413 `100', `102', `104', `105', `106', `107' 13414 13415 for MCU=`avrtiny', `avrxmega2', `avrxmega4', `avrxmega5', 13416 `avrxmega6', `avrxmega7', respectively. If MCU specifies a 13417 device, this built-in macro is set accordingly. For example, with 13418 `-mmcu=atmega8' the macro is defined to `4'. 13419 13420`__AVR_DEVICE__' 13421 Setting `-mmcu=DEVICE' defines this built-in macro which reflects 13422 the device's name. For example, `-mmcu=atmega8' defines the 13423 built-in macro `__AVR_ATmega8__', `-mmcu=attiny261a' defines 13424 `__AVR_ATtiny261A__', etc. 13425 13426 The built-in macros' names follow the scheme `__AVR_DEVICE__' 13427 where DEVICE is the device name as from the AVR user manual. The 13428 difference between DEVICE in the built-in macro and DEVICE in 13429 `-mmcu=DEVICE' is that the latter is always lowercase. 13430 13431 If DEVICE is not a device but only a core architecture like 13432 `avr51', this macro is not defined. 13433 13434`__AVR_DEVICE_NAME__' 13435 Setting `-mmcu=DEVICE' defines this built-in macro to the device's 13436 name. For example, with `-mmcu=atmega8' the macro is defined to 13437 `atmega8'. 13438 13439 If DEVICE is not a device but only a core architecture like 13440 `avr51', this macro is not defined. 13441 13442`__AVR_XMEGA__' 13443 The device / architecture belongs to the XMEGA family of devices. 13444 13445`__AVR_HAVE_ELPM__' 13446 The device has the the `ELPM' instruction. 13447 13448`__AVR_HAVE_ELPMX__' 13449 The device has the `ELPM RN,Z' and `ELPM RN,Z+' instructions. 13450 13451`__AVR_HAVE_MOVW__' 13452 The device has the `MOVW' instruction to perform 16-bit 13453 register-register moves. 13454 13455`__AVR_HAVE_LPMX__' 13456 The device has the `LPM RN,Z' and `LPM RN,Z+' instructions. 13457 13458`__AVR_HAVE_MUL__' 13459 The device has a hardware multiplier. 13460 13461`__AVR_HAVE_JMP_CALL__' 13462 The device has the `JMP' and `CALL' instructions. This is the 13463 case for devices with at least 16 KiB of program memory. 13464 13465`__AVR_HAVE_EIJMP_EICALL__' 13466`__AVR_3_BYTE_PC__' 13467 The device has the `EIJMP' and `EICALL' instructions. This is the 13468 case for devices with more than 128 KiB of program memory. This 13469 also means that the program counter (PC) is 3 bytes wide. 13470 13471`__AVR_2_BYTE_PC__' 13472 The program counter (PC) is 2 bytes wide. This is the case for 13473 devices with up to 128 KiB of program memory. 13474 13475`__AVR_HAVE_8BIT_SP__' 13476`__AVR_HAVE_16BIT_SP__' 13477 The stack pointer (SP) register is treated as 8-bit respectively 13478 16-bit register by the compiler. The definition of these macros 13479 is affected by `-mtiny-stack'. 13480 13481`__AVR_HAVE_SPH__' 13482`__AVR_SP8__' 13483 The device has the SPH (high part of stack pointer) special 13484 function register or has an 8-bit stack pointer, respectively. 13485 The definition of these macros is affected by `-mmcu=' and in the 13486 cases of `-mmcu=avr2' and `-mmcu=avr25' also by `-msp8'. 13487 13488`__AVR_HAVE_RAMPD__' 13489`__AVR_HAVE_RAMPX__' 13490`__AVR_HAVE_RAMPY__' 13491`__AVR_HAVE_RAMPZ__' 13492 The device has the `RAMPD', `RAMPX', `RAMPY', `RAMPZ' special 13493 function register, respectively. 13494 13495`__NO_INTERRUPTS__' 13496 This macro reflects the `-mno-interrupts' command-line option. 13497 13498`__AVR_ERRATA_SKIP__' 13499`__AVR_ERRATA_SKIP_JMP_CALL__' 13500 Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit 13501 instructions because of a hardware erratum. Skip instructions are 13502 `SBRS', `SBRC', `SBIS', `SBIC' and `CPSE'. The second macro is 13503 only defined if `__AVR_HAVE_JMP_CALL__' is also set. 13504 13505`__AVR_ISA_RMW__' 13506 The device has Read-Modify-Write instructions (XCH, LAC, LAS and 13507 LAT). 13508 13509`__AVR_SFR_OFFSET__=OFFSET' 13510 Instructions that can address I/O special function registers 13511 directly like `IN', `OUT', `SBI', etc. may use a different address 13512 as if addressed by an instruction to access RAM like `LD' or 13513 `STS'. This offset depends on the device architecture and has to 13514 be subtracted from the RAM address in order to get the respective 13515 I/O address. 13516 13517`__WITH_AVRLIBC__' 13518 The compiler is configured to be used together with AVR-Libc. See 13519 the `--with-avrlibc' configure option. 13520 13521 13522 13523File: gcc.info, Node: Blackfin Options, Next: C6X Options, Prev: AVR Options, Up: Submodel Options 13524 135253.17.6 Blackfin Options 13526----------------------- 13527 13528`-mcpu=CPU[-SIREVISION]' 13529 Specifies the name of the target Blackfin processor. Currently, 13530 CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522', 13531 `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532', 13532 `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542', 13533 `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m', 13534 `bf548m', `bf549m', `bf561', `bf592'. 13535 13536 The optional SIREVISION specifies the silicon revision of the 13537 target Blackfin processor. Any workarounds available for the 13538 targeted silicon revision are enabled. If SIREVISION is `none', 13539 no workarounds are enabled. If SIREVISION is `any', all 13540 workarounds for the targeted processor are enabled. The 13541 `__SILICON_REVISION__' macro is defined to two hexadecimal digits 13542 representing the major and minor numbers in the silicon revision. 13543 If SIREVISION is `none', the `__SILICON_REVISION__' is not 13544 defined. If SIREVISION is `any', the `__SILICON_REVISION__' is 13545 defined to be `0xffff'. If this optional SIREVISION is not used, 13546 GCC assumes the latest known silicon revision of the targeted 13547 Blackfin processor. 13548 13549 GCC defines a preprocessor macro for the specified CPU. For the 13550 `bfin-elf' toolchain, this option causes the hardware BSP provided 13551 by libgloss to be linked in if `-msim' is not given. 13552 13553 Without this option, `bf532' is used as the processor by default. 13554 13555 Note that support for `bf561' is incomplete. For `bf561', only 13556 the preprocessor macro is defined. 13557 13558`-msim' 13559 Specifies that the program will be run on the simulator. This 13560 causes the simulator BSP provided by libgloss to be linked in. 13561 This option has effect only for `bfin-elf' toolchain. Certain 13562 other options, such as `-mid-shared-library' and `-mfdpic', imply 13563 `-msim'. 13564 13565`-momit-leaf-frame-pointer' 13566 Don't keep the frame pointer in a register for leaf functions. 13567 This avoids the instructions to save, set up and restore frame 13568 pointers and makes an extra register available in leaf functions. 13569 The option `-fomit-frame-pointer' removes the frame pointer for 13570 all functions, which might make debugging harder. 13571 13572`-mspecld-anomaly' 13573 When enabled, the compiler ensures that the generated code does not 13574 contain speculative loads after jump instructions. If this option 13575 is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined. 13576 13577`-mno-specld-anomaly' 13578 Don't generate extra code to prevent speculative loads from 13579 occurring. 13580 13581`-mcsync-anomaly' 13582 When enabled, the compiler ensures that the generated code does not 13583 contain CSYNC or SSYNC instructions too soon after conditional 13584 branches. If this option is used, 13585 `__WORKAROUND_SPECULATIVE_SYNCS' is defined. 13586 13587`-mno-csync-anomaly' 13588 Don't generate extra code to prevent CSYNC or SSYNC instructions 13589 from occurring too soon after a conditional branch. 13590 13591`-mlow-64k' 13592 When enabled, the compiler is free to take advantage of the 13593 knowledge that the entire program fits into the low 64k of memory. 13594 13595`-mno-low-64k' 13596 Assume that the program is arbitrarily large. This is the default. 13597 13598`-mstack-check-l1' 13599 Do stack checking using information placed into L1 scratchpad 13600 memory by the uClinux kernel. 13601 13602`-mid-shared-library' 13603 Generate code that supports shared libraries via the library ID 13604 method. This allows for execute in place and shared libraries in 13605 an environment without virtual memory management. This option 13606 implies `-fPIC'. With a `bfin-elf' target, this option implies 13607 `-msim'. 13608 13609`-mno-id-shared-library' 13610 Generate code that doesn't assume ID-based shared libraries are 13611 being used. This is the default. 13612 13613`-mleaf-id-shared-library' 13614 Generate code that supports shared libraries via the library ID 13615 method, but assumes that this library or executable won't link 13616 against any other ID shared libraries. That allows the compiler 13617 to use faster code for jumps and calls. 13618 13619`-mno-leaf-id-shared-library' 13620 Do not assume that the code being compiled won't link against any 13621 ID shared libraries. Slower code is generated for jump and call 13622 insns. 13623 13624`-mshared-library-id=n' 13625 Specifies the identification number of the ID-based shared library 13626 being compiled. Specifying a value of 0 generates more compact 13627 code; specifying other values forces the allocation of that number 13628 to the current library but is no more space- or time-efficient 13629 than omitting this option. 13630 13631`-msep-data' 13632 Generate code that allows the data segment to be located in a 13633 different area of memory from the text segment. This allows for 13634 execute in place in an environment without virtual memory 13635 management by eliminating relocations against the text section. 13636 13637`-mno-sep-data' 13638 Generate code that assumes that the data segment follows the text 13639 segment. This is the default. 13640 13641`-mlong-calls' 13642`-mno-long-calls' 13643 Tells the compiler to perform function calls by first loading the 13644 address of the function into a register and then performing a 13645 subroutine call on this register. This switch is needed if the 13646 target function lies outside of the 24-bit addressing range of the 13647 offset-based version of subroutine call instruction. 13648 13649 This feature is not enabled by default. Specifying 13650 `-mno-long-calls' restores the default behavior. Note these 13651 switches have no effect on how the compiler generates code to 13652 handle function calls via function pointers. 13653 13654`-mfast-fp' 13655 Link with the fast floating-point library. This library relaxes 13656 some of the IEEE floating-point standard's rules for checking 13657 inputs against Not-a-Number (NAN), in the interest of performance. 13658 13659`-minline-plt' 13660 Enable inlining of PLT entries in function calls to functions that 13661 are not known to bind locally. It has no effect without `-mfdpic'. 13662 13663`-mmulticore' 13664 Build a standalone application for multicore Blackfin processors. 13665 This option causes proper start files and link scripts supporting 13666 multicore to be used, and defines the macro `__BFIN_MULTICORE'. 13667 It can only be used with `-mcpu=bf561[-SIREVISION]'. 13668 13669 This option can be used with `-mcorea' or `-mcoreb', which selects 13670 the one-application-per-core programming model. Without `-mcorea' 13671 or `-mcoreb', the single-application/dual-core programming model 13672 is used. In this model, the main function of Core B should be 13673 named as `coreb_main'. 13674 13675 If this option is not used, the single-core application programming 13676 model is used. 13677 13678`-mcorea' 13679 Build a standalone application for Core A of BF561 when using the 13680 one-application-per-core programming model. Proper start files and 13681 link scripts are used to support Core A, and the macro 13682 `__BFIN_COREA' is defined. This option can only be used in 13683 conjunction with `-mmulticore'. 13684 13685`-mcoreb' 13686 Build a standalone application for Core B of BF561 when using the 13687 one-application-per-core programming model. Proper start files and 13688 link scripts are used to support Core B, and the macro 13689 `__BFIN_COREB' is defined. When this option is used, `coreb_main' 13690 should be used instead of `main'. This option can only be used in 13691 conjunction with `-mmulticore'. 13692 13693`-msdram' 13694 Build a standalone application for SDRAM. Proper start files and 13695 link scripts are used to put the application into SDRAM, and the 13696 macro `__BFIN_SDRAM' is defined. The loader should initialize 13697 SDRAM before loading the application. 13698 13699`-micplb' 13700 Assume that ICPLBs are enabled at run time. This has an effect on 13701 certain anomaly workarounds. For Linux targets, the default is to 13702 assume ICPLBs are enabled; for standalone applications the default 13703 is off. 13704 13705 13706File: gcc.info, Node: C6X Options, Next: CRIS Options, Prev: Blackfin Options, Up: Submodel Options 13707 137083.17.7 C6X Options 13709------------------ 13710 13711`-march=NAME' 13712 This specifies the name of the target architecture. GCC uses this 13713 name to determine what kind of instructions it can emit when 13714 generating assembly code. Permissible names are: `c62x', `c64x', 13715 `c64x+', `c67x', `c67x+', `c674x'. 13716 13717`-mbig-endian' 13718 Generate code for a big-endian target. 13719 13720`-mlittle-endian' 13721 Generate code for a little-endian target. This is the default. 13722 13723`-msim' 13724 Choose startup files and linker script suitable for the simulator. 13725 13726`-msdata=default' 13727 Put small global and static data in the `.neardata' section, which 13728 is pointed to by register `B14'. Put small uninitialized global 13729 and static data in the `.bss' section, which is adjacent to the 13730 `.neardata' section. Put small read-only data into the `.rodata' 13731 section. The corresponding sections used for large pieces of data 13732 are `.fardata', `.far' and `.const'. 13733 13734`-msdata=all' 13735 Put all data, not just small objects, into the sections reserved 13736 for small data, and use addressing relative to the `B14' register 13737 to access them. 13738 13739`-msdata=none' 13740 Make no use of the sections reserved for small data, and use 13741 absolute addresses to access all data. Put all initialized global 13742 and static data in the `.fardata' section, and all uninitialized 13743 data in the `.far' section. Put all constant data into the 13744 `.const' section. 13745 13746 13747File: gcc.info, Node: CRIS Options, Next: CR16 Options, Prev: C6X Options, Up: Submodel Options 13748 137493.17.8 CRIS Options 13750------------------- 13751 13752These options are defined specifically for the CRIS ports. 13753 13754`-march=ARCHITECTURE-TYPE' 13755`-mcpu=ARCHITECTURE-TYPE' 13756 Generate code for the specified architecture. The choices for 13757 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 13758 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 13759 cris-axis-linux-gnu, where the default is `v10'. 13760 13761`-mtune=ARCHITECTURE-TYPE' 13762 Tune to ARCHITECTURE-TYPE everything applicable about the generated 13763 code, except for the ABI and the set of available instructions. 13764 The choices for ARCHITECTURE-TYPE are the same as for 13765 `-march=ARCHITECTURE-TYPE'. 13766 13767`-mmax-stack-frame=N' 13768 Warn when the stack frame of a function exceeds N bytes. 13769 13770`-metrax4' 13771`-metrax100' 13772 The options `-metrax4' and `-metrax100' are synonyms for 13773 `-march=v3' and `-march=v8' respectively. 13774 13775`-mmul-bug-workaround' 13776`-mno-mul-bug-workaround' 13777 Work around a bug in the `muls' and `mulu' instructions for CPU 13778 models where it applies. This option is active by default. 13779 13780`-mpdebug' 13781 Enable CRIS-specific verbose debug-related information in the 13782 assembly code. This option also has the effect of turning off the 13783 `#NO_APP' formatted-code indicator to the assembler at the 13784 beginning of the assembly file. 13785 13786`-mcc-init' 13787 Do not use condition-code results from previous instruction; 13788 always emit compare and test instructions before use of condition 13789 codes. 13790 13791`-mno-side-effects' 13792 Do not emit instructions with side effects in addressing modes 13793 other than post-increment. 13794 13795`-mstack-align' 13796`-mno-stack-align' 13797`-mdata-align' 13798`-mno-data-align' 13799`-mconst-align' 13800`-mno-const-align' 13801 These options (`no-' options) arrange (eliminate arrangements) for 13802 the stack frame, individual data and constants to be aligned for 13803 the maximum single data access size for the chosen CPU model. The 13804 default is to arrange for 32-bit alignment. ABI details such as 13805 structure layout are not affected by these options. 13806 13807`-m32-bit' 13808`-m16-bit' 13809`-m8-bit' 13810 Similar to the stack- data- and const-align options above, these 13811 options arrange for stack frame, writable data and constants to 13812 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 13813 alignment. 13814 13815`-mno-prologue-epilogue' 13816`-mprologue-epilogue' 13817 With `-mno-prologue-epilogue', the normal function prologue and 13818 epilogue which set up the stack frame are omitted and no return 13819 instructions or return sequences are generated in the code. Use 13820 this option only together with visual inspection of the compiled 13821 code: no warnings or errors are generated when call-saved 13822 registers must be saved, or storage for local variables needs to 13823 be allocated. 13824 13825`-mno-gotplt' 13826`-mgotplt' 13827 With `-fpic' and `-fPIC', don't generate (do generate) instruction 13828 sequences that load addresses for functions from the PLT part of 13829 the GOT rather than (traditional on other architectures) calls to 13830 the PLT. The default is `-mgotplt'. 13831 13832`-melf' 13833 Legacy no-op option only recognized with the cris-axis-elf and 13834 cris-axis-linux-gnu targets. 13835 13836`-mlinux' 13837 Legacy no-op option only recognized with the cris-axis-linux-gnu 13838 target. 13839 13840`-sim' 13841 This option, recognized for the cris-axis-elf, arranges to link 13842 with input-output functions from a simulator library. Code, 13843 initialized data and zero-initialized data are allocated 13844 consecutively. 13845 13846`-sim2' 13847 Like `-sim', but pass linker options to locate initialized data at 13848 0x40000000 and zero-initialized data at 0x80000000. 13849 13850 13851File: gcc.info, Node: CR16 Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 13852 138533.17.9 CR16 Options 13854------------------- 13855 13856These options are defined specifically for the CR16 ports. 13857 13858`-mmac' 13859 Enable the use of multiply-accumulate instructions. Disabled by 13860 default. 13861 13862`-mcr16cplus' 13863`-mcr16c' 13864 Generate code for CR16C or CR16C+ architecture. CR16C+ architecture 13865 is default. 13866 13867`-msim' 13868 Links the library libsim.a which is in compatible with simulator. 13869 Applicable to ELF compiler only. 13870 13871`-mint32' 13872 Choose integer type as 32-bit wide. 13873 13874`-mbit-ops' 13875 Generates `sbit'/`cbit' instructions for bit manipulations. 13876 13877`-mdata-model=MODEL' 13878 Choose a data model. The choices for MODEL are `near', `far' or 13879 `medium'. `medium' is default. However, `far' is not valid with 13880 `-mcr16c', as the CR16C architecture does not support the far data 13881 model. 13882 13883 13884File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CR16 Options, Up: Submodel Options 13885 138863.17.10 Darwin Options 13887---------------------- 13888 13889These options are defined for all architectures running the Darwin 13890operating system. 13891 13892 FSF GCC on Darwin does not create "fat" object files; it creates an 13893object file for the single architecture that GCC was built to target. 13894Apple's GCC on Darwin does create "fat" files if multiple `-arch' 13895options are used; it does so by running the compiler or linker multiple 13896times and joining the results together with `lipo'. 13897 13898 The subtype of the file created (like `ppc7400' or `ppc970' or `i686') 13899is determined by the flags that specify the ISA that GCC is targeting, 13900like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be 13901used to override this. 13902 13903 The Darwin tools vary in their behavior when presented with an ISA 13904mismatch. The assembler, `as', only permits instructions to be used 13905that are valid for the subtype of the file it is generating, so you 13906cannot put 64-bit instructions in a `ppc750' object file. The linker 13907for shared libraries, `/usr/bin/libtool', fails and prints an error if 13908asked to create a shared library with a less restrictive subtype than 13909its input files (for instance, trying to put a `ppc970' object file in 13910a `ppc7400' library). The linker for executables, `ld', quietly gives 13911the executable the most restrictive subtype of any of its input files. 13912 13913`-FDIR' 13914 Add the framework directory DIR to the head of the list of 13915 directories to be searched for header files. These directories are 13916 interleaved with those specified by `-I' options and are scanned 13917 in a left-to-right order. 13918 13919 A framework directory is a directory with frameworks in it. A 13920 framework is a directory with a `Headers' and/or `PrivateHeaders' 13921 directory contained directly in it that ends in `.framework'. The 13922 name of a framework is the name of this directory excluding the 13923 `.framework'. Headers associated with the framework are found in 13924 one of those two directories, with `Headers' being searched first. 13925 A subframework is a framework directory that is in a framework's 13926 `Frameworks' directory. Includes of subframework headers can only 13927 appear in a header of a framework that contains the subframework, 13928 or in a sibling subframework header. Two subframeworks are 13929 siblings if they occur in the same framework. A subframework 13930 should not have the same name as a framework; a warning is issued 13931 if this is violated. Currently a subframework cannot have 13932 subframeworks; in the future, the mechanism may be extended to 13933 support this. The standard frameworks can be found in 13934 `/System/Library/Frameworks' and `/Library/Frameworks'. An 13935 example include looks like `#include <Framework/header.h>', where 13936 `Framework' denotes the name of the framework and `header.h' is 13937 found in the `PrivateHeaders' or `Headers' directory. 13938 13939`-iframeworkDIR' 13940 Like `-F' except the directory is a treated as a system directory. 13941 The main difference between this `-iframework' and `-F' is that 13942 with `-iframework' the compiler does not warn about constructs 13943 contained within header files found via DIR. This option is valid 13944 only for the C family of languages. 13945 13946`-gused' 13947 Emit debugging information for symbols that are used. For stabs 13948 debugging format, this enables `-feliminate-unused-debug-symbols'. 13949 This is by default ON. 13950 13951`-gfull' 13952 Emit debugging information for all symbols and types. 13953 13954`-mmacosx-version-min=VERSION' 13955 The earliest version of MacOS X that this executable will run on 13956 is VERSION. Typical values of VERSION include `10.1', `10.2', and 13957 `10.3.9'. 13958 13959 If the compiler was built to use the system's headers by default, 13960 then the default for this option is the system version on which the 13961 compiler is running, otherwise the default is to make choices that 13962 are compatible with as many systems and code bases as possible. 13963 13964`-mkernel' 13965 Enable kernel development mode. The `-mkernel' option sets 13966 `-static', `-fno-common', `-fno-use-cxa-atexit', 13967 `-fno-exceptions', `-fno-non-call-exceptions', `-fapple-kext', 13968 `-fno-weak' and `-fno-rtti' where applicable. This mode also sets 13969 `-mno-altivec', `-msoft-float', `-fno-builtin' and `-mlong-branch' 13970 for PowerPC targets. 13971 13972`-mone-byte-bool' 13973 Override the defaults for `bool' so that `sizeof(bool)==1'. By 13974 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC 13975 and `1' when compiling for Darwin/x86, so this option has no 13976 effect on x86. 13977 13978 *Warning:* The `-mone-byte-bool' switch causes GCC to generate 13979 code that is not binary compatible with code generated without 13980 that switch. Using this switch may require recompiling all other 13981 modules in a program, including system libraries. Use this switch 13982 to conform to a non-default data model. 13983 13984`-mfix-and-continue' 13985`-ffix-and-continue' 13986`-findirect-data' 13987 Generate code suitable for fast turnaround development, such as to 13988 allow GDB to dynamically load `.o' files into already-running 13989 programs. `-findirect-data' and `-ffix-and-continue' are provided 13990 for backwards compatibility. 13991 13992`-all_load' 13993 Loads all members of static archive libraries. See man ld(1) for 13994 more information. 13995 13996`-arch_errors_fatal' 13997 Cause the errors having to do with files that have the wrong 13998 architecture to be fatal. 13999 14000`-bind_at_load' 14001 Causes the output file to be marked such that the dynamic linker 14002 will bind all undefined references when the file is loaded or 14003 launched. 14004 14005`-bundle' 14006 Produce a Mach-o bundle format file. See man ld(1) for more 14007 information. 14008 14009`-bundle_loader EXECUTABLE' 14010 This option specifies the EXECUTABLE that will load the build 14011 output file being linked. See man ld(1) for more information. 14012 14013`-dynamiclib' 14014 When passed this option, GCC produces a dynamic library instead of 14015 an executable when linking, using the Darwin `libtool' command. 14016 14017`-force_cpusubtype_ALL' 14018 This causes GCC's output file to have the `ALL' subtype, instead of 14019 one controlled by the `-mcpu' or `-march' option. 14020 14021`-allowable_client CLIENT_NAME' 14022`-client_name' 14023`-compatibility_version' 14024`-current_version' 14025`-dead_strip' 14026`-dependency-file' 14027`-dylib_file' 14028`-dylinker_install_name' 14029`-dynamic' 14030`-exported_symbols_list' 14031`-filelist' 14032`-flat_namespace' 14033`-force_flat_namespace' 14034`-headerpad_max_install_names' 14035`-image_base' 14036`-init' 14037`-install_name' 14038`-keep_private_externs' 14039`-multi_module' 14040`-multiply_defined' 14041`-multiply_defined_unused' 14042`-noall_load' 14043`-no_dead_strip_inits_and_terms' 14044`-nofixprebinding' 14045`-nomultidefs' 14046`-noprebind' 14047`-noseglinkedit' 14048`-pagezero_size' 14049`-prebind' 14050`-prebind_all_twolevel_modules' 14051`-private_bundle' 14052`-read_only_relocs' 14053`-sectalign' 14054`-sectobjectsymbols' 14055`-whyload' 14056`-seg1addr' 14057`-sectcreate' 14058`-sectobjectsymbols' 14059`-sectorder' 14060`-segaddr' 14061`-segs_read_only_addr' 14062`-segs_read_write_addr' 14063`-seg_addr_table' 14064`-seg_addr_table_filename' 14065`-seglinkedit' 14066`-segprot' 14067`-segs_read_only_addr' 14068`-segs_read_write_addr' 14069`-single_module' 14070`-static' 14071`-sub_library' 14072`-sub_umbrella' 14073`-twolevel_namespace' 14074`-umbrella' 14075`-undefined' 14076`-unexported_symbols_list' 14077`-weak_reference_mismatches' 14078`-whatsloaded' 14079 These options are passed to the Darwin linker. The Darwin linker 14080 man page describes them in detail. 14081 14082 14083File: gcc.info, Node: DEC Alpha Options, Next: FR30 Options, Prev: Darwin Options, Up: Submodel Options 14084 140853.17.11 DEC Alpha Options 14086------------------------- 14087 14088These `-m' options are defined for the DEC Alpha implementations: 14089 14090`-mno-soft-float' 14091`-msoft-float' 14092 Use (do not use) the hardware floating-point instructions for 14093 floating-point operations. When `-msoft-float' is specified, 14094 functions in `libgcc.a' are used to perform floating-point 14095 operations. Unless they are replaced by routines that emulate the 14096 floating-point operations, or compiled in such a way as to call 14097 such emulations routines, these routines issue floating-point 14098 operations. If you are compiling for an Alpha without 14099 floating-point operations, you must ensure that the library is 14100 built so as not to call them. 14101 14102 Note that Alpha implementations without floating-point operations 14103 are required to have floating-point registers. 14104 14105`-mfp-reg' 14106`-mno-fp-regs' 14107 Generate code that uses (does not use) the floating-point register 14108 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 14109 register set is not used, floating-point operands are passed in 14110 integer registers as if they were integers and floating-point 14111 results are passed in `$0' instead of `$f0'. This is a 14112 non-standard calling sequence, so any function with a 14113 floating-point argument or return value called by code compiled 14114 with `-mno-fp-regs' must also be compiled with that option. 14115 14116 A typical use of this option is building a kernel that does not 14117 use, and hence need not save and restore, any floating-point 14118 registers. 14119 14120`-mieee' 14121 The Alpha architecture implements floating-point hardware 14122 optimized for maximum performance. It is mostly compliant with 14123 the IEEE floating-point standard. However, for full compliance, 14124 software assistance is required. This option generates code fully 14125 IEEE-compliant code _except_ that the INEXACT-FLAG is not 14126 maintained (see below). If this option is turned on, the 14127 preprocessor macro `_IEEE_FP' is defined during compilation. The 14128 resulting code is less efficient but is able to correctly support 14129 denormalized numbers and exceptional IEEE values such as 14130 not-a-number and plus/minus infinity. Other Alpha compilers call 14131 this option `-ieee_with_no_inexact'. 14132 14133`-mieee-with-inexact' 14134 This is like `-mieee' except the generated code also maintains the 14135 IEEE INEXACT-FLAG. Turning on this option causes the generated 14136 code to implement fully-compliant IEEE math. In addition to 14137 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 14138 On some Alpha implementations the resulting code may execute 14139 significantly slower than the code generated by default. Since 14140 there is very little code that depends on the INEXACT-FLAG, you 14141 should normally not specify this option. Other Alpha compilers 14142 call this option `-ieee_with_inexact'. 14143 14144`-mfp-trap-mode=TRAP-MODE' 14145 This option controls what floating-point related traps are enabled. 14146 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 14147 trap mode can be set to one of four values: 14148 14149 `n' 14150 This is the default (normal) setting. The only traps that 14151 are enabled are the ones that cannot be disabled in software 14152 (e.g., division by zero trap). 14153 14154 `u' 14155 In addition to the traps enabled by `n', underflow traps are 14156 enabled as well. 14157 14158 `su' 14159 Like `u', but the instructions are marked to be safe for 14160 software completion (see Alpha architecture manual for 14161 details). 14162 14163 `sui' 14164 Like `su', but inexact traps are enabled as well. 14165 14166`-mfp-rounding-mode=ROUNDING-MODE' 14167 Selects the IEEE rounding mode. Other Alpha compilers call this 14168 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 14169 14170 `n' 14171 Normal IEEE rounding mode. Floating-point numbers are 14172 rounded towards the nearest machine number or towards the 14173 even machine number in case of a tie. 14174 14175 `m' 14176 Round towards minus infinity. 14177 14178 `c' 14179 Chopped rounding mode. Floating-point numbers are rounded 14180 towards zero. 14181 14182 `d' 14183 Dynamic rounding mode. A field in the floating-point control 14184 register (FPCR, see Alpha architecture reference manual) 14185 controls the rounding mode in effect. The C library 14186 initializes this register for rounding towards plus infinity. 14187 Thus, unless your program modifies the FPCR, `d' corresponds 14188 to round towards plus infinity. 14189 14190`-mtrap-precision=TRAP-PRECISION' 14191 In the Alpha architecture, floating-point traps are imprecise. 14192 This means without software assistance it is impossible to recover 14193 from a floating trap and program execution normally needs to be 14194 terminated. GCC can generate code that can assist operating 14195 system trap handlers in determining the exact location that caused 14196 a floating-point trap. Depending on the requirements of an 14197 application, different levels of precisions can be selected: 14198 14199 `p' 14200 Program precision. This option is the default and means a 14201 trap handler can only identify which program caused a 14202 floating-point exception. 14203 14204 `f' 14205 Function precision. The trap handler can determine the 14206 function that caused a floating-point exception. 14207 14208 `i' 14209 Instruction precision. The trap handler can determine the 14210 exact instruction that caused a floating-point exception. 14211 14212 Other Alpha compilers provide the equivalent options called 14213 `-scope_safe' and `-resumption_safe'. 14214 14215`-mieee-conformant' 14216 This option marks the generated code as IEEE conformant. You must 14217 not use this option unless you also specify `-mtrap-precision=i' 14218 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 14219 effect is to emit the line `.eflag 48' in the function prologue of 14220 the generated assembly file. 14221 14222`-mbuild-constants' 14223 Normally GCC examines a 32- or 64-bit integer constant to see if 14224 it can construct it from smaller constants in two or three 14225 instructions. If it cannot, it outputs the constant as a literal 14226 and generates code to load it from the data segment at run time. 14227 14228 Use this option to require GCC to construct _all_ integer constants 14229 using code, even if it takes more instructions (the maximum is 14230 six). 14231 14232 You typically use this option to build a shared library dynamic 14233 loader. Itself a shared library, it must relocate itself in memory 14234 before it can find the variables and constants in its own data 14235 segment. 14236 14237`-mbwx' 14238`-mno-bwx' 14239`-mcix' 14240`-mno-cix' 14241`-mfix' 14242`-mno-fix' 14243`-mmax' 14244`-mno-max' 14245 Indicate whether GCC should generate code to use the optional BWX, 14246 CIX, FIX and MAX instruction sets. The default is to use the 14247 instruction sets supported by the CPU type specified via `-mcpu=' 14248 option or that of the CPU on which GCC was built if none is 14249 specified. 14250 14251`-mfloat-vax' 14252`-mfloat-ieee' 14253 Generate code that uses (does not use) VAX F and G floating-point 14254 arithmetic instead of IEEE single and double precision. 14255 14256`-mexplicit-relocs' 14257`-mno-explicit-relocs' 14258 Older Alpha assemblers provided no way to generate symbol 14259 relocations except via assembler macros. Use of these macros does 14260 not allow optimal instruction scheduling. GNU binutils as of 14261 version 2.12 supports a new syntax that allows the compiler to 14262 explicitly mark which relocations should apply to which 14263 instructions. This option is mostly useful for debugging, as GCC 14264 detects the capabilities of the assembler when it is built and 14265 sets the default accordingly. 14266 14267`-msmall-data' 14268`-mlarge-data' 14269 When `-mexplicit-relocs' is in effect, static data is accessed via 14270 "gp-relative" relocations. When `-msmall-data' is used, objects 8 14271 bytes long or smaller are placed in a "small data area" (the 14272 `.sdata' and `.sbss' sections) and are accessed via 16-bit 14273 relocations off of the `$gp' register. This limits the size of 14274 the small data area to 64KB, but allows the variables to be 14275 directly accessed via a single instruction. 14276 14277 The default is `-mlarge-data'. With this option the data area is 14278 limited to just below 2GB. Programs that require more than 2GB of 14279 data must use `malloc' or `mmap' to allocate the data in the heap 14280 instead of in the program's data segment. 14281 14282 When generating code for shared libraries, `-fpic' implies 14283 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 14284 14285`-msmall-text' 14286`-mlarge-text' 14287 When `-msmall-text' is used, the compiler assumes that the code of 14288 the entire program (or shared library) fits in 4MB, and is thus 14289 reachable with a branch instruction. When `-msmall-data' is used, 14290 the compiler can assume that all local symbols share the same 14291 `$gp' value, and thus reduce the number of instructions required 14292 for a function call from 4 to 1. 14293 14294 The default is `-mlarge-text'. 14295 14296`-mcpu=CPU_TYPE' 14297 Set the instruction set and instruction scheduling parameters for 14298 machine type CPU_TYPE. You can specify either the `EV' style name 14299 or the corresponding chip number. GCC supports scheduling 14300 parameters for the EV4, EV5 and EV6 family of processors and 14301 chooses the default values for the instruction set from the 14302 processor you specify. If you do not specify a processor type, 14303 GCC defaults to the processor on which the compiler was built. 14304 14305 Supported values for CPU_TYPE are 14306 14307 `ev4' 14308 `ev45' 14309 `21064' 14310 Schedules as an EV4 and has no instruction set extensions. 14311 14312 `ev5' 14313 `21164' 14314 Schedules as an EV5 and has no instruction set extensions. 14315 14316 `ev56' 14317 `21164a' 14318 Schedules as an EV5 and supports the BWX extension. 14319 14320 `pca56' 14321 `21164pc' 14322 `21164PC' 14323 Schedules as an EV5 and supports the BWX and MAX extensions. 14324 14325 `ev6' 14326 `21264' 14327 Schedules as an EV6 and supports the BWX, FIX, and MAX 14328 extensions. 14329 14330 `ev67' 14331 `21264a' 14332 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 14333 extensions. 14334 14335 Native toolchains also support the value `native', which selects 14336 the best architecture option for the host processor. 14337 `-mcpu=native' has no effect if GCC does not recognize the 14338 processor. 14339 14340`-mtune=CPU_TYPE' 14341 Set only the instruction scheduling parameters for machine type 14342 CPU_TYPE. The instruction set is not changed. 14343 14344 Native toolchains also support the value `native', which selects 14345 the best architecture option for the host processor. 14346 `-mtune=native' has no effect if GCC does not recognize the 14347 processor. 14348 14349`-mmemory-latency=TIME' 14350 Sets the latency the scheduler should assume for typical memory 14351 references as seen by the application. This number is highly 14352 dependent on the memory access patterns used by the application 14353 and the size of the external cache on the machine. 14354 14355 Valid options for TIME are 14356 14357 `NUMBER' 14358 A decimal number representing clock cycles. 14359 14360 `L1' 14361 `L2' 14362 `L3' 14363 `main' 14364 The compiler contains estimates of the number of clock cycles 14365 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 14366 (also called Dcache, Scache, and Bcache), as well as to main 14367 memory. Note that L3 is only valid for EV5. 14368 14369 14370 14371File: gcc.info, Node: FR30 Options, Next: FRV Options, Prev: DEC Alpha Options, Up: Submodel Options 14372 143733.17.12 FR30 Options 14374-------------------- 14375 14376These options are defined specifically for the FR30 port. 14377 14378`-msmall-model' 14379 Use the small address space model. This can produce smaller code, 14380 but it does assume that all symbolic values and addresses fit into 14381 a 20-bit range. 14382 14383`-mno-lsim' 14384 Assume that runtime support has been provided and so there is no 14385 need to include the simulator library (`libsim.a') on the linker 14386 command line. 14387 14388 14389 14390File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: FR30 Options, Up: Submodel Options 14391 143923.17.13 FRV Options 14393------------------- 14394 14395`-mgpr-32' 14396 Only use the first 32 general-purpose registers. 14397 14398`-mgpr-64' 14399 Use all 64 general-purpose registers. 14400 14401`-mfpr-32' 14402 Use only the first 32 floating-point registers. 14403 14404`-mfpr-64' 14405 Use all 64 floating-point registers. 14406 14407`-mhard-float' 14408 Use hardware instructions for floating-point operations. 14409 14410`-msoft-float' 14411 Use library routines for floating-point operations. 14412 14413`-malloc-cc' 14414 Dynamically allocate condition code registers. 14415 14416`-mfixed-cc' 14417 Do not try to dynamically allocate condition code registers, only 14418 use `icc0' and `fcc0'. 14419 14420`-mdword' 14421 Change ABI to use double word insns. 14422 14423`-mno-dword' 14424 Do not use double word instructions. 14425 14426`-mdouble' 14427 Use floating-point double instructions. 14428 14429`-mno-double' 14430 Do not use floating-point double instructions. 14431 14432`-mmedia' 14433 Use media instructions. 14434 14435`-mno-media' 14436 Do not use media instructions. 14437 14438`-mmuladd' 14439 Use multiply and add/subtract instructions. 14440 14441`-mno-muladd' 14442 Do not use multiply and add/subtract instructions. 14443 14444`-mfdpic' 14445 Select the FDPIC ABI, which uses function descriptors to represent 14446 pointers to functions. Without any PIC/PIE-related options, it 14447 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries 14448 and small data are within a 12-bit range from the GOT base 14449 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32 14450 bits. With a `bfin-elf' target, this option implies `-msim'. 14451 14452`-minline-plt' 14453 Enable inlining of PLT entries in function calls to functions that 14454 are not known to bind locally. It has no effect without `-mfdpic'. 14455 It's enabled by default if optimizing for speed and compiling for 14456 shared libraries (i.e., `-fPIC' or `-fpic'), or when an 14457 optimization option such as `-O3' or above is present in the 14458 command line. 14459 14460`-mTLS' 14461 Assume a large TLS segment when generating thread-local code. 14462 14463`-mtls' 14464 Do not assume a large TLS segment when generating thread-local 14465 code. 14466 14467`-mgprel-ro' 14468 Enable the use of `GPREL' relocations in the FDPIC ABI for data 14469 that is known to be in read-only sections. It's enabled by 14470 default, except for `-fpic' or `-fpie': even though it may help 14471 make the global offset table smaller, it trades 1 instruction for 14472 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one 14473 of which may be shared by multiple symbols, and it avoids the need 14474 for a GOT entry for the referenced symbol, so it's more likely to 14475 be a win. If it is not, `-mno-gprel-ro' can be used to disable it. 14476 14477`-multilib-library-pic' 14478 Link with the (library, not FD) pic libraries. It's implied by 14479 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without 14480 `-mfdpic'. You should never have to use it explicitly. 14481 14482`-mlinked-fp' 14483 Follow the EABI requirement of always creating a frame pointer 14484 whenever a stack frame is allocated. This option is enabled by 14485 default and can be disabled with `-mno-linked-fp'. 14486 14487`-mlong-calls' 14488 Use indirect addressing to call functions outside the current 14489 compilation unit. This allows the functions to be placed anywhere 14490 within the 32-bit address space. 14491 14492`-malign-labels' 14493 Try to align labels to an 8-byte boundary by inserting NOPs into 14494 the previous packet. This option only has an effect when VLIW 14495 packing is enabled. It doesn't create new packets; it merely adds 14496 NOPs to existing ones. 14497 14498`-mlibrary-pic' 14499 Generate position-independent EABI code. 14500 14501`-macc-4' 14502 Use only the first four media accumulator registers. 14503 14504`-macc-8' 14505 Use all eight media accumulator registers. 14506 14507`-mpack' 14508 Pack VLIW instructions. 14509 14510`-mno-pack' 14511 Do not pack VLIW instructions. 14512 14513`-mno-eflags' 14514 Do not mark ABI switches in e_flags. 14515 14516`-mcond-move' 14517 Enable the use of conditional-move instructions (default). 14518 14519 This switch is mainly for debugging the compiler and will likely 14520 be removed in a future version. 14521 14522`-mno-cond-move' 14523 Disable the use of conditional-move instructions. 14524 14525 This switch is mainly for debugging the compiler and will likely 14526 be removed in a future version. 14527 14528`-mscc' 14529 Enable the use of conditional set instructions (default). 14530 14531 This switch is mainly for debugging the compiler and will likely 14532 be removed in a future version. 14533 14534`-mno-scc' 14535 Disable the use of conditional set instructions. 14536 14537 This switch is mainly for debugging the compiler and will likely 14538 be removed in a future version. 14539 14540`-mcond-exec' 14541 Enable the use of conditional execution (default). 14542 14543 This switch is mainly for debugging the compiler and will likely 14544 be removed in a future version. 14545 14546`-mno-cond-exec' 14547 Disable the use of conditional execution. 14548 14549 This switch is mainly for debugging the compiler and will likely 14550 be removed in a future version. 14551 14552`-mvliw-branch' 14553 Run a pass to pack branches into VLIW instructions (default). 14554 14555 This switch is mainly for debugging the compiler and will likely 14556 be removed in a future version. 14557 14558`-mno-vliw-branch' 14559 Do not run a pass to pack branches into VLIW instructions. 14560 14561 This switch is mainly for debugging the compiler and will likely 14562 be removed in a future version. 14563 14564`-mmulti-cond-exec' 14565 Enable optimization of `&&' and `||' in conditional execution 14566 (default). 14567 14568 This switch is mainly for debugging the compiler and will likely 14569 be removed in a future version. 14570 14571`-mno-multi-cond-exec' 14572 Disable optimization of `&&' and `||' in conditional execution. 14573 14574 This switch is mainly for debugging the compiler and will likely 14575 be removed in a future version. 14576 14577`-mnested-cond-exec' 14578 Enable nested conditional execution optimizations (default). 14579 14580 This switch is mainly for debugging the compiler and will likely 14581 be removed in a future version. 14582 14583`-mno-nested-cond-exec' 14584 Disable nested conditional execution optimizations. 14585 14586 This switch is mainly for debugging the compiler and will likely 14587 be removed in a future version. 14588 14589`-moptimize-membar' 14590 This switch removes redundant `membar' instructions from the 14591 compiler-generated code. It is enabled by default. 14592 14593`-mno-optimize-membar' 14594 This switch disables the automatic removal of redundant `membar' 14595 instructions from the generated code. 14596 14597`-mtomcat-stats' 14598 Cause gas to print out tomcat statistics. 14599 14600`-mcpu=CPU' 14601 Select the processor type for which to generate code. Possible 14602 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405', 14603 `fr400', `fr300' and `simple'. 14604 14605 14606 14607File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 14608 146093.17.14 GNU/Linux Options 14610------------------------- 14611 14612These `-m' options are defined for GNU/Linux targets: 14613 14614`-mglibc' 14615 Use the GNU C library. This is the default except on 14616 `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets. 14617 14618`-muclibc' 14619 Use uClibc C library. This is the default on `*-*-linux-*uclibc*' 14620 targets. 14621 14622`-mbionic' 14623 Use Bionic C library. This is the default on 14624 `*-*-linux-*android*' targets. 14625 14626`-mandroid' 14627 Compile code compatible with Android platform. This is the 14628 default on `*-*-linux-*android*' targets. 14629 14630 When compiling, this option enables `-mbionic', `-fPIC', 14631 `-fno-exceptions' and `-fno-rtti' by default. When linking, this 14632 option makes the GCC driver pass Android-specific options to the 14633 linker. Finally, this option causes the preprocessor macro 14634 `__ANDROID__' to be defined. 14635 14636`-tno-android-cc' 14637 Disable compilation effects of `-mandroid', i.e., do not enable 14638 `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default. 14639 14640`-tno-android-ld' 14641 Disable linking effects of `-mandroid', i.e., pass standard Linux 14642 linking options to the linker. 14643 14644 14645 14646File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 14647 146483.17.15 H8/300 Options 14649---------------------- 14650 14651These `-m' options are defined for the H8/300 implementations: 14652 14653`-mrelax' 14654 Shorten some address references at link time, when possible; uses 14655 the linker option `-relax'. *Note `ld' and the H8/300: 14656 (ld)H8/300, for a fuller description. 14657 14658`-mh' 14659 Generate code for the H8/300H. 14660 14661`-ms' 14662 Generate code for the H8S. 14663 14664`-mn' 14665 Generate code for the H8S and H8/300H in the normal mode. This 14666 switch must be used either with `-mh' or `-ms'. 14667 14668`-ms2600' 14669 Generate code for the H8S/2600. This switch must be used with 14670 `-ms'. 14671 14672`-mexr' 14673 Extended registers are stored on stack before execution of function 14674 with monitor attribute. Default option is `-mexr'. This option is 14675 valid only for H8S targets. 14676 14677`-mno-exr' 14678 Extended registers are not stored on stack before execution of 14679 function with monitor attribute. Default option is `-mno-exr'. 14680 This option is valid only for H8S targets. 14681 14682`-mint32' 14683 Make `int' data 32 bits by default. 14684 14685`-malign-300' 14686 On the H8/300H and H8S, use the same alignment rules as for the 14687 H8/300. The default for the H8/300H and H8S is to align longs and 14688 floats on 4-byte boundaries. `-malign-300' causes them to be 14689 aligned on 2-byte boundaries. This option has no effect on the 14690 H8/300. 14691 14692 14693File: gcc.info, Node: HPPA Options, Next: IA-64 Options, Prev: H8/300 Options, Up: Submodel Options 14694 146953.17.16 HPPA Options 14696-------------------- 14697 14698These `-m' options are defined for the HPPA family of computers: 14699 14700`-march=ARCHITECTURE-TYPE' 14701 Generate code for the specified architecture. The choices for 14702 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 14703 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 14704 an HP-UX system to determine the proper architecture option for 14705 your machine. Code compiled for lower numbered architectures runs 14706 on higher numbered architectures, but not the other way around. 14707 14708`-mpa-risc-1-0' 14709`-mpa-risc-1-1' 14710`-mpa-risc-2-0' 14711 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 14712 respectively. 14713 14714`-mjump-in-delay' 14715 This option is ignored and provided for compatibility purposes 14716 only. 14717 14718`-mdisable-fpregs' 14719 Prevent floating-point registers from being used in any manner. 14720 This is necessary for compiling kernels that perform lazy context 14721 switching of floating-point registers. If you use this option and 14722 attempt to perform floating-point operations, the compiler aborts. 14723 14724`-mdisable-indexing' 14725 Prevent the compiler from using indexing address modes. This 14726 avoids some rather obscure problems when compiling MIG generated 14727 code under MACH. 14728 14729`-mno-space-regs' 14730 Generate code that assumes the target has no space registers. 14731 This allows GCC to generate faster indirect calls and use unscaled 14732 index address modes. 14733 14734 Such code is suitable for level 0 PA systems and kernels. 14735 14736`-mfast-indirect-calls' 14737 Generate code that assumes calls never cross space boundaries. 14738 This allows GCC to emit code that performs faster indirect calls. 14739 14740 This option does not work in the presence of shared libraries or 14741 nested functions. 14742 14743`-mfixed-range=REGISTER-RANGE' 14744 Generate code treating the given register range as fixed registers. 14745 A fixed register is one that the register allocator cannot use. 14746 This is useful when compiling kernel code. A register range is 14747 specified as two registers separated by a dash. Multiple register 14748 ranges can be specified separated by a comma. 14749 14750`-mlong-load-store' 14751 Generate 3-instruction load and store sequences as sometimes 14752 required by the HP-UX 10 linker. This is equivalent to the `+k' 14753 option to the HP compilers. 14754 14755`-mportable-runtime' 14756 Use the portable calling conventions proposed by HP for ELF 14757 systems. 14758 14759`-mgas' 14760 Enable the use of assembler directives only GAS understands. 14761 14762`-mschedule=CPU-TYPE' 14763 Schedule code according to the constraints for the machine type 14764 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 14765 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 14766 HP-UX system to determine the proper scheduling option for your 14767 machine. The default scheduling is `8000'. 14768 14769`-mlinker-opt' 14770 Enable the optimization pass in the HP-UX linker. Note this makes 14771 symbolic debugging impossible. It also triggers a bug in the 14772 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 14773 messages when linking some programs. 14774 14775`-msoft-float' 14776 Generate output containing library calls for floating point. 14777 *Warning:* the requisite libraries are not available for all HPPA 14778 targets. Normally the facilities of the machine's usual C 14779 compiler are used, but this cannot be done directly in 14780 cross-compilation. You must make your own arrangements to provide 14781 suitable library functions for cross-compilation. 14782 14783 `-msoft-float' changes the calling convention in the output file; 14784 therefore, it is only useful if you compile _all_ of a program with 14785 this option. In particular, you need to compile `libgcc.a', the 14786 library that comes with GCC, with `-msoft-float' in order for this 14787 to work. 14788 14789`-msio' 14790 Generate the predefine, `_SIO', for server IO. The default is 14791 `-mwsio'. This generates the predefines, `__hp9000s700', 14792 `__hp9000s700__' and `_WSIO', for workstation IO. These options 14793 are available under HP-UX and HI-UX. 14794 14795`-mgnu-ld' 14796 Use options specific to GNU `ld'. This passes `-shared' to `ld' 14797 when building a shared library. It is the default when GCC is 14798 configured, explicitly or implicitly, with the GNU linker. This 14799 option does not affect which `ld' is called; it only changes what 14800 parameters are passed to that `ld'. The `ld' that is called is 14801 determined by the `--with-ld' configure option, GCC's program 14802 search path, and finally by the user's `PATH'. The linker used by 14803 GCC can be printed using `which `gcc -print-prog-name=ld`'. This 14804 option is only available on the 64-bit HP-UX GCC, i.e. configured 14805 with `hppa*64*-*-hpux*'. 14806 14807`-mhp-ld' 14808 Use options specific to HP `ld'. This passes `-b' to `ld' when 14809 building a shared library and passes `+Accept TypeMismatch' to 14810 `ld' on all links. It is the default when GCC is configured, 14811 explicitly or implicitly, with the HP linker. This option does 14812 not affect which `ld' is called; it only changes what parameters 14813 are passed to that `ld'. The `ld' that is called is determined by 14814 the `--with-ld' configure option, GCC's program search path, and 14815 finally by the user's `PATH'. The linker used by GCC can be 14816 printed using `which `gcc -print-prog-name=ld`'. This option is 14817 only available on the 64-bit HP-UX GCC, i.e. configured with 14818 `hppa*64*-*-hpux*'. 14819 14820`-mlong-calls' 14821 Generate code that uses long call sequences. This ensures that a 14822 call is always able to reach linker generated stubs. The default 14823 is to generate long calls only when the distance from the call 14824 site to the beginning of the function or translation unit, as the 14825 case may be, exceeds a predefined limit set by the branch type 14826 being used. The limits for normal calls are 7,600,000 and 240,000 14827 bytes, respectively for the PA 2.0 and PA 1.X architectures. 14828 Sibcalls are always limited at 240,000 bytes. 14829 14830 Distances are measured from the beginning of functions when using 14831 the `-ffunction-sections' option, or when using the `-mgas' and 14832 `-mno-portable-runtime' options together under HP-UX with the SOM 14833 linker. 14834 14835 It is normally not desirable to use this option as it degrades 14836 performance. However, it may be useful in large applications, 14837 particularly when partial linking is used to build the application. 14838 14839 The types of long calls used depends on the capabilities of the 14840 assembler and linker, and the type of code being generated. The 14841 impact on systems that support long absolute calls, and long pic 14842 symbol-difference or pc-relative calls should be relatively small. 14843 However, an indirect call is used on 32-bit ELF systems in pic code 14844 and it is quite long. 14845 14846`-munix=UNIX-STD' 14847 Generate compiler predefines and select a startfile for the 14848 specified UNIX standard. The choices for UNIX-STD are `93', `95' 14849 and `98'. `93' is supported on all HP-UX versions. `95' is 14850 available on HP-UX 10.10 and later. `98' is available on HP-UX 14851 11.11 and later. The default values are `93' for HP-UX 10.00, 14852 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and 14853 later. 14854 14855 `-munix=93' provides the same predefines as GCC 3.3 and 3.4. 14856 `-munix=95' provides additional predefines for `XOPEN_UNIX' and 14857 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'. 14858 `-munix=98' provides additional predefines for `_XOPEN_UNIX', 14859 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and 14860 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'. 14861 14862 It is _important_ to note that this option changes the interfaces 14863 for various library routines. It also affects the operational 14864 behavior of the C library. Thus, _extreme_ care is needed in 14865 using this option. 14866 14867 Library code that is intended to operate with more than one UNIX 14868 standard must test, set and restore the variable 14869 `__xpg4_extended_mask' as appropriate. Most GNU software doesn't 14870 provide this capability. 14871 14872`-nolibdld' 14873 Suppress the generation of link options to search libdld.sl when 14874 the `-static' option is specified on HP-UX 10 and later. 14875 14876`-static' 14877 The HP-UX implementation of setlocale in libc has a dependency on 14878 libdld.sl. There isn't an archive version of libdld.sl. Thus, 14879 when the `-static' option is specified, special link options are 14880 needed to resolve this dependency. 14881 14882 On HP-UX 10 and later, the GCC driver adds the necessary options to 14883 link with libdld.sl when the `-static' option is specified. This 14884 causes the resulting binary to be dynamic. On the 64-bit port, 14885 the linkers generate dynamic binaries by default in any case. The 14886 `-nolibdld' option can be used to prevent the GCC driver from 14887 adding these link options. 14888 14889`-threads' 14890 Add support for multithreading with the "dce thread" library under 14891 HP-UX. This option sets flags for both the preprocessor and 14892 linker. 14893 14894 14895File: gcc.info, Node: IA-64 Options, Next: LM32 Options, Prev: HPPA Options, Up: Submodel Options 14896 148973.17.17 IA-64 Options 14898--------------------- 14899 14900These are the `-m' options defined for the Intel IA-64 architecture. 14901 14902`-mbig-endian' 14903 Generate code for a big-endian target. This is the default for 14904 HP-UX. 14905 14906`-mlittle-endian' 14907 Generate code for a little-endian target. This is the default for 14908 AIX5 and GNU/Linux. 14909 14910`-mgnu-as' 14911`-mno-gnu-as' 14912 Generate (or don't) code for the GNU assembler. This is the 14913 default. 14914 14915`-mgnu-ld' 14916`-mno-gnu-ld' 14917 Generate (or don't) code for the GNU linker. This is the default. 14918 14919`-mno-pic' 14920 Generate code that does not use a global pointer register. The 14921 result is not position independent code, and violates the IA-64 14922 ABI. 14923 14924`-mvolatile-asm-stop' 14925`-mno-volatile-asm-stop' 14926 Generate (or don't) a stop bit immediately before and after 14927 volatile asm statements. 14928 14929`-mregister-names' 14930`-mno-register-names' 14931 Generate (or don't) `in', `loc', and `out' register names for the 14932 stacked registers. This may make assembler output more readable. 14933 14934`-mno-sdata' 14935`-msdata' 14936 Disable (or enable) optimizations that use the small data section. 14937 This may be useful for working around optimizer bugs. 14938 14939`-mconstant-gp' 14940 Generate code that uses a single constant global pointer value. 14941 This is useful when compiling kernel code. 14942 14943`-mauto-pic' 14944 Generate code that is self-relocatable. This implies 14945 `-mconstant-gp'. This is useful when compiling firmware code. 14946 14947`-minline-float-divide-min-latency' 14948 Generate code for inline divides of floating-point values using 14949 the minimum latency algorithm. 14950 14951`-minline-float-divide-max-throughput' 14952 Generate code for inline divides of floating-point values using 14953 the maximum throughput algorithm. 14954 14955`-mno-inline-float-divide' 14956 Do not generate inline code for divides of floating-point values. 14957 14958`-minline-int-divide-min-latency' 14959 Generate code for inline divides of integer values using the 14960 minimum latency algorithm. 14961 14962`-minline-int-divide-max-throughput' 14963 Generate code for inline divides of integer values using the 14964 maximum throughput algorithm. 14965 14966`-mno-inline-int-divide' 14967 Do not generate inline code for divides of integer values. 14968 14969`-minline-sqrt-min-latency' 14970 Generate code for inline square roots using the minimum latency 14971 algorithm. 14972 14973`-minline-sqrt-max-throughput' 14974 Generate code for inline square roots using the maximum throughput 14975 algorithm. 14976 14977`-mno-inline-sqrt' 14978 Do not generate inline code for `sqrt'. 14979 14980`-mfused-madd' 14981`-mno-fused-madd' 14982 Do (don't) generate code that uses the fused multiply/add or 14983 multiply/subtract instructions. The default is to use these 14984 instructions. 14985 14986`-mno-dwarf2-asm' 14987`-mdwarf2-asm' 14988 Don't (or do) generate assembler code for the DWARF 2 line number 14989 debugging info. This may be useful when not using the GNU 14990 assembler. 14991 14992`-mearly-stop-bits' 14993`-mno-early-stop-bits' 14994 Allow stop bits to be placed earlier than immediately preceding the 14995 instruction that triggered the stop bit. This can improve 14996 instruction scheduling, but does not always do so. 14997 14998`-mfixed-range=REGISTER-RANGE' 14999 Generate code treating the given register range as fixed registers. 15000 A fixed register is one that the register allocator cannot use. 15001 This is useful when compiling kernel code. A register range is 15002 specified as two registers separated by a dash. Multiple register 15003 ranges can be specified separated by a comma. 15004 15005`-mtls-size=TLS-SIZE' 15006 Specify bit size of immediate TLS offsets. Valid values are 14, 15007 22, and 64. 15008 15009`-mtune=CPU-TYPE' 15010 Tune the instruction scheduling for a particular CPU, Valid values 15011 are `itanium', `itanium1', `merced', `itanium2', and `mckinley'. 15012 15013`-milp32' 15014`-mlp64' 15015 Generate code for a 32-bit or 64-bit environment. The 32-bit 15016 environment sets int, long and pointer to 32 bits. The 64-bit 15017 environment sets int to 32 bits and long and pointer to 64 bits. 15018 These are HP-UX specific flags. 15019 15020`-mno-sched-br-data-spec' 15021`-msched-br-data-spec' 15022 (Dis/En)able data speculative scheduling before reload. This 15023 results in generation of `ld.a' instructions and the corresponding 15024 check instructions (`ld.c' / `chk.a'). The default is 'disable'. 15025 15026`-msched-ar-data-spec' 15027`-mno-sched-ar-data-spec' 15028 (En/Dis)able data speculative scheduling after reload. This 15029 results in generation of `ld.a' instructions and the corresponding 15030 check instructions (`ld.c' / `chk.a'). The default is 'enable'. 15031 15032`-mno-sched-control-spec' 15033`-msched-control-spec' 15034 (Dis/En)able control speculative scheduling. This feature is 15035 available only during region scheduling (i.e. before reload). 15036 This results in generation of the `ld.s' instructions and the 15037 corresponding check instructions `chk.s'. The default is 15038 'disable'. 15039 15040`-msched-br-in-data-spec' 15041`-mno-sched-br-in-data-spec' 15042 (En/Dis)able speculative scheduling of the instructions that are 15043 dependent on the data speculative loads before reload. This is 15044 effective only with `-msched-br-data-spec' enabled. The default 15045 is 'enable'. 15046 15047`-msched-ar-in-data-spec' 15048`-mno-sched-ar-in-data-spec' 15049 (En/Dis)able speculative scheduling of the instructions that are 15050 dependent on the data speculative loads after reload. This is 15051 effective only with `-msched-ar-data-spec' enabled. The default 15052 is 'enable'. 15053 15054`-msched-in-control-spec' 15055`-mno-sched-in-control-spec' 15056 (En/Dis)able speculative scheduling of the instructions that are 15057 dependent on the control speculative loads. This is effective 15058 only with `-msched-control-spec' enabled. The default is 'enable'. 15059 15060`-mno-sched-prefer-non-data-spec-insns' 15061`-msched-prefer-non-data-spec-insns' 15062 If enabled, data-speculative instructions are chosen for schedule 15063 only if there are no other choices at the moment. This makes the 15064 use of the data speculation much more conservative. The default 15065 is 'disable'. 15066 15067`-mno-sched-prefer-non-control-spec-insns' 15068`-msched-prefer-non-control-spec-insns' 15069 If enabled, control-speculative instructions are chosen for 15070 schedule only if there are no other choices at the moment. This 15071 makes the use of the control speculation much more conservative. 15072 The default is 'disable'. 15073 15074`-mno-sched-count-spec-in-critical-path' 15075`-msched-count-spec-in-critical-path' 15076 If enabled, speculative dependencies are considered during 15077 computation of the instructions priorities. This makes the use of 15078 the speculation a bit more conservative. The default is 'disable'. 15079 15080`-msched-spec-ldc' 15081 Use a simple data speculation check. This option is on by default. 15082 15083`-msched-control-spec-ldc' 15084 Use a simple check for control speculation. This option is on by 15085 default. 15086 15087`-msched-stop-bits-after-every-cycle' 15088 Place a stop bit after every cycle when scheduling. This option 15089 is on by default. 15090 15091`-msched-fp-mem-deps-zero-cost' 15092 Assume that floating-point stores and loads are not likely to 15093 cause a conflict when placed into the same instruction group. 15094 This option is disabled by default. 15095 15096`-msel-sched-dont-check-control-spec' 15097 Generate checks for control speculation in selective scheduling. 15098 This flag is disabled by default. 15099 15100`-msched-max-memory-insns=MAX-INSNS' 15101 Limit on the number of memory insns per instruction group, giving 15102 lower priority to subsequent memory insns attempting to schedule 15103 in the same instruction group. Frequently useful to prevent cache 15104 bank conflicts. The default value is 1. 15105 15106`-msched-max-memory-insns-hard-limit' 15107 Makes the limit specified by `msched-max-memory-insns' a hard 15108 limit, disallowing more than that number in an instruction group. 15109 Otherwise, the limit is "soft", meaning that non-memory operations 15110 are preferred when the limit is reached, but memory operations may 15111 still be scheduled. 15112 15113 15114 15115File: gcc.info, Node: LM32 Options, Next: M32C Options, Prev: IA-64 Options, Up: Submodel Options 15116 151173.17.18 LM32 Options 15118-------------------- 15119 15120These `-m' options are defined for the LatticeMico32 architecture: 15121 15122`-mbarrel-shift-enabled' 15123 Enable barrel-shift instructions. 15124 15125`-mdivide-enabled' 15126 Enable divide and modulus instructions. 15127 15128`-mmultiply-enabled' 15129 Enable multiply instructions. 15130 15131`-msign-extend-enabled' 15132 Enable sign extend instructions. 15133 15134`-muser-enabled' 15135 Enable user-defined instructions. 15136 15137 15138 15139File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: LM32 Options, Up: Submodel Options 15140 151413.17.19 M32C Options 15142-------------------- 15143 15144`-mcpu=NAME' 15145 Select the CPU for which code is generated. NAME may be one of 15146 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60) 15147 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80 15148 series. 15149 15150`-msim' 15151 Specifies that the program will be run on the simulator. This 15152 causes an alternate runtime library to be linked in which 15153 supports, for example, file I/O. You must not use this option 15154 when generating programs that will run on real hardware; you must 15155 provide your own runtime library for whatever I/O functions are 15156 needed. 15157 15158`-memregs=NUMBER' 15159 Specifies the number of memory-based pseudo-registers GCC uses 15160 during code generation. These pseudo-registers are used like real 15161 registers, so there is a tradeoff between GCC's ability to fit the 15162 code into available registers, and the performance penalty of using 15163 memory instead of registers. Note that all modules in a program 15164 must be compiled with the same value for this option. Because of 15165 that, you must not use this option with GCC's default runtime 15166 libraries. 15167 15168 15169 15170File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 15171 151723.17.20 M32R/D Options 15173---------------------- 15174 15175These `-m' options are defined for Renesas M32R/D architectures: 15176 15177`-m32r2' 15178 Generate code for the M32R/2. 15179 15180`-m32rx' 15181 Generate code for the M32R/X. 15182 15183`-m32r' 15184 Generate code for the M32R. This is the default. 15185 15186`-mmodel=small' 15187 Assume all objects live in the lower 16MB of memory (so that their 15188 addresses can be loaded with the `ld24' instruction), and assume 15189 all subroutines are reachable with the `bl' instruction. This is 15190 the default. 15191 15192 The addressability of a particular object can be set with the 15193 `model' attribute. 15194 15195`-mmodel=medium' 15196 Assume objects may be anywhere in the 32-bit address space (the 15197 compiler generates `seth/add3' instructions to load their 15198 addresses), and assume all subroutines are reachable with the `bl' 15199 instruction. 15200 15201`-mmodel=large' 15202 Assume objects may be anywhere in the 32-bit address space (the 15203 compiler generates `seth/add3' instructions to load their 15204 addresses), and assume subroutines may not be reachable with the 15205 `bl' instruction (the compiler generates the much slower 15206 `seth/add3/jl' instruction sequence). 15207 15208`-msdata=none' 15209 Disable use of the small data area. Variables are put into one of 15210 `.data', `.bss', or `.rodata' (unless the `section' attribute has 15211 been specified). This is the default. 15212 15213 The small data area consists of sections `.sdata' and `.sbss'. 15214 Objects may be explicitly put in the small data area with the 15215 `section' attribute using one of these sections. 15216 15217`-msdata=sdata' 15218 Put small global and static data in the small data area, but do not 15219 generate special code to reference them. 15220 15221`-msdata=use' 15222 Put small global and static data in the small data area, and 15223 generate special instructions to reference them. 15224 15225`-G NUM' 15226 Put global and static objects less than or equal to NUM bytes into 15227 the small data or BSS sections instead of the normal data or BSS 15228 sections. The default value of NUM is 8. The `-msdata' option 15229 must be set to one of `sdata' or `use' for this option to have any 15230 effect. 15231 15232 All modules should be compiled with the same `-G NUM' value. 15233 Compiling with different values of NUM may or may not work; if it 15234 doesn't the linker gives an error message--incorrect code is not 15235 generated. 15236 15237`-mdebug' 15238 Makes the M32R-specific code in the compiler display some 15239 statistics that might help in debugging programs. 15240 15241`-malign-loops' 15242 Align all loops to a 32-byte boundary. 15243 15244`-mno-align-loops' 15245 Do not enforce a 32-byte alignment for loops. This is the default. 15246 15247`-missue-rate=NUMBER' 15248 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 15249 15250`-mbranch-cost=NUMBER' 15251 NUMBER can only be 1 or 2. If it is 1 then branches are preferred 15252 over conditional code, if it is 2, then the opposite applies. 15253 15254`-mflush-trap=NUMBER' 15255 Specifies the trap number to use to flush the cache. The default 15256 is 12. Valid numbers are between 0 and 15 inclusive. 15257 15258`-mno-flush-trap' 15259 Specifies that the cache cannot be flushed by using a trap. 15260 15261`-mflush-func=NAME' 15262 Specifies the name of the operating system function to call to 15263 flush the cache. The default is `_flush_cache', but a function 15264 call is only used if a trap is not available. 15265 15266`-mno-flush-func' 15267 Indicates that there is no OS function for flushing the cache. 15268 15269 15270 15271File: gcc.info, Node: M680x0 Options, Next: MCore Options, Prev: M32R/D Options, Up: Submodel Options 15272 152733.17.21 M680x0 Options 15274---------------------- 15275 15276These are the `-m' options defined for M680x0 and ColdFire processors. 15277The default settings depend on which architecture was selected when the 15278compiler was configured; the defaults for the most common choices are 15279given below. 15280 15281`-march=ARCH' 15282 Generate code for a specific M680x0 or ColdFire instruction set 15283 architecture. Permissible values of ARCH for M680x0 architectures 15284 are: `68000', `68010', `68020', `68030', `68040', `68060' and 15285 `cpu32'. ColdFire architectures are selected according to 15286 Freescale's ISA classification and the permissible values are: 15287 `isaa', `isaaplus', `isab' and `isac'. 15288 15289 GCC defines a macro `__mcfARCH__' whenever it is generating code 15290 for a ColdFire target. The ARCH in this macro is one of the 15291 `-march' arguments given above. 15292 15293 When used together, `-march' and `-mtune' select code that runs on 15294 a family of similar processors but that is optimized for a 15295 particular microarchitecture. 15296 15297`-mcpu=CPU' 15298 Generate code for a specific M680x0 or ColdFire processor. The 15299 M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040', 15300 `68060', `68302', `68332' and `cpu32'. The ColdFire CPUs are 15301 given by the table below, which also classifies the CPUs into 15302 families: 15303 15304 *Family* *`-mcpu' arguments* 15305 `51' `51' `51ac' `51ag' `51cn' `51em' `51je' `51jf' `51jg' 15306 `51jm' `51mm' `51qe' `51qm' 15307 `5206' `5202' `5204' `5206' 15308 `5206e' `5206e' 15309 `5208' `5207' `5208' 15310 `5211a' `5210a' `5211a' 15311 `5213' `5211' `5212' `5213' 15312 `5216' `5214' `5216' 15313 `52235' `52230' `52231' `52232' `52233' `52234' `52235' 15314 `5225' `5224' `5225' 15315 `52259' `52252' `52254' `52255' `52256' `52258' `52259' 15316 `5235' `5232' `5233' `5234' `5235' `523x' 15317 `5249' `5249' 15318 `5250' `5250' 15319 `5271' `5270' `5271' 15320 `5272' `5272' 15321 `5275' `5274' `5275' 15322 `5282' `5280' `5281' `5282' `528x' 15323 `53017' `53011' `53012' `53013' `53014' `53015' `53016' 15324 `53017' 15325 `5307' `5307' 15326 `5329' `5327' `5328' `5329' `532x' 15327 `5373' `5372' `5373' `537x' 15328 `5407' `5407' 15329 `5475' `5470' `5471' `5472' `5473' `5474' `5475' `547x' 15330 `5480' `5481' `5482' `5483' `5484' `5485' 15331 15332 `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with 15333 CPU. Other combinations of `-mcpu' and `-march' are rejected. 15334 15335 GCC defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is 15336 selected. It also defines `__mcf_family_FAMILY', where the value 15337 of FAMILY is given by the table above. 15338 15339`-mtune=TUNE' 15340 Tune the code for a particular microarchitecture within the 15341 constraints set by `-march' and `-mcpu'. The M680x0 15342 microarchitectures are: `68000', `68010', `68020', `68030', 15343 `68040', `68060' and `cpu32'. The ColdFire microarchitectures 15344 are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'. 15345 15346 You can also use `-mtune=68020-40' for code that needs to run 15347 relatively well on 68020, 68030 and 68040 targets. 15348 `-mtune=68020-60' is similar but includes 68060 targets as well. 15349 These two options select the same tuning decisions as `-m68020-40' 15350 and `-m68020-60' respectively. 15351 15352 GCC defines the macros `__mcARCH' and `__mcARCH__' when tuning for 15353 680x0 architecture ARCH. It also defines `mcARCH' unless either 15354 `-ansi' or a non-GNU `-std' option is used. If GCC is tuning for 15355 a range of architectures, as selected by `-mtune=68020-40' or 15356 `-mtune=68020-60', it defines the macros for every architecture in 15357 the range. 15358 15359 GCC also defines the macro `__mUARCH__' when tuning for ColdFire 15360 microarchitecture UARCH, where UARCH is one of the arguments given 15361 above. 15362 15363`-m68000' 15364`-mc68000' 15365 Generate output for a 68000. This is the default when the 15366 compiler is configured for 68000-based systems. It is equivalent 15367 to `-march=68000'. 15368 15369 Use this option for microcontrollers with a 68000 or EC000 core, 15370 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 15371 15372`-m68010' 15373 Generate output for a 68010. This is the default when the 15374 compiler is configured for 68010-based systems. It is equivalent 15375 to `-march=68010'. 15376 15377`-m68020' 15378`-mc68020' 15379 Generate output for a 68020. This is the default when the 15380 compiler is configured for 68020-based systems. It is equivalent 15381 to `-march=68020'. 15382 15383`-m68030' 15384 Generate output for a 68030. This is the default when the 15385 compiler is configured for 68030-based systems. It is equivalent 15386 to `-march=68030'. 15387 15388`-m68040' 15389 Generate output for a 68040. This is the default when the 15390 compiler is configured for 68040-based systems. It is equivalent 15391 to `-march=68040'. 15392 15393 This option inhibits the use of 68881/68882 instructions that have 15394 to be emulated by software on the 68040. Use this option if your 15395 68040 does not have code to emulate those instructions. 15396 15397`-m68060' 15398 Generate output for a 68060. This is the default when the 15399 compiler is configured for 68060-based systems. It is equivalent 15400 to `-march=68060'. 15401 15402 This option inhibits the use of 68020 and 68881/68882 instructions 15403 that have to be emulated by software on the 68060. Use this 15404 option if your 68060 does not have code to emulate those 15405 instructions. 15406 15407`-mcpu32' 15408 Generate output for a CPU32. This is the default when the 15409 compiler is configured for CPU32-based systems. It is equivalent 15410 to `-march=cpu32'. 15411 15412 Use this option for microcontrollers with a CPU32 or CPU32+ core, 15413 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 15414 68341, 68349 and 68360. 15415 15416`-m5200' 15417 Generate output for a 520X ColdFire CPU. This is the default when 15418 the compiler is configured for 520X-based systems. It is 15419 equivalent to `-mcpu=5206', and is now deprecated in favor of that 15420 option. 15421 15422 Use this option for microcontroller with a 5200 core, including 15423 the MCF5202, MCF5203, MCF5204 and MCF5206. 15424 15425`-m5206e' 15426 Generate output for a 5206e ColdFire CPU. The option is now 15427 deprecated in favor of the equivalent `-mcpu=5206e'. 15428 15429`-m528x' 15430 Generate output for a member of the ColdFire 528X family. The 15431 option is now deprecated in favor of the equivalent `-mcpu=528x'. 15432 15433`-m5307' 15434 Generate output for a ColdFire 5307 CPU. The option is now 15435 deprecated in favor of the equivalent `-mcpu=5307'. 15436 15437`-m5407' 15438 Generate output for a ColdFire 5407 CPU. The option is now 15439 deprecated in favor of the equivalent `-mcpu=5407'. 15440 15441`-mcfv4e' 15442 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x). 15443 This includes use of hardware floating-point instructions. The 15444 option is equivalent to `-mcpu=547x', and is now deprecated in 15445 favor of that option. 15446 15447`-m68020-40' 15448 Generate output for a 68040, without using any of the new 15449 instructions. This results in code that can run relatively 15450 efficiently on either a 68020/68881 or a 68030 or a 68040. The 15451 generated code does use the 68881 instructions that are emulated 15452 on the 68040. 15453 15454 The option is equivalent to `-march=68020' `-mtune=68020-40'. 15455 15456`-m68020-60' 15457 Generate output for a 68060, without using any of the new 15458 instructions. This results in code that can run relatively 15459 efficiently on either a 68020/68881 or a 68030 or a 68040. The 15460 generated code does use the 68881 instructions that are emulated 15461 on the 68060. 15462 15463 The option is equivalent to `-march=68020' `-mtune=68020-60'. 15464 15465`-mhard-float' 15466`-m68881' 15467 Generate floating-point instructions. This is the default for 15468 68020 and above, and for ColdFire devices that have an FPU. It 15469 defines the macro `__HAVE_68881__' on M680x0 targets and 15470 `__mcffpu__' on ColdFire targets. 15471 15472`-msoft-float' 15473 Do not generate floating-point instructions; use library calls 15474 instead. This is the default for 68000, 68010, and 68832 targets. 15475 It is also the default for ColdFire devices that have no FPU. 15476 15477`-mdiv' 15478`-mno-div' 15479 Generate (do not generate) ColdFire hardware divide and remainder 15480 instructions. If `-march' is used without `-mcpu', the default is 15481 "on" for ColdFire architectures and "off" for M680x0 15482 architectures. Otherwise, the default is taken from the target CPU 15483 (either the default CPU, or the one specified by `-mcpu'). For 15484 example, the default is "off" for `-mcpu=5206' and "on" for 15485 `-mcpu=5206e'. 15486 15487 GCC defines the macro `__mcfhwdiv__' when this option is enabled. 15488 15489`-mshort' 15490 Consider type `int' to be 16 bits wide, like `short int'. 15491 Additionally, parameters passed on the stack are also aligned to a 15492 16-bit boundary even on targets whose API mandates promotion to 15493 32-bit. 15494 15495`-mno-short' 15496 Do not consider type `int' to be 16 bits wide. This is the 15497 default. 15498 15499`-mnobitfield' 15500`-mno-bitfield' 15501 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 15502 and `-m5200' options imply `-mnobitfield'. 15503 15504`-mbitfield' 15505 Do use the bit-field instructions. The `-m68020' option implies 15506 `-mbitfield'. This is the default if you use a configuration 15507 designed for a 68020. 15508 15509`-mrtd' 15510 Use a different function-calling convention, in which functions 15511 that take a fixed number of arguments return with the `rtd' 15512 instruction, which pops their arguments while returning. This 15513 saves one instruction in the caller since there is no need to pop 15514 the arguments there. 15515 15516 This calling convention is incompatible with the one normally used 15517 on Unix, so you cannot use it if you need to call libraries 15518 compiled with the Unix compiler. 15519 15520 Also, you must provide function prototypes for all functions that 15521 take variable numbers of arguments (including `printf'); otherwise 15522 incorrect code is generated for calls to those functions. 15523 15524 In addition, seriously incorrect code results if you call a 15525 function with too many arguments. (Normally, extra arguments are 15526 harmlessly ignored.) 15527 15528 The `rtd' instruction is supported by the 68010, 68020, 68030, 15529 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 15530 15531`-mno-rtd' 15532 Do not use the calling conventions selected by `-mrtd'. This is 15533 the default. 15534 15535`-malign-int' 15536`-mno-align-int' 15537 Control whether GCC aligns `int', `long', `long long', `float', 15538 `double', and `long double' variables on a 32-bit boundary 15539 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 15540 variables on 32-bit boundaries produces code that runs somewhat 15541 faster on processors with 32-bit busses at the expense of more 15542 memory. 15543 15544 *Warning:* if you use the `-malign-int' switch, GCC aligns 15545 structures containing the above types differently than most 15546 published application binary interface specifications for the m68k. 15547 15548`-mpcrel' 15549 Use the pc-relative addressing mode of the 68000 directly, instead 15550 of using a global offset table. At present, this option implies 15551 `-fpic', allowing at most a 16-bit offset for pc-relative 15552 addressing. `-fPIC' is not presently supported with `-mpcrel', 15553 though this could be supported for 68020 and higher processors. 15554 15555`-mno-strict-align' 15556`-mstrict-align' 15557 Do not (do) assume that unaligned memory references are handled by 15558 the system. 15559 15560`-msep-data' 15561 Generate code that allows the data segment to be located in a 15562 different area of memory from the text segment. This allows for 15563 execute-in-place in an environment without virtual memory 15564 management. This option implies `-fPIC'. 15565 15566`-mno-sep-data' 15567 Generate code that assumes that the data segment follows the text 15568 segment. This is the default. 15569 15570`-mid-shared-library' 15571 Generate code that supports shared libraries via the library ID 15572 method. This allows for execute-in-place and shared libraries in 15573 an environment without virtual memory management. This option 15574 implies `-fPIC'. 15575 15576`-mno-id-shared-library' 15577 Generate code that doesn't assume ID-based shared libraries are 15578 being used. This is the default. 15579 15580`-mshared-library-id=n' 15581 Specifies the identification number of the ID-based shared library 15582 being compiled. Specifying a value of 0 generates more compact 15583 code; specifying other values forces the allocation of that number 15584 to the current library, but is no more space- or time-efficient 15585 than omitting this option. 15586 15587`-mxgot' 15588`-mno-xgot' 15589 When generating position-independent code for ColdFire, generate 15590 code that works if the GOT has more than 8192 entries. This code 15591 is larger and slower than code generated without this option. On 15592 M680x0 processors, this option is not needed; `-fPIC' suffices. 15593 15594 GCC normally uses a single instruction to load values from the GOT. 15595 While this is relatively efficient, it only works if the GOT is 15596 smaller than about 64k. Anything larger causes the linker to 15597 report an error such as: 15598 15599 relocation truncated to fit: R_68K_GOT16O foobar 15600 15601 If this happens, you should recompile your code with `-mxgot'. It 15602 should then work with very large GOTs. However, code generated 15603 with `-mxgot' is less efficient, since it takes 4 instructions to 15604 fetch the value of a global symbol. 15605 15606 Note that some linkers, including newer versions of the GNU linker, 15607 can create multiple GOTs and sort GOT entries. If you have such a 15608 linker, you should only need to use `-mxgot' when compiling a 15609 single object file that accesses more than 8192 GOT entries. Very 15610 few do. 15611 15612 These options have no effect unless GCC is generating 15613 position-independent code. 15614 15615 15616 15617File: gcc.info, Node: MCore Options, Next: MeP Options, Prev: M680x0 Options, Up: Submodel Options 15618 156193.17.22 MCore Options 15620--------------------- 15621 15622These are the `-m' options defined for the Motorola M*Core processors. 15623 15624`-mhardlit' 15625`-mno-hardlit' 15626 Inline constants into the code stream if it can be done in two 15627 instructions or less. 15628 15629`-mdiv' 15630`-mno-div' 15631 Use the divide instruction. (Enabled by default). 15632 15633`-mrelax-immediate' 15634`-mno-relax-immediate' 15635 Allow arbitrary-sized immediates in bit operations. 15636 15637`-mwide-bitfields' 15638`-mno-wide-bitfields' 15639 Always treat bit-fields as `int'-sized. 15640 15641`-m4byte-functions' 15642`-mno-4byte-functions' 15643 Force all functions to be aligned to a 4-byte boundary. 15644 15645`-mcallgraph-data' 15646`-mno-callgraph-data' 15647 Emit callgraph information. 15648 15649`-mslow-bytes' 15650`-mno-slow-bytes' 15651 Prefer word access when reading byte quantities. 15652 15653`-mlittle-endian' 15654`-mbig-endian' 15655 Generate code for a little-endian target. 15656 15657`-m210' 15658`-m340' 15659 Generate code for the 210 processor. 15660 15661`-mno-lsim' 15662 Assume that runtime support has been provided and so omit the 15663 simulator library (`libsim.a)' from the linker command line. 15664 15665`-mstack-increment=SIZE' 15666 Set the maximum amount for a single stack increment operation. 15667 Large values can increase the speed of programs that contain 15668 functions that need a large amount of stack space, but they can 15669 also trigger a segmentation fault if the stack is extended too 15670 much. The default value is 0x1000. 15671 15672 15673 15674File: gcc.info, Node: MeP Options, Next: MicroBlaze Options, Prev: MCore Options, Up: Submodel Options 15675 156763.17.23 MeP Options 15677------------------- 15678 15679`-mabsdiff' 15680 Enables the `abs' instruction, which is the absolute difference 15681 between two registers. 15682 15683`-mall-opts' 15684 Enables all the optional instructions--average, multiply, divide, 15685 bit operations, leading zero, absolute difference, min/max, clip, 15686 and saturation. 15687 15688`-maverage' 15689 Enables the `ave' instruction, which computes the average of two 15690 registers. 15691 15692`-mbased=N' 15693 Variables of size N bytes or smaller are placed in the `.based' 15694 section by default. Based variables use the `$tp' register as a 15695 base register, and there is a 128-byte limit to the `.based' 15696 section. 15697 15698`-mbitops' 15699 Enables the bit operation instructions--bit test (`btstm'), set 15700 (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set 15701 (`tas'). 15702 15703`-mc=NAME' 15704 Selects which section constant data is placed in. NAME may be 15705 `tiny', `near', or `far'. 15706 15707`-mclip' 15708 Enables the `clip' instruction. Note that `-mclip' is not useful 15709 unless you also provide `-mminmax'. 15710 15711`-mconfig=NAME' 15712 Selects one of the built-in core configurations. Each MeP chip has 15713 one or more modules in it; each module has a core CPU and a 15714 variety of coprocessors, optional instructions, and peripherals. 15715 The `MeP-Integrator' tool, not part of GCC, provides these 15716 configurations through this option; using this option is the same 15717 as using all the corresponding command-line options. The default 15718 configuration is `default'. 15719 15720`-mcop' 15721 Enables the coprocessor instructions. By default, this is a 32-bit 15722 coprocessor. Note that the coprocessor is normally enabled via the 15723 `-mconfig=' option. 15724 15725`-mcop32' 15726 Enables the 32-bit coprocessor's instructions. 15727 15728`-mcop64' 15729 Enables the 64-bit coprocessor's instructions. 15730 15731`-mivc2' 15732 Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor. 15733 15734`-mdc' 15735 Causes constant variables to be placed in the `.near' section. 15736 15737`-mdiv' 15738 Enables the `div' and `divu' instructions. 15739 15740`-meb' 15741 Generate big-endian code. 15742 15743`-mel' 15744 Generate little-endian code. 15745 15746`-mio-volatile' 15747 Tells the compiler that any variable marked with the `io' 15748 attribute is to be considered volatile. 15749 15750`-ml' 15751 Causes variables to be assigned to the `.far' section by default. 15752 15753`-mleadz' 15754 Enables the `leadz' (leading zero) instruction. 15755 15756`-mm' 15757 Causes variables to be assigned to the `.near' section by default. 15758 15759`-mminmax' 15760 Enables the `min' and `max' instructions. 15761 15762`-mmult' 15763 Enables the multiplication and multiply-accumulate instructions. 15764 15765`-mno-opts' 15766 Disables all the optional instructions enabled by `-mall-opts'. 15767 15768`-mrepeat' 15769 Enables the `repeat' and `erepeat' instructions, used for 15770 low-overhead looping. 15771 15772`-ms' 15773 Causes all variables to default to the `.tiny' section. Note that 15774 there is a 65536-byte limit to this section. Accesses to these 15775 variables use the `%gp' base register. 15776 15777`-msatur' 15778 Enables the saturation instructions. Note that the compiler does 15779 not currently generate these itself, but this option is included 15780 for compatibility with other tools, like `as'. 15781 15782`-msdram' 15783 Link the SDRAM-based runtime instead of the default ROM-based 15784 runtime. 15785 15786`-msim' 15787 Link the simulator run-time libraries. 15788 15789`-msimnovec' 15790 Link the simulator runtime libraries, excluding built-in support 15791 for reset and exception vectors and tables. 15792 15793`-mtf' 15794 Causes all functions to default to the `.far' section. Without 15795 this option, functions default to the `.near' section. 15796 15797`-mtiny=N' 15798 Variables that are N bytes or smaller are allocated to the `.tiny' 15799 section. These variables use the `$gp' base register. The 15800 default for this option is 4, but note that there's a 65536-byte 15801 limit to the `.tiny' section. 15802 15803 15804 15805File: gcc.info, Node: MicroBlaze Options, Next: MIPS Options, Prev: MeP Options, Up: Submodel Options 15806 158073.17.24 MicroBlaze Options 15808-------------------------- 15809 15810`-msoft-float' 15811 Use software emulation for floating point (default). 15812 15813`-mhard-float' 15814 Use hardware floating-point instructions. 15815 15816`-mmemcpy' 15817 Do not optimize block moves, use `memcpy'. 15818 15819`-mno-clearbss' 15820 This option is deprecated. Use `-fno-zero-initialized-in-bss' 15821 instead. 15822 15823`-mcpu=CPU-TYPE' 15824 Use features of, and schedule code for, the given CPU. Supported 15825 values are in the format `vX.YY.Z', where X is a major version, YY 15826 is the minor version, and Z is compatibility code. Example values 15827 are `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b', 15828 `v6.00.a'. 15829 15830`-mxl-soft-mul' 15831 Use software multiply emulation (default). 15832 15833`-mxl-soft-div' 15834 Use software emulation for divides (default). 15835 15836`-mxl-barrel-shift' 15837 Use the hardware barrel shifter. 15838 15839`-mxl-pattern-compare' 15840 Use pattern compare instructions. 15841 15842`-msmall-divides' 15843 Use table lookup optimization for small signed integer divisions. 15844 15845`-mxl-stack-check' 15846 This option is deprecated. Use `-fstack-check' instead. 15847 15848`-mxl-gp-opt' 15849 Use GP-relative `.sdata'/`.sbss' sections. 15850 15851`-mxl-multiply-high' 15852 Use multiply high instructions for high part of 32x32 multiply. 15853 15854`-mxl-float-convert' 15855 Use hardware floating-point conversion instructions. 15856 15857`-mxl-float-sqrt' 15858 Use hardware floating-point square root instruction. 15859 15860`-mbig-endian' 15861 Generate code for a big-endian target. 15862 15863`-mlittle-endian' 15864 Generate code for a little-endian target. 15865 15866`-mxl-reorder' 15867 Use reorder instructions (swap and byte reversed load/store). 15868 15869`-mxl-mode-APP-MODEL' 15870 Select application model APP-MODEL. Valid models are 15871 `executable' 15872 normal executable (default), uses startup code `crt0.o'. 15873 15874 `xmdstub' 15875 for use with Xilinx Microprocessor Debugger (XMD) based 15876 software intrusive debug agent called xmdstub. This uses 15877 startup file `crt1.o' and sets the start address of the 15878 program to 0x800. 15879 15880 `bootstrap' 15881 for applications that are loaded using a bootloader. This 15882 model uses startup file `crt2.o' which does not contain a 15883 processor reset vector handler. This is suitable for 15884 transferring control on a processor reset to the bootloader 15885 rather than the application. 15886 15887 `novectors' 15888 for applications that do not require any of the MicroBlaze 15889 vectors. This option may be useful for applications running 15890 within a monitoring application. This model uses `crt3.o' as 15891 a startup file. 15892 15893 Option `-xl-mode-APP-MODEL' is a deprecated alias for 15894 `-mxl-mode-APP-MODEL'. 15895 15896 15897 15898File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MicroBlaze Options, Up: Submodel Options 15899 159003.17.25 MIPS Options 15901-------------------- 15902 15903`-EB' 15904 Generate big-endian code. 15905 15906`-EL' 15907 Generate little-endian code. This is the default for `mips*el-*-*' 15908 configurations. 15909 15910`-march=ARCH' 15911 Generate code that runs on ARCH, which can be the name of a 15912 generic MIPS ISA, or the name of a particular processor. The ISA 15913 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 15914 `mips32r2', `mips32r3', `mips32r5', `mips32r6', `mips64', 15915 `mips64r2', `mips64r3', `mips64r5' and `mips64r6'. The processor 15916 names are: `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', 15917 `4ksd', `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', 15918 `24kec', `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', 15919 `34kn', `74kc', `74kf2_1', `74kf1_1', `74kf3_2', `1004kc', 15920 `1004kf2_1', `1004kf1_1', `loongson2e', `loongson2f', `loongson3a', 15921 `m4k', `m14k', `m14kc', `m14ke', `m14kec', `octeon', `octeon+', 15922 `octeon2', `octeon3', `orion', `p5600', `r2000', `r3000', `r3900', 15923 `r4000', `r4400', `r4600', `r4650', `r4700', `r6000', `r8000', 15924 `rm7000', `rm9000', `r10000', `r12000', `r14000', `r16000', `sb1', 15925 `sr71000', `vr4100', `vr4111', `vr4120', `vr4130', `vr4300', 15926 `vr5000', `vr5400', `vr5500', `xlr' and `xlp'. The special value 15927 `from-abi' selects the most compatible architecture for the 15928 selected ABI (that is, `mips1' for 32-bit ABIs and `mips3' for 15929 64-bit ABIs). 15930 15931 The native Linux/GNU toolchain also supports the value `native', 15932 which selects the best architecture option for the host processor. 15933 `-march=native' has no effect if GCC does not recognize the 15934 processor. 15935 15936 In processor names, a final `000' can be abbreviated as `k' (for 15937 example, `-march=r2k'). Prefixes are optional, and `vr' may be 15938 written `r'. 15939 15940 Names of the form `Nf2_1' refer to processors with FPUs clocked at 15941 half the rate of the core, names of the form `Nf1_1' refer to 15942 processors with FPUs clocked at the same rate as the core, and 15943 names of the form `Nf3_2' refer to processors with FPUs clocked a 15944 ratio of 3:2 with respect to the core. For compatibility reasons, 15945 `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are 15946 accepted as synonyms for `Nf1_1'. 15947 15948 GCC defines two macros based on the value of this option. The 15949 first is `_MIPS_ARCH', which gives the name of target 15950 architecture, as a string. The second has the form 15951 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 15952 `_MIPS_ARCH'. For example, `-march=r2000' sets `_MIPS_ARCH' to 15953 `"r2000"' and defines the macro `_MIPS_ARCH_R2000'. 15954 15955 Note that the `_MIPS_ARCH' macro uses the processor names given 15956 above. In other words, it has the full prefix and does not 15957 abbreviate `000' as `k'. In the case of `from-abi', the macro 15958 names the resolved architecture (either `"mips1"' or `"mips3"'). 15959 It names the default architecture when no `-march' option is given. 15960 15961`-mtune=ARCH' 15962 Optimize for ARCH. Among other things, this option controls the 15963 way instructions are scheduled, and the perceived cost of 15964 arithmetic operations. The list of ARCH values is the same as for 15965 `-march'. 15966 15967 When this option is not used, GCC optimizes for the processor 15968 specified by `-march'. By using `-march' and `-mtune' together, 15969 it is possible to generate code that runs on a family of 15970 processors, but optimize the code for one particular member of 15971 that family. 15972 15973 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 15974 which work in the same way as the `-march' ones described above. 15975 15976`-mips1' 15977 Equivalent to `-march=mips1'. 15978 15979`-mips2' 15980 Equivalent to `-march=mips2'. 15981 15982`-mips3' 15983 Equivalent to `-march=mips3'. 15984 15985`-mips4' 15986 Equivalent to `-march=mips4'. 15987 15988`-mips32' 15989 Equivalent to `-march=mips32'. 15990 15991`-mips32r3' 15992 Equivalent to `-march=mips32r3'. 15993 15994`-mips32r5' 15995 Equivalent to `-march=mips32r5'. 15996 15997`-mips32r6' 15998 Equivalent to `-march=mips32r6'. 15999 16000`-mips64' 16001 Equivalent to `-march=mips64'. 16002 16003`-mips64r2' 16004 Equivalent to `-march=mips64r2'. 16005 16006`-mips64r3' 16007 Equivalent to `-march=mips64r3'. 16008 16009`-mips64r5' 16010 Equivalent to `-march=mips64r5'. 16011 16012`-mips64r6' 16013 Equivalent to `-march=mips64r6'. 16014 16015`-mips16' 16016`-mno-mips16' 16017 Generate (do not generate) MIPS16 code. If GCC is targeting a 16018 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE. 16019 16020 MIPS16 code generation can also be controlled on a per-function 16021 basis by means of `mips16' and `nomips16' attributes. *Note 16022 Function Attributes::, for more information. 16023 16024`-mflip-mips16' 16025 Generate MIPS16 code on alternating functions. This option is 16026 provided for regression testing of mixed MIPS16/non-MIPS16 code 16027 generation, and is not intended for ordinary use in compiling user 16028 code. 16029 16030`-minterlink-compressed' 16031 16032`-mno-interlink-compressed' 16033 Require (do not require) that code using the standard 16034 (uncompressed) MIPS ISA be link-compatible with MIPS16 and 16035 microMIPS code, and vice versa. 16036 16037 For example, code using the standard ISA encoding cannot jump 16038 directly to MIPS16 or microMIPS code; it must either use a call or 16039 an indirect jump. `-minterlink-compressed' therefore disables 16040 direct jumps unless GCC knows that the target of the jump is not 16041 compressed. 16042 16043`-minterlink-mips16' 16044`-mno-interlink-mips16' 16045 Aliases of `-minterlink-compressed' and 16046 `-mno-interlink-compressed'. These options predate the microMIPS 16047 ASE and are retained for backwards compatibility. 16048 16049`-mabi=32' 16050`-mabi=o64' 16051`-mabi=n32' 16052`-mabi=64' 16053`-mabi=eabi' 16054 Generate code for the given ABI. 16055 16056 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 16057 generates 64-bit code when you select a 64-bit architecture, but 16058 you can use `-mgp32' to get 32-bit code instead. 16059 16060 For information about the O64 ABI, see 16061 `http://gcc.gnu.org/projects/mipso64-abi.html'. 16062 16063 GCC supports a variant of the o32 ABI in which floating-point 16064 registers are 64 rather than 32 bits wide. You can select this 16065 combination with `-mabi=32' `-mfp64'. This ABI relies on the 16066 `mthc1' and `mfhc1' instructions and is therefore only supported 16067 for MIPS32R2, MIPS32R3 and MIPS32R5 processors. 16068 16069 The register assignments for arguments and return values remain the 16070 same, but each scalar value is passed in a single 64-bit register 16071 rather than a pair of 32-bit registers. For example, scalar 16072 floating-point values are returned in `$f0' only, not a 16073 `$f0'/`$f1' pair. The set of call-saved registers also remains 16074 the same in that the even-numbered double-precision registers are 16075 saved. 16076 16077 Two additional variants of the o32 ABI are supported to enable a 16078 transition from 32-bit to 64-bit registers. These are FPXX 16079 (`-mfpxx') and FP64A (`-mfp64' `-mno-odd-spreg'). The FPXX 16080 extension mandates that all code must execute correctly when run 16081 using 32-bit or 64-bit registers. The code can be interlinked 16082 with either FP32 or FP64, but not both. The FP64A extension is 16083 similar to the FP64 extension but forbids the use of odd-numbered 16084 single-precision registers. This can be used in conjunction with 16085 the `FRE' mode of FPUs in MIPS32R5 processors and allows both FP32 16086 and FP64A code to interlink and run in the same process without 16087 changing FPU modes. 16088 16089`-mabicalls' 16090`-mno-abicalls' 16091 Generate (do not generate) code that is suitable for SVR4-style 16092 dynamic objects. `-mabicalls' is the default for SVR4-based 16093 systems. 16094 16095`-mshared' 16096`-mno-shared' 16097 Generate (do not generate) code that is fully position-independent, 16098 and that can therefore be linked into shared libraries. This 16099 option only affects `-mabicalls'. 16100 16101 All `-mabicalls' code has traditionally been position-independent, 16102 regardless of options like `-fPIC' and `-fpic'. However, as an 16103 extension, the GNU toolchain allows executables to use absolute 16104 accesses for locally-binding symbols. It can also use shorter GP 16105 initialization sequences and generate direct calls to 16106 locally-defined functions. This mode is selected by `-mno-shared'. 16107 16108 `-mno-shared' depends on binutils 2.16 or higher and generates 16109 objects that can only be linked by the GNU linker. However, the 16110 option does not affect the ABI of the final executable; it only 16111 affects the ABI of relocatable objects. Using `-mno-shared' 16112 generally makes executables both smaller and quicker. 16113 16114 `-mshared' is the default. 16115 16116`-mplt' 16117`-mno-plt' 16118 Assume (do not assume) that the static and dynamic linkers support 16119 PLTs and copy relocations. This option only affects `-mno-shared 16120 -mabicalls'. For the n64 ABI, this option has no effect without 16121 `-msym32'. 16122 16123 You can make `-mplt' the default by configuring GCC with 16124 `--with-mips-plt'. The default is `-mno-plt' otherwise. 16125 16126`-mxgot' 16127`-mno-xgot' 16128 Lift (do not lift) the usual restrictions on the size of the global 16129 offset table. 16130 16131 GCC normally uses a single instruction to load values from the GOT. 16132 While this is relatively efficient, it only works if the GOT is 16133 smaller than about 64k. Anything larger causes the linker to 16134 report an error such as: 16135 16136 relocation truncated to fit: R_MIPS_GOT16 foobar 16137 16138 If this happens, you should recompile your code with `-mxgot'. 16139 This works with very large GOTs, although the code is also less 16140 efficient, since it takes three instructions to fetch the value of 16141 a global symbol. 16142 16143 Note that some linkers can create multiple GOTs. If you have such 16144 a linker, you should only need to use `-mxgot' when a single object 16145 file accesses more than 64k's worth of GOT entries. Very few do. 16146 16147 These options have no effect unless GCC is generating position 16148 independent code. 16149 16150`-mgp32' 16151 Assume that general-purpose registers are 32 bits wide. 16152 16153`-mgp64' 16154 Assume that general-purpose registers are 64 bits wide. 16155 16156`-mfp32' 16157 Assume that floating-point registers are 32 bits wide. 16158 16159`-mfp64' 16160 Assume that floating-point registers are 64 bits wide. 16161 16162`-mfpxx' 16163 Do not assume the width of floating-point registers. 16164 16165`-mhard-float' 16166 Use floating-point coprocessor instructions. 16167 16168`-msoft-float' 16169 Do not use floating-point coprocessor instructions. Implement 16170 floating-point calculations using library calls instead. 16171 16172`-mno-float' 16173 Equivalent to `-msoft-float', but additionally asserts that the 16174 program being compiled does not perform any floating-point 16175 operations. This option is presently supported only by some 16176 bare-metal MIPS configurations, where it may select a special set 16177 of libraries that lack all floating-point support (including, for 16178 example, the floating-point `printf' formats). If code compiled 16179 with `-mno-float' accidentally contains floating-point operations, 16180 it is likely to suffer a link-time or run-time failure. 16181 16182`-msingle-float' 16183 Assume that the floating-point coprocessor only supports 16184 single-precision operations. 16185 16186`-mdouble-float' 16187 Assume that the floating-point coprocessor supports 16188 double-precision operations. This is the default. 16189 16190`-modd-spreg' 16191`-mno-odd-spreg' 16192 Enable the use of odd-numbered single-precision floating-point 16193 registers for the o32 ABI. This is the default for processors 16194 that are known to support these registers. When using the o32 16195 FPXX ABI, `-mno-odd-spreg' is set by default. 16196 16197`-mabs=2008' 16198`-mabs=legacy' 16199 These options control the treatment of the special not-a-number 16200 (NaN) IEEE 754 floating-point data with the `abs.fmt' and 16201 `neg.fmt' machine instructions. 16202 16203 By default or when `-mabs=legacy' is used the legacy treatment is 16204 selected. In this case these instructions are considered 16205 arithmetic and avoided where correct operation is required and the 16206 input operand might be a NaN. A longer sequence of instructions 16207 that manipulate the sign bit of floating-point datum manually is 16208 used instead unless the `-ffinite-math-only' option has also been 16209 specified. 16210 16211 The `-mabs=2008' option selects the IEEE 754-2008 treatment. In 16212 this case these instructions are considered non-arithmetic and 16213 therefore operating correctly in all cases, including in 16214 particular where the input operand is a NaN. These instructions 16215 are therefore always used for the respective operations. 16216 16217`-mnan=2008' 16218`-mnan=legacy' 16219 These options control the encoding of the special not-a-number 16220 (NaN) IEEE 754 floating-point data. 16221 16222 The `-mnan=legacy' option selects the legacy encoding. In this 16223 case quiet NaNs (qNaNs) are denoted by the first bit of their 16224 trailing significand field being 0, whereas signalling NaNs 16225 (sNaNs) are denoted by the first bit of their trailing significand 16226 field being 1. 16227 16228 The `-mnan=2008' option selects the IEEE 754-2008 encoding. In 16229 this case qNaNs are denoted by the first bit of their trailing 16230 significand field being 1, whereas sNaNs are denoted by the first 16231 bit of their trailing significand field being 0. 16232 16233 The default is `-mnan=legacy' unless GCC has been configured with 16234 `--with-nan=2008'. 16235 16236`-mllsc' 16237`-mno-llsc' 16238 Use (do not use) `ll', `sc', and `sync' instructions to implement 16239 atomic memory built-in functions. When neither option is 16240 specified, GCC uses the instructions if the target architecture 16241 supports them. 16242 16243 `-mllsc' is useful if the runtime environment can emulate the 16244 instructions and `-mno-llsc' can be useful when compiling for 16245 nonstandard ISAs. You can make either option the default by 16246 configuring GCC with `--with-llsc' and `--without-llsc' 16247 respectively. `--with-llsc' is the default for some 16248 configurations; see the installation documentation for details. 16249 16250`-mdsp' 16251`-mno-dsp' 16252 Use (do not use) revision 1 of the MIPS DSP ASE. *Note MIPS DSP 16253 Built-in Functions::. This option defines the preprocessor macro 16254 `__mips_dsp'. It also defines `__mips_dsp_rev' to 1. 16255 16256`-mdspr2' 16257`-mno-dspr2' 16258 Use (do not use) revision 2 of the MIPS DSP ASE. *Note MIPS DSP 16259 Built-in Functions::. This option defines the preprocessor macros 16260 `__mips_dsp' and `__mips_dspr2'. It also defines `__mips_dsp_rev' 16261 to 2. 16262 16263`-msmartmips' 16264`-mno-smartmips' 16265 Use (do not use) the MIPS SmartMIPS ASE. 16266 16267`-mpaired-single' 16268`-mno-paired-single' 16269 Use (do not use) paired-single floating-point instructions. *Note 16270 MIPS Paired-Single Support::. This option requires hardware 16271 floating-point support to be enabled. 16272 16273`-mdmx' 16274`-mno-mdmx' 16275 Use (do not use) MIPS Digital Media Extension instructions. This 16276 option can only be used when generating 64-bit code and requires 16277 hardware floating-point support to be enabled. 16278 16279`-mips3d' 16280`-mno-mips3d' 16281 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 16282 Functions::. The option `-mips3d' implies `-mpaired-single'. 16283 16284`-mmicromips' 16285`-mno-micromips' 16286 Generate (do not generate) microMIPS code. 16287 16288 MicroMIPS code generation can also be controlled on a per-function 16289 basis by means of `micromips' and `nomicromips' attributes. *Note 16290 Function Attributes::, for more information. 16291 16292`-mmt' 16293`-mno-mt' 16294 Use (do not use) MT Multithreading instructions. 16295 16296`-mmcu' 16297`-mno-mcu' 16298 Use (do not use) the MIPS MCU ASE instructions. 16299 16300`-meva' 16301`-mno-eva' 16302 Use (do not use) the MIPS Enhanced Virtual Addressing instructions. 16303 16304`-mvirt' 16305`-mno-virt' 16306 Use (do not use) the MIPS Virtualization Application Specific 16307 instructions. 16308 16309`-mxpa' 16310`-mno-xpa' 16311 Use (do not use) the MIPS eXtended Physical Address (XPA) 16312 instructions. 16313 16314`-mlong64' 16315 Force `long' types to be 64 bits wide. See `-mlong32' for an 16316 explanation of the default and the way that the pointer size is 16317 determined. 16318 16319`-mlong32' 16320 Force `long', `int', and pointer types to be 32 bits wide. 16321 16322 The default size of `int's, `long's and pointers depends on the 16323 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 16324 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 16325 `long's. Pointers are the same size as `long's, or the same size 16326 as integer registers, whichever is smaller. 16327 16328`-msym32' 16329`-mno-sym32' 16330 Assume (do not assume) that all symbols have 32-bit values, 16331 regardless of the selected ABI. This option is useful in 16332 combination with `-mabi=64' and `-mno-abicalls' because it allows 16333 GCC to generate shorter and faster references to symbolic 16334 addresses. 16335 16336`-G NUM' 16337 Put definitions of externally-visible data in a small data section 16338 if that data is no bigger than NUM bytes. GCC can then generate 16339 more efficient accesses to the data; see `-mgpopt' for details. 16340 16341 The default `-G' option depends on the configuration. 16342 16343`-mlocal-sdata' 16344`-mno-local-sdata' 16345 Extend (do not extend) the `-G' behavior to local data too, such 16346 as to static variables in C. `-mlocal-sdata' is the default for 16347 all configurations. 16348 16349 If the linker complains that an application is using too much 16350 small data, you might want to try rebuilding the less 16351 performance-critical parts with `-mno-local-sdata'. You might 16352 also want to build large libraries with `-mno-local-sdata', so 16353 that the libraries leave more room for the main program. 16354 16355`-mextern-sdata' 16356`-mno-extern-sdata' 16357 Assume (do not assume) that externally-defined data is in a small 16358 data section if the size of that data is within the `-G' limit. 16359 `-mextern-sdata' is the default for all configurations. 16360 16361 If you compile a module MOD with `-mextern-sdata' `-G NUM' 16362 `-mgpopt', and MOD references a variable VAR that is no bigger 16363 than NUM bytes, you must make sure that VAR is placed in a small 16364 data section. If VAR is defined by another module, you must 16365 either compile that module with a high-enough `-G' setting or 16366 attach a `section' attribute to VAR's definition. If VAR is 16367 common, you must link the application with a high-enough `-G' 16368 setting. 16369 16370 The easiest way of satisfying these restrictions is to compile and 16371 link every module with the same `-G' option. However, you may 16372 wish to build a library that supports several different small data 16373 limits. You can do this by compiling the library with the highest 16374 supported `-G' setting and additionally using `-mno-extern-sdata' 16375 to stop the library from making assumptions about 16376 externally-defined data. 16377 16378`-mgpopt' 16379`-mno-gpopt' 16380 Use (do not use) GP-relative accesses for symbols that are known 16381 to be in a small data section; see `-G', `-mlocal-sdata' and 16382 `-mextern-sdata'. `-mgpopt' is the default for all configurations. 16383 16384 `-mno-gpopt' is useful for cases where the `$gp' register might 16385 not hold the value of `_gp'. For example, if the code is part of 16386 a library that might be used in a boot monitor, programs that call 16387 boot monitor routines pass an unknown value in `$gp'. (In such 16388 situations, the boot monitor itself is usually compiled with 16389 `-G0'.) 16390 16391 `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'. 16392 16393`-membedded-data' 16394`-mno-embedded-data' 16395 Allocate variables to the read-only data section first if 16396 possible, then next in the small data section if possible, 16397 otherwise in data. This gives slightly slower code than the 16398 default, but reduces the amount of RAM required when executing, 16399 and thus may be preferred for some embedded systems. 16400 16401`-muninit-const-in-rodata' 16402`-mno-uninit-const-in-rodata' 16403 Put uninitialized `const' variables in the read-only data section. 16404 This option is only meaningful in conjunction with 16405 `-membedded-data'. 16406 16407`-mcode-readable=SETTING' 16408 Specify whether GCC may generate code that reads from executable 16409 sections. There are three possible settings: 16410 16411 `-mcode-readable=yes' 16412 Instructions may freely access executable sections. This is 16413 the default setting. 16414 16415 `-mcode-readable=pcrel' 16416 MIPS16 PC-relative load instructions can access executable 16417 sections, but other instructions must not do so. This option 16418 is useful on 4KSc and 4KSd processors when the code TLBs have 16419 the Read Inhibit bit set. It is also useful on processors 16420 that can be configured to have a dual instruction/data SRAM 16421 interface and that, like the M4K, automatically redirect 16422 PC-relative loads to the instruction RAM. 16423 16424 `-mcode-readable=no' 16425 Instructions must not access executable sections. This 16426 option can be useful on targets that are configured to have a 16427 dual instruction/data SRAM interface but that (unlike the 16428 M4K) do not automatically redirect PC-relative loads to the 16429 instruction RAM. 16430 16431`-msplit-addresses' 16432`-mno-split-addresses' 16433 Enable (disable) use of the `%hi()' and `%lo()' assembler 16434 relocation operators. This option has been superseded by 16435 `-mexplicit-relocs' but is retained for backwards compatibility. 16436 16437`-mexplicit-relocs' 16438`-mno-explicit-relocs' 16439 Use (do not use) assembler relocation operators when dealing with 16440 symbolic addresses. The alternative, selected by 16441 `-mno-explicit-relocs', is to use assembler macros instead. 16442 16443 `-mexplicit-relocs' is the default if GCC was configured to use an 16444 assembler that supports relocation operators. 16445 16446`-mcheck-zero-division' 16447`-mno-check-zero-division' 16448 Trap (do not trap) on integer division by zero. 16449 16450 The default is `-mcheck-zero-division'. 16451 16452`-mdivide-traps' 16453`-mdivide-breaks' 16454 MIPS systems check for division by zero by generating either a 16455 conditional trap or a break instruction. Using traps results in 16456 smaller code, but is only supported on MIPS II and later. Also, 16457 some versions of the Linux kernel have a bug that prevents trap 16458 from generating the proper signal (`SIGFPE'). Use 16459 `-mdivide-traps' to allow conditional traps on architectures that 16460 support them and `-mdivide-breaks' to force the use of breaks. 16461 16462 The default is usually `-mdivide-traps', but this can be 16463 overridden at configure time using `--with-divide=breaks'. 16464 Divide-by-zero checks can be completely disabled using 16465 `-mno-check-zero-division'. 16466 16467`-mmemcpy' 16468`-mno-memcpy' 16469 Force (do not force) the use of `memcpy' for non-trivial block 16470 moves. The default is `-mno-memcpy', which allows GCC to inline 16471 most constant-sized copies. 16472 16473`-mlong-calls' 16474`-mno-long-calls' 16475 Disable (do not disable) use of the `jal' instruction. Calling 16476 functions using `jal' is more efficient but requires the caller 16477 and callee to be in the same 256 megabyte segment. 16478 16479 This option has no effect on abicalls code. The default is 16480 `-mno-long-calls'. 16481 16482`-mmad' 16483`-mno-mad' 16484 Enable (disable) use of the `mad', `madu' and `mul' instructions, 16485 as provided by the R4650 ISA. 16486 16487`-mimadd' 16488`-mno-imadd' 16489 Enable (disable) use of the `madd' and `msub' integer 16490 instructions. The default is `-mimadd' on architectures that 16491 support `madd' and `msub' except for the 74k architecture where it 16492 was found to generate slower code. 16493 16494`-mfused-madd' 16495`-mno-fused-madd' 16496 Enable (disable) use of the floating-point multiply-accumulate 16497 instructions, when they are available. The default is 16498 `-mfused-madd'. 16499 16500 On the R8000 CPU when multiply-accumulate instructions are used, 16501 the intermediate product is calculated to infinite precision and 16502 is not subject to the FCSR Flush to Zero bit. This may be 16503 undesirable in some circumstances. On other processors the result 16504 is numerically identical to the equivalent computation using 16505 separate multiply, add, subtract and negate instructions. 16506 16507`-nocpp' 16508 Tell the MIPS assembler to not run its preprocessor over user 16509 assembler files (with a `.s' suffix) when assembling them. 16510 16511`-mfix-24k' 16512 16513`-mno-fix-24k' 16514 Work around the 24K E48 (lost data on stores during refill) errata. 16515 The workarounds are implemented by the assembler rather than by 16516 GCC. 16517 16518`-mfix-r4000' 16519`-mno-fix-r4000' 16520 Work around certain R4000 CPU errata: 16521 - A double-word or a variable shift may give an incorrect 16522 result if executed immediately after starting an integer 16523 division. 16524 16525 - A double-word or a variable shift may give an incorrect 16526 result if executed while an integer multiplication is in 16527 progress. 16528 16529 - An integer division may give an incorrect result if started 16530 in a delay slot of a taken branch or a jump. 16531 16532`-mfix-r4400' 16533`-mno-fix-r4400' 16534 Work around certain R4400 CPU errata: 16535 - A double-word or a variable shift may give an incorrect 16536 result if executed immediately after starting an integer 16537 division. 16538 16539`-mfix-r10000' 16540`-mno-fix-r10000' 16541 Work around certain R10000 errata: 16542 - `ll'/`sc' sequences may not behave atomically on revisions 16543 prior to 3.0. They may deadlock on revisions 2.6 and earlier. 16544 16545 This option can only be used if the target architecture supports 16546 branch-likely instructions. `-mfix-r10000' is the default when 16547 `-march=r10000' is used; `-mno-fix-r10000' is the default 16548 otherwise. 16549 16550`-mfix-rm7000' 16551`-mno-fix-rm7000' 16552 Work around the RM7000 `dmult'/`dmultu' errata. The workarounds 16553 are implemented by the assembler rather than by GCC. 16554 16555`-mfix-vr4120' 16556`-mno-fix-vr4120' 16557 Work around certain VR4120 errata: 16558 - `dmultu' does not always produce the correct result. 16559 16560 - `div' and `ddiv' do not always produce the correct result if 16561 one of the operands is negative. 16562 The workarounds for the division errata rely on special functions 16563 in `libgcc.a'. At present, these functions are only provided by 16564 the `mips64vr*-elf' configurations. 16565 16566 Other VR4120 errata require a NOP to be inserted between certain 16567 pairs of instructions. These errata are handled by the assembler, 16568 not by GCC itself. 16569 16570`-mfix-vr4130' 16571 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are 16572 implemented by the assembler rather than by GCC, although GCC 16573 avoids using `mflo' and `mfhi' if the VR4130 `macc', `macchi', 16574 `dmacc' and `dmacchi' instructions are available instead. 16575 16576`-mfix-sb1' 16577`-mno-fix-sb1' 16578 Work around certain SB-1 CPU core errata. (This flag currently 16579 works around the SB-1 revision 2 "F1" and "F2" floating-point 16580 errata.) 16581 16582`-mr10k-cache-barrier=SETTING' 16583 Specify whether GCC should insert cache barriers to avoid the 16584 side-effects of speculation on R10K processors. 16585 16586 In common with many processors, the R10K tries to predict the 16587 outcome of a conditional branch and speculatively executes 16588 instructions from the "taken" branch. It later aborts these 16589 instructions if the predicted outcome is wrong. However, on the 16590 R10K, even aborted instructions can have side effects. 16591 16592 This problem only affects kernel stores and, depending on the 16593 system, kernel loads. As an example, a speculatively-executed 16594 store may load the target memory into cache and mark the cache 16595 line as dirty, even if the store itself is later aborted. If a 16596 DMA operation writes to the same area of memory before the "dirty" 16597 line is flushed, the cached data overwrites the DMA-ed data. See 16598 the R10K processor manual for a full description, including other 16599 potential problems. 16600 16601 One workaround is to insert cache barrier instructions before 16602 every memory access that might be speculatively executed and that 16603 might have side effects even if aborted. 16604 `-mr10k-cache-barrier=SETTING' controls GCC's implementation of 16605 this workaround. It assumes that aborted accesses to any byte in 16606 the following regions does not have side effects: 16607 16608 1. the memory occupied by the current function's stack frame; 16609 16610 2. the memory occupied by an incoming stack argument; 16611 16612 3. the memory occupied by an object with a link-time-constant 16613 address. 16614 16615 It is the kernel's responsibility to ensure that speculative 16616 accesses to these regions are indeed safe. 16617 16618 If the input program contains a function declaration such as: 16619 16620 void foo (void); 16621 16622 then the implementation of `foo' must allow `j foo' and `jal foo' 16623 to be executed speculatively. GCC honors this restriction for 16624 functions it compiles itself. It expects non-GCC functions (such 16625 as hand-written assembly code) to do the same. 16626 16627 The option has three forms: 16628 16629 `-mr10k-cache-barrier=load-store' 16630 Insert a cache barrier before a load or store that might be 16631 speculatively executed and that might have side effects even 16632 if aborted. 16633 16634 `-mr10k-cache-barrier=store' 16635 Insert a cache barrier before a store that might be 16636 speculatively executed and that might have side effects even 16637 if aborted. 16638 16639 `-mr10k-cache-barrier=none' 16640 Disable the insertion of cache barriers. This is the default 16641 setting. 16642 16643`-mflush-func=FUNC' 16644`-mno-flush-func' 16645 Specifies the function to call to flush the I and D caches, or to 16646 not call any such function. If called, the function must take the 16647 same arguments as the common `_flush_func', that is, the address 16648 of the memory range for which the cache is being flushed, the size 16649 of the memory range, and the number 3 (to flush both caches). The 16650 default depends on the target GCC was configured for, but commonly 16651 is either `_flush_func' or `__cpu_flush'. 16652 16653`mbranch-cost=NUM' 16654 Set the cost of branches to roughly NUM "simple" instructions. 16655 This cost is only a heuristic and is not guaranteed to produce 16656 consistent results across releases. A zero cost redundantly 16657 selects the default, which is based on the `-mtune' setting. 16658 16659`-mbranch-likely' 16660`-mno-branch-likely' 16661 Enable or disable use of Branch Likely instructions, regardless of 16662 the default for the selected architecture. By default, Branch 16663 Likely instructions may be generated if they are supported by the 16664 selected architecture. An exception is for the MIPS32 and MIPS64 16665 architectures and processors that implement those architectures; 16666 for those, Branch Likely instructions are not be generated by 16667 default because the MIPS32 and MIPS64 architectures specifically 16668 deprecate their use. 16669 16670`-mfp-exceptions' 16671`-mno-fp-exceptions' 16672 Specifies whether FP exceptions are enabled. This affects how FP 16673 instructions are scheduled for some processors. The default is 16674 that FP exceptions are enabled. 16675 16676 For instance, on the SB-1, if FP exceptions are disabled, and we 16677 are emitting 64-bit code, then we can use both FP pipes. 16678 Otherwise, we can only use one FP pipe. 16679 16680`-mvr4130-align' 16681`-mno-vr4130-align' 16682 The VR4130 pipeline is two-way superscalar, but can only issue two 16683 instructions together if the first one is 8-byte aligned. When 16684 this option is enabled, GCC aligns pairs of instructions that it 16685 thinks should execute in parallel. 16686 16687 This option only has an effect when optimizing for the VR4130. It 16688 normally makes code faster, but at the expense of making it bigger. 16689 It is enabled by default at optimization level `-O3'. 16690 16691`-msynci' 16692`-mno-synci' 16693 Enable (disable) generation of `synci' instructions on 16694 architectures that support it. The `synci' instructions (if 16695 enabled) are generated when `__builtin___clear_cache' is compiled. 16696 16697 This option defaults to `-mno-synci', but the default can be 16698 overridden by configuring GCC with `--with-synci'. 16699 16700 When compiling code for single processor systems, it is generally 16701 safe to use `synci'. However, on many multi-core (SMP) systems, it 16702 does not invalidate the instruction caches on all cores and may 16703 lead to undefined behavior. 16704 16705`-mrelax-pic-calls' 16706`-mno-relax-pic-calls' 16707 Try to turn PIC calls that are normally dispatched via register 16708 `$25' into direct calls. This is only possible if the linker can 16709 resolve the destination at link-time and if the destination is 16710 within range for a direct call. 16711 16712 `-mrelax-pic-calls' is the default if GCC was configured to use an 16713 assembler and a linker that support the `.reloc' assembly 16714 directive and `-mexplicit-relocs' is in effect. With 16715 `-mno-explicit-relocs', this optimization can be performed by the 16716 assembler and the linker alone without help from the compiler. 16717 16718`-mmcount-ra-address' 16719`-mno-mcount-ra-address' 16720 Emit (do not emit) code that allows `_mcount' to modify the 16721 calling function's return address. When enabled, this option 16722 extends the usual `_mcount' interface with a new RA-ADDRESS 16723 parameter, which has type `intptr_t *' and is passed in register 16724 `$12'. `_mcount' can then modify the return address by doing both 16725 of the following: 16726 * Returning the new address in register `$31'. 16727 16728 * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is 16729 nonnull. 16730 16731 The default is `-mno-mcount-ra-address'. 16732 16733 16734 16735File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 16736 167373.17.26 MMIX Options 16738-------------------- 16739 16740These options are defined for the MMIX: 16741 16742`-mlibfuncs' 16743`-mno-libfuncs' 16744 Specify that intrinsic library functions are being compiled, 16745 passing all values in registers, no matter the size. 16746 16747`-mepsilon' 16748`-mno-epsilon' 16749 Generate floating-point comparison instructions that compare with 16750 respect to the `rE' epsilon register. 16751 16752`-mabi=mmixware' 16753`-mabi=gnu' 16754 Generate code that passes function parameters and return values 16755 that (in the called function) are seen as registers `$0' and up, 16756 as opposed to the GNU ABI which uses global registers `$231' and 16757 up. 16758 16759`-mzero-extend' 16760`-mno-zero-extend' 16761 When reading data from memory in sizes shorter than 64 bits, use 16762 (do not use) zero-extending load instructions by default, rather 16763 than sign-extending ones. 16764 16765`-mknuthdiv' 16766`-mno-knuthdiv' 16767 Make the result of a division yielding a remainder have the same 16768 sign as the divisor. With the default, `-mno-knuthdiv', the sign 16769 of the remainder follows the sign of the dividend. Both methods 16770 are arithmetically valid, the latter being almost exclusively used. 16771 16772`-mtoplevel-symbols' 16773`-mno-toplevel-symbols' 16774 Prepend (do not prepend) a `:' to all global symbols, so the 16775 assembly code can be used with the `PREFIX' assembly directive. 16776 16777`-melf' 16778 Generate an executable in the ELF format, rather than the default 16779 `mmo' format used by the `mmix' simulator. 16780 16781`-mbranch-predict' 16782`-mno-branch-predict' 16783 Use (do not use) the probable-branch instructions, when static 16784 branch prediction indicates a probable branch. 16785 16786`-mbase-addresses' 16787`-mno-base-addresses' 16788 Generate (do not generate) code that uses _base addresses_. Using 16789 a base address automatically generates a request (handled by the 16790 assembler and the linker) for a constant to be set up in a global 16791 register. The register is used for one or more base address 16792 requests within the range 0 to 255 from the value held in the 16793 register. The generally leads to short and fast code, but the 16794 number of different data items that can be addressed is limited. 16795 This means that a program that uses lots of static data may 16796 require `-mno-base-addresses'. 16797 16798`-msingle-exit' 16799`-mno-single-exit' 16800 Force (do not force) generated code to have a single exit point in 16801 each function. 16802 16803 16804File: gcc.info, Node: MN10300 Options, Next: Moxie Options, Prev: MMIX Options, Up: Submodel Options 16805 168063.17.27 MN10300 Options 16807----------------------- 16808 16809These `-m' options are defined for Matsushita MN10300 architectures: 16810 16811`-mmult-bug' 16812 Generate code to avoid bugs in the multiply instructions for the 16813 MN10300 processors. This is the default. 16814 16815`-mno-mult-bug' 16816 Do not generate code to avoid bugs in the multiply instructions 16817 for the MN10300 processors. 16818 16819`-mam33' 16820 Generate code using features specific to the AM33 processor. 16821 16822`-mno-am33' 16823 Do not generate code using features specific to the AM33 16824 processor. This is the default. 16825 16826`-mam33-2' 16827 Generate code using features specific to the AM33/2.0 processor. 16828 16829`-mam34' 16830 Generate code using features specific to the AM34 processor. 16831 16832`-mtune=CPU-TYPE' 16833 Use the timing characteristics of the indicated CPU type when 16834 scheduling instructions. This does not change the targeted 16835 processor type. The CPU type must be one of `mn10300', `am33', 16836 `am33-2' or `am34'. 16837 16838`-mreturn-pointer-on-d0' 16839 When generating a function that returns a pointer, return the 16840 pointer in both `a0' and `d0'. Otherwise, the pointer is returned 16841 only in `a0', and attempts to call such functions without a 16842 prototype result in errors. Note that this option is on by 16843 default; use `-mno-return-pointer-on-d0' to disable it. 16844 16845`-mno-crt0' 16846 Do not link in the C run-time initialization object file. 16847 16848`-mrelax' 16849 Indicate to the linker that it should perform a relaxation 16850 optimization pass to shorten branches, calls and absolute memory 16851 addresses. This option only has an effect when used on the 16852 command line for the final link step. 16853 16854 This option makes symbolic debugging impossible. 16855 16856`-mliw' 16857 Allow the compiler to generate _Long Instruction Word_ 16858 instructions if the target is the `AM33' or later. This is the 16859 default. This option defines the preprocessor macro `__LIW__'. 16860 16861`-mnoliw' 16862 Do not allow the compiler to generate _Long Instruction Word_ 16863 instructions. This option defines the preprocessor macro 16864 `__NO_LIW__'. 16865 16866`-msetlb' 16867 Allow the compiler to generate the _SETLB_ and _Lcc_ instructions 16868 if the target is the `AM33' or later. This is the default. This 16869 option defines the preprocessor macro `__SETLB__'. 16870 16871`-mnosetlb' 16872 Do not allow the compiler to generate _SETLB_ or _Lcc_ 16873 instructions. This option defines the preprocessor macro 16874 `__NO_SETLB__'. 16875 16876 16877 16878File: gcc.info, Node: Moxie Options, Next: MSP430 Options, Prev: MN10300 Options, Up: Submodel Options 16879 168803.17.28 Moxie Options 16881--------------------- 16882 16883`-meb' 16884 Generate big-endian code. This is the default for `moxie-*-*' 16885 configurations. 16886 16887`-mel' 16888 Generate little-endian code. 16889 16890`-mmul.x' 16891 Generate mul.x and umul.x instructions. This is the default for 16892 `moxiebox-*-*' configurations. 16893 16894`-mno-crt0' 16895 Do not link in the C run-time initialization object file. 16896 16897 16898 16899File: gcc.info, Node: MSP430 Options, Next: NDS32 Options, Prev: Moxie Options, Up: Submodel Options 16900 169013.17.29 MSP430 Options 16902---------------------- 16903 16904These options are defined for the MSP430: 16905 16906`-masm-hex' 16907 Force assembly output to always use hex constants. Normally such 16908 constants are signed decimals, but this option is available for 16909 testsuite and/or aesthetic purposes. 16910 16911`-mmcu=' 16912 Select the MCU to target. This is used to create a C preprocessor 16913 symbol based upon the MCU name, converted to upper case and pre- 16914 and post-fixed with `__'. This in turn is used by the `msp430.h' 16915 header file to select an MCU-specific supplementary header file. 16916 16917 The option also sets the ISA to use. If the MCU name is one that 16918 is known to only support the 430 ISA then that is selected, 16919 otherwise the 430X ISA is selected. A generic MCU name of 16920 `msp430' can also be used to select the 430 ISA. Similarly the 16921 generic `msp430x' MCU name selects the 430X ISA. 16922 16923 In addition an MCU-specific linker script is added to the linker 16924 command line. The script's name is the name of the MCU with `.ld' 16925 appended. Thus specifying `-mmcu=xxx' on the `gcc' command line 16926 defines the C preprocessor symbol `__XXX__' and cause the linker 16927 to search for a script called `xxx.ld'. 16928 16929 This option is also passed on to the assembler. 16930 16931`-mcpu=' 16932 Specifies the ISA to use. Accepted values are `msp430', `msp430x' 16933 and `msp430xv2'. This option is deprecated. The `-mmcu=' option 16934 should be used to select the ISA. 16935 16936`-msim' 16937 Link to the simulator runtime libraries and linker script. 16938 Overrides any scripts that would be selected by the `-mmcu=' 16939 option. 16940 16941`-mlarge' 16942 Use large-model addressing (20-bit pointers, 32-bit `size_t'). 16943 16944`-msmall' 16945 Use small-model addressing (16-bit pointers, 16-bit `size_t'). 16946 16947`-mrelax' 16948 This option is passed to the assembler and linker, and allows the 16949 linker to perform certain optimizations that cannot be done until 16950 the final link. 16951 16952`mhwmult=' 16953 Describes the type of hardware multiply supported by the target. 16954 Accepted values are `none' for no hardware multiply, `16bit' for 16955 the original 16-bit-only multiply supported by early MCUs. 16956 `32bit' for the 16/32-bit multiply supported by later MCUs and 16957 `f5series' for the 16/32-bit multiply supported by F5-series MCUs. 16958 A value of `auto' can also be given. This tells GCC to deduce the 16959 hardware multiply support based upon the MCU name provided by the 16960 `-mmcu' option. If no `-mmcu' option is specified then `32bit' 16961 hardware multiply support is assumed. `auto' is the default 16962 setting. 16963 16964 Hardware multiplies are normally performed by calling a library 16965 routine. This saves space in the generated code. When compiling 16966 at `-O3' or higher however the hardware multiplier is invoked 16967 inline. This makes for bigger, but faster code. 16968 16969 The hardware multiply routines disable interrupts whilst running 16970 and restore the previous interrupt state when they finish. This 16971 makes them safe to use inside interrupt handlers as well as in 16972 normal code. 16973 16974`-minrt' 16975 Enable the use of a minimum runtime environment - no static 16976 initializers or constructors. This is intended for 16977 memory-constrained devices. The compiler includes special symbols 16978 in some objects that tell the linker and runtime which code 16979 fragments are required. 16980 16981 16982 16983File: gcc.info, Node: NDS32 Options, Next: Nios II Options, Prev: MSP430 Options, Up: Submodel Options 16984 169853.17.30 NDS32 Options 16986--------------------- 16987 16988These options are defined for NDS32 implementations: 16989 16990`-mbig-endian' 16991 Generate code in big-endian mode. 16992 16993`-mlittle-endian' 16994 Generate code in little-endian mode. 16995 16996`-mreduced-regs' 16997 Use reduced-set registers for register allocation. 16998 16999`-mfull-regs' 17000 Use full-set registers for register allocation. 17001 17002`-mcmov' 17003 Generate conditional move instructions. 17004 17005`-mno-cmov' 17006 Do not generate conditional move instructions. 17007 17008`-mperf-ext' 17009 Generate performance extension instructions. 17010 17011`-mno-perf-ext' 17012 Do not generate performance extension instructions. 17013 17014`-mv3push' 17015 Generate v3 push25/pop25 instructions. 17016 17017`-mno-v3push' 17018 Do not generate v3 push25/pop25 instructions. 17019 17020`-m16-bit' 17021 Generate 16-bit instructions. 17022 17023`-mno-16-bit' 17024 Do not generate 16-bit instructions. 17025 17026`-misr-vector-size=NUM' 17027 Specify the size of each interrupt vector, which must be 4 or 16. 17028 17029`-mcache-block-size=NUM' 17030 Specify the size of each cache block, which must be a power of 2 17031 between 4 and 512. 17032 17033`-march=ARCH' 17034 Specify the name of the target architecture. 17035 17036`-mcmodel=CODE-MODEL' 17037 Set the code model to one of 17038 `small' 17039 All the data and read-only data segments must be within 512KB 17040 addressing space. The text segment must be within 16MB 17041 addressing space. 17042 17043 `medium' 17044 The data segment must be within 512KB while the read-only 17045 data segment can be within 4GB addressing space. The text 17046 segment should be still within 16MB addressing space. 17047 17048 `large' 17049 All the text and data segments can be within 4GB addressing 17050 space. 17051 17052`-mctor-dtor' 17053 Enable constructor/destructor feature. 17054 17055`-mrelax' 17056 Guide linker to relax instructions. 17057 17058 17059 17060File: gcc.info, Node: Nios II Options, Next: Nvidia PTX Options, Prev: NDS32 Options, Up: Submodel Options 17061 170623.17.31 Nios II Options 17063----------------------- 17064 17065These are the options defined for the Altera Nios II processor. 17066 17067`-G NUM' 17068 Put global and static objects less than or equal to NUM bytes into 17069 the small data or BSS sections instead of the normal data or BSS 17070 sections. The default value of NUM is 8. 17071 17072`-mgpopt=OPTION' 17073 17074`-mgpopt' 17075`-mno-gpopt' 17076 Generate (do not generate) GP-relative accesses. The following 17077 OPTION names are recognized: 17078 17079 `none' 17080 Do not generate GP-relative accesses. 17081 17082 `local' 17083 Generate GP-relative accesses for small data objects that are 17084 not external or weak. Also use GP-relative addressing for 17085 objects that have been explicitly placed in a small data 17086 section via a `section' attribute. 17087 17088 `global' 17089 As for `local', but also generate GP-relative accesses for 17090 small data objects that are external or weak. If you use 17091 this option, you must ensure that all parts of your program 17092 (including libraries) are compiled with the same `-G' setting. 17093 17094 `data' 17095 Generate GP-relative accesses for all data objects in the 17096 program. If you use this option, the entire data and BSS 17097 segments of your program must fit in 64K of memory and you 17098 must use an appropriate linker script to allocate them within 17099 the addressible range of the global pointer. 17100 17101 `all' 17102 Generate GP-relative addresses for function pointers as well 17103 as data pointers. If you use this option, the entire text, 17104 data, and BSS segments of your program must fit in 64K of 17105 memory and you must use an appropriate linker script to 17106 allocate them within the addressible range of the global 17107 pointer. 17108 17109 17110 `-mgpopt' is equivalent to `-mgpopt=local', and `-mno-gpopt' is 17111 equivalent to `-mgpopt=none'. 17112 17113 The default is `-mgpopt' except when `-fpic' or `-fPIC' is 17114 specified to generate position-independent code. Note that the 17115 Nios II ABI does not permit GP-relative accesses from shared 17116 libraries. 17117 17118 You may need to specify `-mno-gpopt' explicitly when building 17119 programs that include large amounts of small data, including large 17120 GOT data sections. In this case, the 16-bit offset for GP-relative 17121 addressing may not be large enough to allow access to the entire 17122 small data section. 17123 17124`-mel' 17125`-meb' 17126 Generate little-endian (default) or big-endian (experimental) code, 17127 respectively. 17128 17129`-mbypass-cache' 17130`-mno-bypass-cache' 17131 Force all load and store instructions to always bypass cache by 17132 using I/O variants of the instructions. The default is not to 17133 bypass the cache. 17134 17135`-mno-cache-volatile' 17136`-mcache-volatile' 17137 Volatile memory access bypass the cache using the I/O variants of 17138 the load and store instructions. The default is not to bypass the 17139 cache. 17140 17141`-mno-fast-sw-div' 17142`-mfast-sw-div' 17143 Do not use table-based fast divide for small numbers. The default 17144 is to use the fast divide at `-O3' and above. 17145 17146`-mno-hw-mul' 17147`-mhw-mul' 17148`-mno-hw-mulx' 17149`-mhw-mulx' 17150`-mno-hw-div' 17151`-mhw-div' 17152 Enable or disable emitting `mul', `mulx' and `div' family of 17153 instructions by the compiler. The default is to emit `mul' and not 17154 emit `div' and `mulx'. 17155 17156`-mcustom-INSN=N' 17157`-mno-custom-INSN' 17158 Each `-mcustom-INSN=N' option enables use of a custom instruction 17159 with encoding N when generating code that uses INSN. For example, 17160 `-mcustom-fadds=253' generates custom instruction 253 for 17161 single-precision floating-point add operations instead of the 17162 default behavior of using a library call. 17163 17164 The following values of INSN are supported. Except as otherwise 17165 noted, floating-point operations are expected to be implemented 17166 with normal IEEE 754 semantics and correspond directly to the C 17167 operators or the equivalent GCC built-in functions (*note Other 17168 Builtins::). 17169 17170 Single-precision floating point: 17171 `fadds', `fsubs', `fdivs', `fmuls' 17172 Binary arithmetic operations. 17173 17174 `fnegs' 17175 Unary negation. 17176 17177 `fabss' 17178 Unary absolute value. 17179 17180 `fcmpeqs', `fcmpges', `fcmpgts', `fcmples', `fcmplts', `fcmpnes' 17181 Comparison operations. 17182 17183 `fmins', `fmaxs' 17184 Floating-point minimum and maximum. These instructions are 17185 only generated if `-ffinite-math-only' is specified. 17186 17187 `fsqrts' 17188 Unary square root operation. 17189 17190 `fcoss', `fsins', `ftans', `fatans', `fexps', `flogs' 17191 Floating-point trigonometric and exponential functions. 17192 These instructions are only generated if 17193 `-funsafe-math-optimizations' is also specified. 17194 17195 17196 Double-precision floating point: 17197 `faddd', `fsubd', `fdivd', `fmuld' 17198 Binary arithmetic operations. 17199 17200 `fnegd' 17201 Unary negation. 17202 17203 `fabsd' 17204 Unary absolute value. 17205 17206 `fcmpeqd', `fcmpged', `fcmpgtd', `fcmpled', `fcmpltd', `fcmpned' 17207 Comparison operations. 17208 17209 `fmind', `fmaxd' 17210 Double-precision minimum and maximum. These instructions are 17211 only generated if `-ffinite-math-only' is specified. 17212 17213 `fsqrtd' 17214 Unary square root operation. 17215 17216 `fcosd', `fsind', `ftand', `fatand', `fexpd', `flogd' 17217 Double-precision trigonometric and exponential functions. 17218 These instructions are only generated if 17219 `-funsafe-math-optimizations' is also specified. 17220 17221 17222 Conversions: 17223 `fextsd' 17224 Conversion from single precision to double precision. 17225 17226 `ftruncds' 17227 Conversion from double precision to single precision. 17228 17229 `fixsi', `fixsu', `fixdi', `fixdu' 17230 Conversion from floating point to signed or unsigned integer 17231 types, with truncation towards zero. 17232 17233 `round' 17234 Conversion from single-precision floating point to signed 17235 integer, rounding to the nearest integer and ties away from 17236 zero. This corresponds to the `__builtin_lroundf' function 17237 when `-fno-math-errno' is used. 17238 17239 `floatis', `floatus', `floatid', `floatud' 17240 Conversion from signed or unsigned integer types to 17241 floating-point types. 17242 17243 17244 In addition, all of the following transfer instructions for 17245 internal registers X and Y must be provided to use any of the 17246 double-precision floating-point instructions. Custom instructions 17247 taking two double-precision source operands expect the first 17248 operand in the 64-bit register X. The other operand (or only 17249 operand of a unary operation) is given to the custom arithmetic 17250 instruction with the least significant half in source register 17251 SRC1 and the most significant half in SRC2. A custom instruction 17252 that returns a double-precision result returns the most 17253 significant 32 bits in the destination register and the other half 17254 in 32-bit register Y. GCC automatically generates the necessary 17255 code sequences to write register X and/or read register Y when 17256 double-precision floating-point instructions are used. 17257 17258 `fwrx' 17259 Write SRC1 into the least significant half of X and SRC2 into 17260 the most significant half of X. 17261 17262 `fwry' 17263 Write SRC1 into Y. 17264 17265 `frdxhi', `frdxlo' 17266 Read the most or least (respectively) significant half of X 17267 and store it in DEST. 17268 17269 `frdy' 17270 Read the value of Y and store it into DEST. 17271 17272 Note that you can gain more local control over generation of Nios 17273 II custom instructions by using the `target("custom-INSN=N")' and 17274 `target("no-custom-INSN")' function attributes (*note Function 17275 Attributes::) or pragmas (*note Function Specific Option 17276 Pragmas::). 17277 17278`-mcustom-fpu-cfg=NAME' 17279 This option enables a predefined, named set of custom instruction 17280 encodings (see `-mcustom-INSN' above). Currently, the following 17281 sets are defined: 17282 17283 `-mcustom-fpu-cfg=60-1' is equivalent to: 17284 -mcustom-fmuls=252 17285 -mcustom-fadds=253 17286 -mcustom-fsubs=254 17287 -fsingle-precision-constant 17288 17289 `-mcustom-fpu-cfg=60-2' is equivalent to: 17290 -mcustom-fmuls=252 17291 -mcustom-fadds=253 17292 -mcustom-fsubs=254 17293 -mcustom-fdivs=255 17294 -fsingle-precision-constant 17295 17296 `-mcustom-fpu-cfg=72-3' is equivalent to: 17297 -mcustom-floatus=243 17298 -mcustom-fixsi=244 17299 -mcustom-floatis=245 17300 -mcustom-fcmpgts=246 17301 -mcustom-fcmples=249 17302 -mcustom-fcmpeqs=250 17303 -mcustom-fcmpnes=251 17304 -mcustom-fmuls=252 17305 -mcustom-fadds=253 17306 -mcustom-fsubs=254 17307 -mcustom-fdivs=255 17308 -fsingle-precision-constant 17309 17310 Custom instruction assignments given by individual 17311 `-mcustom-INSN=' options override those given by 17312 `-mcustom-fpu-cfg=', regardless of the order of the options on the 17313 command line. 17314 17315 Note that you can gain more local control over selection of a FPU 17316 configuration by using the `target("custom-fpu-cfg=NAME")' 17317 function attribute (*note Function Attributes::) or pragma (*note 17318 Function Specific Option Pragmas::). 17319 17320 17321 These additional `-m' options are available for the Altera Nios II ELF 17322(bare-metal) target: 17323 17324`-mhal' 17325 Link with HAL BSP. This suppresses linking with the GCC-provided 17326 C runtime startup and termination code, and is typically used in 17327 conjunction with `-msys-crt0=' to specify the location of the 17328 alternate startup code provided by the HAL BSP. 17329 17330`-msmallc' 17331 Link with a limited version of the C library, `-lsmallc', rather 17332 than Newlib. 17333 17334`-msys-crt0=STARTFILE' 17335 STARTFILE is the file name of the startfile (crt0) to use when 17336 linking. This option is only useful in conjunction with `-mhal'. 17337 17338`-msys-lib=SYSTEMLIB' 17339 SYSTEMLIB is the library name of the library that provides 17340 low-level system calls required by the C library, e.g. `read' and 17341 `write'. This option is typically used to link with a library 17342 provided by a HAL BSP. 17343 17344 17345 17346File: gcc.info, Node: Nvidia PTX Options, Next: PDP-11 Options, Prev: Nios II Options, Up: Submodel Options 17347 173483.17.32 Nvidia PTX Options 17349-------------------------- 17350 17351These options are defined for Nvidia PTX: 17352 17353`-m32' 17354`-m64' 17355 Generate code for 32-bit or 64-bit ABI. 17356 17357`-mmainkernel' 17358 Link in code for a __main kernel. This is for stand-alone instead 17359 of offloading execution. 17360 17361 17362 17363File: gcc.info, Node: PDP-11 Options, Next: picoChip Options, Prev: Nvidia PTX Options, Up: Submodel Options 17364 173653.17.33 PDP-11 Options 17366---------------------- 17367 17368These options are defined for the PDP-11: 17369 17370`-mfpu' 17371 Use hardware FPP floating point. This is the default. (FIS 17372 floating point on the PDP-11/40 is not supported.) 17373 17374`-msoft-float' 17375 Do not use hardware floating point. 17376 17377`-mac0' 17378 Return floating-point results in ac0 (fr0 in Unix assembler 17379 syntax). 17380 17381`-mno-ac0' 17382 Return floating-point results in memory. This is the default. 17383 17384`-m40' 17385 Generate code for a PDP-11/40. 17386 17387`-m45' 17388 Generate code for a PDP-11/45. This is the default. 17389 17390`-m10' 17391 Generate code for a PDP-11/10. 17392 17393`-mbcopy-builtin' 17394 Use inline `movmemhi' patterns for copying memory. This is the 17395 default. 17396 17397`-mbcopy' 17398 Do not use inline `movmemhi' patterns for copying memory. 17399 17400`-mint16' 17401`-mno-int32' 17402 Use 16-bit `int'. This is the default. 17403 17404`-mint32' 17405`-mno-int16' 17406 Use 32-bit `int'. 17407 17408`-mfloat64' 17409`-mno-float32' 17410 Use 64-bit `float'. This is the default. 17411 17412`-mfloat32' 17413`-mno-float64' 17414 Use 32-bit `float'. 17415 17416`-mabshi' 17417 Use `abshi2' pattern. This is the default. 17418 17419`-mno-abshi' 17420 Do not use `abshi2' pattern. 17421 17422`-mbranch-expensive' 17423 Pretend that branches are expensive. This is for experimenting 17424 with code generation only. 17425 17426`-mbranch-cheap' 17427 Do not pretend that branches are expensive. This is the default. 17428 17429`-munix-asm' 17430 Use Unix assembler syntax. This is the default when configured for 17431 `pdp11-*-bsd'. 17432 17433`-mdec-asm' 17434 Use DEC assembler syntax. This is the default when configured for 17435 any PDP-11 target other than `pdp11-*-bsd'. 17436 17437 17438File: gcc.info, Node: picoChip Options, Next: PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 17439 174403.17.34 picoChip Options 17441------------------------ 17442 17443These `-m' options are defined for picoChip implementations: 17444 17445`-mae=AE_TYPE' 17446 Set the instruction set, register set, and instruction scheduling 17447 parameters for array element type AE_TYPE. Supported values for 17448 AE_TYPE are `ANY', `MUL', and `MAC'. 17449 17450 `-mae=ANY' selects a completely generic AE type. Code generated 17451 with this option runs on any of the other AE types. The code is 17452 not as efficient as it would be if compiled for a specific AE 17453 type, and some types of operation (e.g., multiplication) do not 17454 work properly on all types of AE. 17455 17456 `-mae=MUL' selects a MUL AE type. This is the most useful AE type 17457 for compiled code, and is the default. 17458 17459 `-mae=MAC' selects a DSP-style MAC AE. Code compiled with this 17460 option may suffer from poor performance of byte (char) 17461 manipulation, since the DSP AE does not provide hardware support 17462 for byte load/stores. 17463 17464`-msymbol-as-address' 17465 Enable the compiler to directly use a symbol name as an address in 17466 a load/store instruction, without first loading it into a 17467 register. Typically, the use of this option generates larger 17468 programs, which run faster than when the option isn't used. 17469 However, the results vary from program to program, so it is left 17470 as a user option, rather than being permanently enabled. 17471 17472`-mno-inefficient-warnings' 17473 Disables warnings about the generation of inefficient code. These 17474 warnings can be generated, for example, when compiling code that 17475 performs byte-level memory operations on the MAC AE type. The MAC 17476 AE has no hardware support for byte-level memory operations, so 17477 all byte load/stores must be synthesized from word load/store 17478 operations. This is inefficient and a warning is generated to 17479 indicate that you should rewrite the code to avoid byte 17480 operations, or to target an AE type that has the necessary 17481 hardware support. This option disables these warnings. 17482 17483 17484 17485File: gcc.info, Node: PowerPC Options, Next: RL78 Options, Prev: picoChip Options, Up: Submodel Options 17486 174873.17.35 PowerPC Options 17488----------------------- 17489 17490These are listed under *Note RS/6000 and PowerPC Options::. 17491 17492 17493File: gcc.info, Node: RL78 Options, Next: RS/6000 and PowerPC Options, Prev: PowerPC Options, Up: Submodel Options 17494 174953.17.36 RL78 Options 17496-------------------- 17497 17498`-msim' 17499 Links in additional target libraries to support operation within a 17500 simulator. 17501 17502`-mmul=none' 17503`-mmul=g13' 17504`-mmul=rl78' 17505 Specifies the type of hardware multiplication support to be used. 17506 The default is `none', which uses software multiplication 17507 functions. The `g13' option is for the hardware multiply/divide 17508 peripheral only on the RL78/G13 targets. The `rl78' option is for 17509 the standard hardware multiplication defined in the RL78 software 17510 manual. 17511 17512`-m64bit-doubles' 17513`-m32bit-doubles' 17514 Make the `double' data type be 64 bits (`-m64bit-doubles') or 32 17515 bits (`-m32bit-doubles') in size. The default is 17516 `-m32bit-doubles'. 17517 17518 17519 17520File: gcc.info, Node: RS/6000 and PowerPC Options, Next: RX Options, Prev: RL78 Options, Up: Submodel Options 17521 175223.17.37 IBM RS/6000 and PowerPC Options 17523--------------------------------------- 17524 17525These `-m' options are defined for the IBM RS/6000 and PowerPC: 17526`-mpowerpc-gpopt' 17527`-mno-powerpc-gpopt' 17528`-mpowerpc-gfxopt' 17529`-mno-powerpc-gfxopt' 17530`-mpowerpc64' 17531`-mno-powerpc64' 17532`-mmfcrf' 17533`-mno-mfcrf' 17534`-mpopcntb' 17535`-mno-popcntb' 17536`-mpopcntd' 17537`-mno-popcntd' 17538`-mfprnd' 17539`-mno-fprnd' 17540`-mcmpb' 17541`-mno-cmpb' 17542`-mmfpgpr' 17543`-mno-mfpgpr' 17544`-mhard-dfp' 17545`-mno-hard-dfp' 17546 You use these options to specify which instructions are available 17547 on the processor you are using. The default value of these 17548 options is determined when configuring GCC. Specifying the 17549 `-mcpu=CPU_TYPE' overrides the specification of these options. We 17550 recommend you use the `-mcpu=CPU_TYPE' option rather than the 17551 options listed above. 17552 17553 Specifying `-mpowerpc-gpopt' allows GCC to use the optional 17554 PowerPC architecture instructions in the General Purpose group, 17555 including floating-point square root. Specifying 17556 `-mpowerpc-gfxopt' allows GCC to use the optional PowerPC 17557 architecture instructions in the Graphics group, including 17558 floating-point select. 17559 17560 The `-mmfcrf' option allows GCC to generate the move from 17561 condition register field instruction implemented on the POWER4 17562 processor and other processors that support the PowerPC V2.01 17563 architecture. The `-mpopcntb' option allows GCC to generate the 17564 popcount and double-precision FP reciprocal estimate instruction 17565 implemented on the POWER5 processor and other processors that 17566 support the PowerPC V2.02 architecture. The `-mpopcntd' option 17567 allows GCC to generate the popcount instruction implemented on the 17568 POWER7 processor and other processors that support the PowerPC 17569 V2.06 architecture. The `-mfprnd' option allows GCC to generate 17570 the FP round to integer instructions implemented on the POWER5+ 17571 processor and other processors that support the PowerPC V2.03 17572 architecture. The `-mcmpb' option allows GCC to generate the 17573 compare bytes instruction implemented on the POWER6 processor and 17574 other processors that support the PowerPC V2.05 architecture. The 17575 `-mmfpgpr' option allows GCC to generate the FP move to/from 17576 general-purpose register instructions implemented on the POWER6X 17577 processor and other processors that support the extended PowerPC 17578 V2.05 architecture. The `-mhard-dfp' option allows GCC to 17579 generate the decimal floating-point instructions implemented on 17580 some POWER processors. 17581 17582 The `-mpowerpc64' option allows GCC to generate the additional 17583 64-bit instructions that are found in the full PowerPC64 17584 architecture and to treat GPRs as 64-bit, doubleword quantities. 17585 GCC defaults to `-mno-powerpc64'. 17586 17587`-mcpu=CPU_TYPE' 17588 Set architecture type, register usage, and instruction scheduling 17589 parameters for machine type CPU_TYPE. Supported values for 17590 CPU_TYPE are `401', `403', `405', `405fp', `440', `440fp', `464', 17591 `464fp', `476', `476fp', `505', `601', `602', `603', `603e', 17592 `604', `604e', `620', `630', `740', `7400', `7450', `750', `801', 17593 `821', `823', `860', `970', `8540', `a2', `e300c2', `e300c3', 17594 `e500mc', `e500mc64', `e5500', `e6500', `ec603e', `G3', `G4', `G5', 17595 `titan', `power3', `power4', `power5', `power5+', `power6', 17596 `power6x', `power7', `power8', `powerpc', `powerpc64', 17597 `powerpc64le', and `rs64'. 17598 17599 `-mcpu=powerpc', `-mcpu=powerpc64', and `-mcpu=powerpc64le' 17600 specify pure 32-bit PowerPC (either endian), 64-bit big endian 17601 PowerPC and 64-bit little endian PowerPC architecture machine 17602 types, with an appropriate, generic processor model assumed for 17603 scheduling purposes. 17604 17605 The other options specify a specific processor. Code generated 17606 under those options runs best on that processor, and may not run 17607 at all on others. 17608 17609 The `-mcpu' options automatically enable or disable the following 17610 options: 17611 17612 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple 17613 -mpopcntb -mpopcntd -mpowerpc64 17614 -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float 17615 -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx 17616 -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector 17617 -mquad-memory -mquad-memory-atomic 17618 17619 The particular options set for any particular CPU varies between 17620 compiler versions, depending on what setting seems to produce 17621 optimal code for that CPU; it doesn't necessarily reflect the 17622 actual hardware's capabilities. If you wish to set an individual 17623 option to a particular value, you may specify it after the `-mcpu' 17624 option, like `-mcpu=970 -mno-altivec'. 17625 17626 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 17627 or disabled by the `-mcpu' option at present because AIX does not 17628 have full support for these options. You may still enable or 17629 disable them individually if you're sure it'll work in your 17630 environment. 17631 17632`-mtune=CPU_TYPE' 17633 Set the instruction scheduling parameters for machine type 17634 CPU_TYPE, but do not set the architecture type or register usage, 17635 as `-mcpu=CPU_TYPE' does. The same values for CPU_TYPE are used 17636 for `-mtune' as for `-mcpu'. If both are specified, the code 17637 generated uses the architecture and registers set by `-mcpu', but 17638 the scheduling parameters set by `-mtune'. 17639 17640`-mcmodel=small' 17641 Generate PowerPC64 code for the small model: The TOC is limited to 17642 64k. 17643 17644`-mcmodel=medium' 17645 Generate PowerPC64 code for the medium model: The TOC and other 17646 static data may be up to a total of 4G in size. 17647 17648`-mcmodel=large' 17649 Generate PowerPC64 code for the large model: The TOC may be up to 17650 4G in size. Other data and code is only limited by the 64-bit 17651 address space. 17652 17653`-maltivec' 17654`-mno-altivec' 17655 Generate code that uses (does not use) AltiVec instructions, and 17656 also enable the use of built-in functions that allow more direct 17657 access to the AltiVec instruction set. You may also need to set 17658 `-mabi=altivec' to adjust the current ABI with AltiVec ABI 17659 enhancements. 17660 17661 When `-maltivec' is used, rather than `-maltivec=le' or 17662 `-maltivec=be', the element order for Altivec intrinsics such as 17663 `vec_splat', `vec_extract', and `vec_insert' match array element 17664 order corresponding to the endianness of the target. That is, 17665 element zero identifies the leftmost element in a vector register 17666 when targeting a big-endian platform, and identifies the rightmost 17667 element in a vector register when targeting a little-endian 17668 platform. 17669 17670`-maltivec=be' 17671 Generate Altivec instructions using big-endian element order, 17672 regardless of whether the target is big- or little-endian. This is 17673 the default when targeting a big-endian platform. 17674 17675 The element order is used to interpret element numbers in Altivec 17676 intrinsics such as `vec_splat', `vec_extract', and `vec_insert'. 17677 By default, these match array element order corresponding to the 17678 endianness for the target. 17679 17680`-maltivec=le' 17681 Generate Altivec instructions using little-endian element order, 17682 regardless of whether the target is big- or little-endian. This is 17683 the default when targeting a little-endian platform. This option 17684 is currently ignored when targeting a big-endian platform. 17685 17686 The element order is used to interpret element numbers in Altivec 17687 intrinsics such as `vec_splat', `vec_extract', and `vec_insert'. 17688 By default, these match array element order corresponding to the 17689 endianness for the target. 17690 17691`-mvrsave' 17692`-mno-vrsave' 17693 Generate VRSAVE instructions when generating AltiVec code. 17694 17695`-mgen-cell-microcode' 17696 Generate Cell microcode instructions. 17697 17698`-mwarn-cell-microcode' 17699 Warn when a Cell microcode instruction is emitted. An example of 17700 a Cell microcode instruction is a variable shift. 17701 17702`-msecure-plt' 17703 Generate code that allows `ld' and `ld.so' to build executables 17704 and shared libraries with non-executable `.plt' and `.got' 17705 sections. This is a PowerPC 32-bit SYSV ABI option. 17706 17707`-mbss-plt' 17708 Generate code that uses a BSS `.plt' section that `ld.so' fills 17709 in, and requires `.plt' and `.got' sections that are both writable 17710 and executable. This is a PowerPC 32-bit SYSV ABI option. 17711 17712`-misel' 17713`-mno-isel' 17714 This switch enables or disables the generation of ISEL 17715 instructions. 17716 17717`-misel=YES/NO' 17718 This switch has been deprecated. Use `-misel' and `-mno-isel' 17719 instead. 17720 17721`-mspe' 17722`-mno-spe' 17723 This switch enables or disables the generation of SPE simd 17724 instructions. 17725 17726`-mpaired' 17727`-mno-paired' 17728 This switch enables or disables the generation of PAIRED simd 17729 instructions. 17730 17731`-mspe=YES/NO' 17732 This option has been deprecated. Use `-mspe' and `-mno-spe' 17733 instead. 17734 17735`-mvsx' 17736`-mno-vsx' 17737 Generate code that uses (does not use) vector/scalar (VSX) 17738 instructions, and also enable the use of built-in functions that 17739 allow more direct access to the VSX instruction set. 17740 17741`-mcrypto' 17742`-mno-crypto' 17743 Enable the use (disable) of the built-in functions that allow 17744 direct access to the cryptographic instructions that were added in 17745 version 2.07 of the PowerPC ISA. 17746 17747`-mdirect-move' 17748`-mno-direct-move' 17749 Generate code that uses (does not use) the instructions to move 17750 data between the general purpose registers and the vector/scalar 17751 (VSX) registers that were added in version 2.07 of the PowerPC ISA. 17752 17753`-mpower8-fusion' 17754`-mno-power8-fusion' 17755 Generate code that keeps (does not keeps) some integer operations 17756 adjacent so that the instructions can be fused together on power8 17757 and later processors. 17758 17759`-mpower8-vector' 17760`-mno-power8-vector' 17761 Generate code that uses (does not use) the vector and scalar 17762 instructions that were added in version 2.07 of the PowerPC ISA. 17763 Also enable the use of built-in functions that allow more direct 17764 access to the vector instructions. 17765 17766`-mquad-memory' 17767`-mno-quad-memory' 17768 Generate code that uses (does not use) the non-atomic quad word 17769 memory instructions. The `-mquad-memory' option requires use of 17770 64-bit mode. 17771 17772`-mquad-memory-atomic' 17773`-mno-quad-memory-atomic' 17774 Generate code that uses (does not use) the atomic quad word memory 17775 instructions. The `-mquad-memory-atomic' option requires use of 17776 64-bit mode. 17777 17778`-mupper-regs-df' 17779`-mno-upper-regs-df' 17780 Generate code that uses (does not use) the scalar double precision 17781 instructions that target all 64 registers in the vector/scalar 17782 floating point register set that were added in version 2.06 of the 17783 PowerPC ISA. `-mupper-regs-df' is turned on by default if you use 17784 any of the `-mcpu=power7', `-mcpu=power8', or `-mvsx' options. 17785 17786`-mupper-regs-sf' 17787`-mno-upper-regs-sf' 17788 Generate code that uses (does not use) the scalar single precision 17789 instructions that target all 64 registers in the vector/scalar 17790 floating point register set that were added in version 2.07 of the 17791 PowerPC ISA. `-mupper-regs-sf' is turned on by default if you use 17792 either of the `-mcpu=power8' or `-mpower8-vector' options. 17793 17794`-mupper-regs' 17795`-mno-upper-regs' 17796 Generate code that uses (does not use) the scalar instructions 17797 that target all 64 registers in the vector/scalar floating point 17798 register set, depending on the model of the machine. 17799 17800 If the `-mno-upper-regs' option is used, it turns off both 17801 `-mupper-regs-sf' and `-mupper-regs-df' options. 17802 17803`-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 17804`-mfloat-gprs' 17805 This switch enables or disables the generation of floating-point 17806 operations on the general-purpose registers for architectures that 17807 support it. 17808 17809 The argument `yes' or `single' enables the use of single-precision 17810 floating-point operations. 17811 17812 The argument `double' enables the use of single and 17813 double-precision floating-point operations. 17814 17815 The argument `no' disables floating-point operations on the 17816 general-purpose registers. 17817 17818 This option is currently only available on the MPC854x. 17819 17820`-m32' 17821`-m64' 17822 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 17823 targets (including GNU/Linux). The 32-bit environment sets int, 17824 long and pointer to 32 bits and generates code that runs on any 17825 PowerPC variant. The 64-bit environment sets int to 32 bits and 17826 long and pointer to 64 bits, and generates code for PowerPC64, as 17827 for `-mpowerpc64'. 17828 17829`-mfull-toc' 17830`-mno-fp-in-toc' 17831`-mno-sum-in-toc' 17832`-mminimal-toc' 17833 Modify generation of the TOC (Table Of Contents), which is created 17834 for every executable file. The `-mfull-toc' option is selected by 17835 default. In that case, GCC allocates at least one TOC entry for 17836 each unique non-automatic variable reference in your program. GCC 17837 also places floating-point constants in the TOC. However, only 17838 16,384 entries are available in the TOC. 17839 17840 If you receive a linker error message that saying you have 17841 overflowed the available TOC space, you can reduce the amount of 17842 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 17843 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 17844 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 17845 code to calculate the sum of an address and a constant at run time 17846 instead of putting that sum into the TOC. You may specify one or 17847 both of these options. Each causes GCC to produce very slightly 17848 slower and larger code at the expense of conserving TOC space. 17849 17850 If you still run out of space in the TOC even when you specify 17851 both of these options, specify `-mminimal-toc' instead. This 17852 option causes GCC to make only one TOC entry for every file. When 17853 you specify this option, GCC produces code that is slower and 17854 larger but which uses extremely little TOC space. You may wish to 17855 use this option only on files that contain less 17856 frequently-executed code. 17857 17858`-maix64' 17859`-maix32' 17860 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 17861 64-bit `long' type, and the infrastructure needed to support them. 17862 Specifying `-maix64' implies `-mpowerpc64', while `-maix32' 17863 disables the 64-bit ABI and implies `-mno-powerpc64'. GCC 17864 defaults to `-maix32'. 17865 17866`-mxl-compat' 17867`-mno-xl-compat' 17868 Produce code that conforms more closely to IBM XL compiler 17869 semantics when using AIX-compatible ABI. Pass floating-point 17870 arguments to prototyped functions beyond the register save area 17871 (RSA) on the stack in addition to argument FPRs. Do not assume 17872 that most significant double in 128-bit long double value is 17873 properly rounded when comparing values and converting to double. 17874 Use XL symbol names for long double support routines. 17875 17876 The AIX calling convention was extended but not initially 17877 documented to handle an obscure K&R C case of calling a function 17878 that takes the address of its arguments with fewer arguments than 17879 declared. IBM XL compilers access floating-point arguments that 17880 do not fit in the RSA from the stack when a subroutine is compiled 17881 without optimization. Because always storing floating-point 17882 arguments on the stack is inefficient and rarely needed, this 17883 option is not enabled by default and only is necessary when 17884 calling subroutines compiled by IBM XL compilers without 17885 optimization. 17886 17887`-mpe' 17888 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 17889 application written to use message passing with special startup 17890 code to enable the application to run. The system must have PE 17891 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 17892 `specs' file must be overridden with the `-specs=' option to 17893 specify the appropriate directory location. The Parallel 17894 Environment does not support threads, so the `-mpe' option and the 17895 `-pthread' option are incompatible. 17896 17897`-malign-natural' 17898`-malign-power' 17899 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 17900 `-malign-natural' overrides the ABI-defined alignment of larger 17901 types, such as floating-point doubles, on their natural size-based 17902 boundary. The option `-malign-power' instructs GCC to follow the 17903 ABI-specified alignment rules. GCC defaults to the standard 17904 alignment defined in the ABI. 17905 17906 On 64-bit Darwin, natural alignment is the default, and 17907 `-malign-power' is not supported. 17908 17909`-msoft-float' 17910`-mhard-float' 17911 Generate code that does not use (uses) the floating-point register 17912 set. Software floating-point emulation is provided if you use the 17913 `-msoft-float' option, and pass the option to GCC when linking. 17914 17915`-msingle-float' 17916`-mdouble-float' 17917 Generate code for single- or double-precision floating-point 17918 operations. `-mdouble-float' implies `-msingle-float'. 17919 17920`-msimple-fpu' 17921 Do not generate `sqrt' and `div' instructions for hardware 17922 floating-point unit. 17923 17924`-mfpu=NAME' 17925 Specify type of floating-point unit. Valid values for NAME are 17926 `sp_lite' (equivalent to `-msingle-float -msimple-fpu'), `dp_lite' 17927 (equivalent to `-mdouble-float -msimple-fpu'), `sp_full' 17928 (equivalent to `-msingle-float'), and `dp_full' (equivalent to 17929 `-mdouble-float'). 17930 17931`-mxilinx-fpu' 17932 Perform optimizations for the floating-point unit on Xilinx PPC 17933 405/440. 17934 17935`-mmultiple' 17936`-mno-multiple' 17937 Generate code that uses (does not use) the load multiple word 17938 instructions and the store multiple word instructions. These 17939 instructions are generated by default on POWER systems, and not 17940 generated on PowerPC systems. Do not use `-mmultiple' on 17941 little-endian PowerPC systems, since those instructions do not 17942 work when the processor is in little-endian mode. The exceptions 17943 are PPC740 and PPC750 which permit these instructions in 17944 little-endian mode. 17945 17946`-mstring' 17947`-mno-string' 17948 Generate code that uses (does not use) the load string instructions 17949 and the store string word instructions to save multiple registers 17950 and do small block moves. These instructions are generated by 17951 default on POWER systems, and not generated on PowerPC systems. 17952 Do not use `-mstring' on little-endian PowerPC systems, since those 17953 instructions do not work when the processor is in little-endian 17954 mode. The exceptions are PPC740 and PPC750 which permit these 17955 instructions in little-endian mode. 17956 17957`-mupdate' 17958`-mno-update' 17959 Generate code that uses (does not use) the load or store 17960 instructions that update the base register to the address of the 17961 calculated memory location. These instructions are generated by 17962 default. If you use `-mno-update', there is a small window 17963 between the time that the stack pointer is updated and the address 17964 of the previous frame is stored, which means code that walks the 17965 stack frame across interrupts or signals may get corrupted data. 17966 17967`-mavoid-indexed-addresses' 17968`-mno-avoid-indexed-addresses' 17969 Generate code that tries to avoid (not avoid) the use of indexed 17970 load or store instructions. These instructions can incur a 17971 performance penalty on Power6 processors in certain situations, 17972 such as when stepping through large arrays that cross a 16M 17973 boundary. This option is enabled by default when targeting Power6 17974 and disabled otherwise. 17975 17976`-mfused-madd' 17977`-mno-fused-madd' 17978 Generate code that uses (does not use) the floating-point multiply 17979 and accumulate instructions. These instructions are generated by 17980 default if hardware floating point is used. The machine-dependent 17981 `-mfused-madd' option is now mapped to the machine-independent 17982 `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to 17983 `-ffp-contract=off'. 17984 17985`-mmulhw' 17986`-mno-mulhw' 17987 Generate code that uses (does not use) the half-word multiply and 17988 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 17989 processors. These instructions are generated by default when 17990 targeting those processors. 17991 17992`-mdlmzb' 17993`-mno-dlmzb' 17994 Generate code that uses (does not use) the string-search `dlmzb' 17995 instruction on the IBM 405, 440, 464 and 476 processors. This 17996 instruction is generated by default when targeting those 17997 processors. 17998 17999`-mno-bit-align' 18000`-mbit-align' 18001 On System V.4 and embedded PowerPC systems do not (do) force 18002 structures and unions that contain bit-fields to be aligned to the 18003 base type of the bit-field. 18004 18005 For example, by default a structure containing nothing but 8 18006 `unsigned' bit-fields of length 1 is aligned to a 4-byte boundary 18007 and has a size of 4 bytes. By using `-mno-bit-align', the 18008 structure is aligned to a 1-byte boundary and is 1 byte in size. 18009 18010`-mno-strict-align' 18011`-mstrict-align' 18012 On System V.4 and embedded PowerPC systems do not (do) assume that 18013 unaligned memory references are handled by the system. 18014 18015`-mrelocatable' 18016`-mno-relocatable' 18017 Generate code that allows (does not allow) a static executable to 18018 be relocated to a different address at run time. A simple embedded 18019 PowerPC system loader should relocate the entire contents of 18020 `.got2' and 4-byte locations listed in the `.fixup' section, a 18021 table of 32-bit addresses generated by this option. For this to 18022 work, all objects linked together must be compiled with 18023 `-mrelocatable' or `-mrelocatable-lib'. `-mrelocatable' code 18024 aligns the stack to an 8-byte boundary. 18025 18026`-mrelocatable-lib' 18027`-mno-relocatable-lib' 18028 Like `-mrelocatable', `-mrelocatable-lib' generates a `.fixup' 18029 section to allow static executables to be relocated at run time, 18030 but `-mrelocatable-lib' does not use the smaller stack alignment 18031 of `-mrelocatable'. Objects compiled with `-mrelocatable-lib' may 18032 be linked with objects compiled with any combination of the 18033 `-mrelocatable' options. 18034 18035`-mno-toc' 18036`-mtoc' 18037 On System V.4 and embedded PowerPC systems do not (do) assume that 18038 register 2 contains a pointer to a global area pointing to the 18039 addresses used in the program. 18040 18041`-mlittle' 18042`-mlittle-endian' 18043 On System V.4 and embedded PowerPC systems compile code for the 18044 processor in little-endian mode. The `-mlittle-endian' option is 18045 the same as `-mlittle'. 18046 18047`-mbig' 18048`-mbig-endian' 18049 On System V.4 and embedded PowerPC systems compile code for the 18050 processor in big-endian mode. The `-mbig-endian' option is the 18051 same as `-mbig'. 18052 18053`-mdynamic-no-pic' 18054 On Darwin and Mac OS X systems, compile code so that it is not 18055 relocatable, but that its external references are relocatable. The 18056 resulting code is suitable for applications, but not shared 18057 libraries. 18058 18059`-msingle-pic-base' 18060 Treat the register used for PIC addressing as read-only, rather 18061 than loading it in the prologue for each function. The runtime 18062 system is responsible for initializing this register with an 18063 appropriate value before execution begins. 18064 18065`-mprioritize-restricted-insns=PRIORITY' 18066 This option controls the priority that is assigned to 18067 dispatch-slot restricted instructions during the second scheduling 18068 pass. The argument PRIORITY takes the value `0', `1', or `2' to 18069 assign no, highest, or second-highest (respectively) priority to 18070 dispatch-slot restricted instructions. 18071 18072`-msched-costly-dep=DEPENDENCE_TYPE' 18073 This option controls which dependences are considered costly by 18074 the target during instruction scheduling. The argument 18075 DEPENDENCE_TYPE takes one of the following values: 18076 18077 `no' 18078 No dependence is costly. 18079 18080 `all' 18081 All dependences are costly. 18082 18083 `true_store_to_load' 18084 A true dependence from store to load is costly. 18085 18086 `store_to_load' 18087 Any dependence from store to load is costly. 18088 18089 NUMBER 18090 Any dependence for which the latency is greater than or equal 18091 to NUMBER is costly. 18092 18093`-minsert-sched-nops=SCHEME' 18094 This option controls which NOP insertion scheme is used during the 18095 second scheduling pass. The argument SCHEME takes one of the 18096 following values: 18097 18098 `no' 18099 Don't insert NOPs. 18100 18101 `pad' 18102 Pad with NOPs any dispatch group that has vacant issue slots, 18103 according to the scheduler's grouping. 18104 18105 `regroup_exact' 18106 Insert NOPs to force costly dependent insns into separate 18107 groups. Insert exactly as many NOPs as needed to force an 18108 insn to a new group, according to the estimated processor 18109 grouping. 18110 18111 NUMBER 18112 Insert NOPs to force costly dependent insns into separate 18113 groups. Insert NUMBER NOPs to force an insn to a new group. 18114 18115`-mcall-sysv' 18116 On System V.4 and embedded PowerPC systems compile code using 18117 calling conventions that adhere to the March 1995 draft of the 18118 System V Application Binary Interface, PowerPC processor 18119 supplement. This is the default unless you configured GCC using 18120 `powerpc-*-eabiaix'. 18121 18122`-mcall-sysv-eabi' 18123`-mcall-eabi' 18124 Specify both `-mcall-sysv' and `-meabi' options. 18125 18126`-mcall-sysv-noeabi' 18127 Specify both `-mcall-sysv' and `-mno-eabi' options. 18128 18129`-mcall-aixdesc' 18130 On System V.4 and embedded PowerPC systems compile code for the AIX 18131 operating system. 18132 18133`-mcall-linux' 18134 On System V.4 and embedded PowerPC systems compile code for the 18135 Linux-based GNU system. 18136 18137`-mcall-freebsd' 18138 On System V.4 and embedded PowerPC systems compile code for the 18139 FreeBSD operating system. 18140 18141`-mcall-netbsd' 18142 On System V.4 and embedded PowerPC systems compile code for the 18143 NetBSD operating system. 18144 18145`-mcall-openbsd' 18146 On System V.4 and embedded PowerPC systems compile code for the 18147 OpenBSD operating system. 18148 18149`-maix-struct-return' 18150 Return all structures in memory (as specified by the AIX ABI). 18151 18152`-msvr4-struct-return' 18153 Return structures smaller than 8 bytes in registers (as specified 18154 by the SVR4 ABI). 18155 18156`-mabi=ABI-TYPE' 18157 Extend the current ABI with a particular extension, or remove such 18158 extension. Valid values are `altivec', `no-altivec', `spe', 18159 `no-spe', `ibmlongdouble', `ieeelongdouble', `elfv1', `elfv2'. 18160 18161`-mabi=spe' 18162 Extend the current ABI with SPE ABI extensions. This does not 18163 change the default ABI, instead it adds the SPE ABI extensions to 18164 the current ABI. 18165 18166`-mabi=no-spe' 18167 Disable Book-E SPE ABI extensions for the current ABI. 18168 18169`-mabi=ibmlongdouble' 18170 Change the current ABI to use IBM extended-precision long double. 18171 This is a PowerPC 32-bit SYSV ABI option. 18172 18173`-mabi=ieeelongdouble' 18174 Change the current ABI to use IEEE extended-precision long double. 18175 This is a PowerPC 32-bit Linux ABI option. 18176 18177`-mabi=elfv1' 18178 Change the current ABI to use the ELFv1 ABI. This is the default 18179 ABI for big-endian PowerPC 64-bit Linux. Overriding the default 18180 ABI requires special system support and is likely to fail in 18181 spectacular ways. 18182 18183`-mabi=elfv2' 18184 Change the current ABI to use the ELFv2 ABI. This is the default 18185 ABI for little-endian PowerPC 64-bit Linux. Overriding the 18186 default ABI requires special system support and is likely to fail 18187 in spectacular ways. 18188 18189`-mprototype' 18190`-mno-prototype' 18191 On System V.4 and embedded PowerPC systems assume that all calls to 18192 variable argument functions are properly prototyped. Otherwise, 18193 the compiler must insert an instruction before every 18194 non-prototyped call to set or clear bit 6 of the condition code 18195 register (`CR') to indicate whether floating-point values are 18196 passed in the floating-point registers in case the function takes 18197 variable arguments. With `-mprototype', only calls to prototyped 18198 variable argument functions set or clear the bit. 18199 18200`-msim' 18201 On embedded PowerPC systems, assume that the startup module is 18202 called `sim-crt0.o' and that the standard C libraries are 18203 `libsim.a' and `libc.a'. This is the default for 18204 `powerpc-*-eabisim' configurations. 18205 18206`-mmvme' 18207 On embedded PowerPC systems, assume that the startup module is 18208 called `crt0.o' and the standard C libraries are `libmvme.a' and 18209 `libc.a'. 18210 18211`-mads' 18212 On embedded PowerPC systems, assume that the startup module is 18213 called `crt0.o' and the standard C libraries are `libads.a' and 18214 `libc.a'. 18215 18216`-myellowknife' 18217 On embedded PowerPC systems, assume that the startup module is 18218 called `crt0.o' and the standard C libraries are `libyk.a' and 18219 `libc.a'. 18220 18221`-mvxworks' 18222 On System V.4 and embedded PowerPC systems, specify that you are 18223 compiling for a VxWorks system. 18224 18225`-memb' 18226 On embedded PowerPC systems, set the `PPC_EMB' bit in the ELF flags 18227 header to indicate that `eabi' extended relocations are used. 18228 18229`-meabi' 18230`-mno-eabi' 18231 On System V.4 and embedded PowerPC systems do (do not) adhere to 18232 the Embedded Applications Binary Interface (EABI), which is a set 18233 of modifications to the System V.4 specifications. Selecting 18234 `-meabi' means that the stack is aligned to an 8-byte boundary, a 18235 function `__eabi' is called from `main' to set up the EABI 18236 environment, and the `-msdata' option can use both `r2' and `r13' 18237 to point to two separate small data areas. Selecting `-mno-eabi' 18238 means that the stack is aligned to a 16-byte boundary, no EABI 18239 initialization function is called from `main', and the `-msdata' 18240 option only uses `r13' to point to a single small data area. The 18241 `-meabi' option is on by default if you configured GCC using one 18242 of the `powerpc*-*-eabi*' options. 18243 18244`-msdata=eabi' 18245 On System V.4 and embedded PowerPC systems, put small initialized 18246 `const' global and static data in the `.sdata2' section, which is 18247 pointed to by register `r2'. Put small initialized non-`const' 18248 global and static data in the `.sdata' section, which is pointed 18249 to by register `r13'. Put small uninitialized global and static 18250 data in the `.sbss' section, which is adjacent to the `.sdata' 18251 section. The `-msdata=eabi' option is incompatible with the 18252 `-mrelocatable' option. The `-msdata=eabi' option also sets the 18253 `-memb' option. 18254 18255`-msdata=sysv' 18256 On System V.4 and embedded PowerPC systems, put small global and 18257 static data in the `.sdata' section, which is pointed to by 18258 register `r13'. Put small uninitialized global and static data in 18259 the `.sbss' section, which is adjacent to the `.sdata' section. 18260 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 18261 option. 18262 18263`-msdata=default' 18264`-msdata' 18265 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 18266 compile code the same as `-msdata=eabi', otherwise compile code the 18267 same as `-msdata=sysv'. 18268 18269`-msdata=data' 18270 On System V.4 and embedded PowerPC systems, put small global data 18271 in the `.sdata' section. Put small uninitialized global data in 18272 the `.sbss' section. Do not use register `r13' to address small 18273 data however. This is the default behavior unless other `-msdata' 18274 options are used. 18275 18276`-msdata=none' 18277`-mno-sdata' 18278 On embedded PowerPC systems, put all initialized global and static 18279 data in the `.data' section, and all uninitialized data in the 18280 `.bss' section. 18281 18282`-mblock-move-inline-limit=NUM' 18283 Inline all block moves (such as calls to `memcpy' or structure 18284 copies) less than or equal to NUM bytes. The minimum value for 18285 NUM is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. 18286 The default value is target-specific. 18287 18288`-G NUM' 18289 On embedded PowerPC systems, put global and static items less than 18290 or equal to NUM bytes into the small data or BSS sections instead 18291 of the normal data or BSS section. By default, NUM is 8. The `-G 18292 NUM' switch is also passed to the linker. All modules should be 18293 compiled with the same `-G NUM' value. 18294 18295`-mregnames' 18296`-mno-regnames' 18297 On System V.4 and embedded PowerPC systems do (do not) emit 18298 register names in the assembly language output using symbolic 18299 forms. 18300 18301`-mlongcall' 18302`-mno-longcall' 18303 By default assume that all calls are far away so that a longer and 18304 more expensive calling sequence is required. This is required for 18305 calls farther than 32 megabytes (33,554,432 bytes) from the 18306 current location. A short call is generated if the compiler knows 18307 the call cannot be that far away. This setting can be overridden 18308 by the `shortcall' function attribute, or by `#pragma longcall(0)'. 18309 18310 Some linkers are capable of detecting out-of-range calls and 18311 generating glue code on the fly. On these systems, long calls are 18312 unnecessary and generate slower code. As of this writing, the AIX 18313 linker can do this, as can the GNU linker for PowerPC/64. It is 18314 planned to add this feature to the GNU linker for 32-bit PowerPC 18315 systems as well. 18316 18317 On Darwin/PPC systems, `#pragma longcall' generates `jbsr callee, 18318 L42', plus a "branch island" (glue code). The two target 18319 addresses represent the callee and the branch island. The 18320 Darwin/PPC linker prefers the first address and generates a `bl 18321 callee' if the PPC `bl' instruction reaches the callee directly; 18322 otherwise, the linker generates `bl L42' to call the branch 18323 island. The branch island is appended to the body of the calling 18324 function; it computes the full 32-bit address of the callee and 18325 jumps to it. 18326 18327 On Mach-O (Darwin) systems, this option directs the compiler emit 18328 to the glue for every direct call, and the Darwin linker decides 18329 whether to use or discard it. 18330 18331 In the future, GCC may ignore all longcall specifications when the 18332 linker is known to generate glue. 18333 18334`-mtls-markers' 18335`-mno-tls-markers' 18336 Mark (do not mark) calls to `__tls_get_addr' with a relocation 18337 specifying the function argument. The relocation allows the 18338 linker to reliably associate function call with argument setup 18339 instructions for TLS optimization, which in turn allows GCC to 18340 better schedule the sequence. 18341 18342`-pthread' 18343 Adds support for multithreading with the "pthreads" library. This 18344 option sets flags for both the preprocessor and linker. 18345 18346`-mrecip' 18347`-mno-recip' 18348 This option enables use of the reciprocal estimate and reciprocal 18349 square root estimate instructions with additional Newton-Raphson 18350 steps to increase precision instead of doing a divide or square 18351 root and divide for floating-point arguments. You should use the 18352 `-ffast-math' option when using `-mrecip' (or at least 18353 `-funsafe-math-optimizations', `-finite-math-only', 18354 `-freciprocal-math' and `-fno-trapping-math'). Note that while 18355 the throughput of the sequence is generally higher than the 18356 throughput of the non-reciprocal instruction, the precision of the 18357 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 18358 equals 0.99999994) for reciprocal square roots. 18359 18360`-mrecip=OPT' 18361 This option controls which reciprocal estimate instructions may be 18362 used. OPT is a comma-separated list of options, which may be 18363 preceded by a `!' to invert the option: 18364 18365 `all' 18366 Enable all estimate instructions. 18367 18368 `default' 18369 Enable the default instructions, equivalent to `-mrecip'. 18370 18371 `none' 18372 Disable all estimate instructions, equivalent to `-mno-recip'. 18373 18374 `div' 18375 Enable the reciprocal approximation instructions for both 18376 single and double precision. 18377 18378 `divf' 18379 Enable the single-precision reciprocal approximation 18380 instructions. 18381 18382 `divd' 18383 Enable the double-precision reciprocal approximation 18384 instructions. 18385 18386 `rsqrt' 18387 Enable the reciprocal square root approximation instructions 18388 for both single and double precision. 18389 18390 `rsqrtf' 18391 Enable the single-precision reciprocal square root 18392 approximation instructions. 18393 18394 `rsqrtd' 18395 Enable the double-precision reciprocal square root 18396 approximation instructions. 18397 18398 18399 So, for example, `-mrecip=all,!rsqrtd' enables all of the 18400 reciprocal estimate instructions, except for the `FRSQRTE', 18401 `XSRSQRTEDP', and `XVRSQRTEDP' instructions which handle the 18402 double-precision reciprocal square root calculations. 18403 18404`-mrecip-precision' 18405`-mno-recip-precision' 18406 Assume (do not assume) that the reciprocal estimate instructions 18407 provide higher-precision estimates than is mandated by the PowerPC 18408 ABI. Selecting `-mcpu=power6', `-mcpu=power7' or `-mcpu=power8' 18409 automatically selects `-mrecip-precision'. The double-precision 18410 square root estimate instructions are not generated by default on 18411 low-precision machines, since they do not provide an estimate that 18412 converges after three steps. 18413 18414`-mveclibabi=TYPE' 18415 Specifies the ABI type to use for vectorizing intrinsics using an 18416 external library. The only type supported at present is `mass', 18417 which specifies to use IBM's Mathematical Acceleration Subsystem 18418 (MASS) libraries for vectorizing intrinsics using external 18419 libraries. GCC currently emits calls to `acosd2', `acosf4', 18420 `acoshd2', `acoshf4', `asind2', `asinf4', `asinhd2', `asinhf4', 18421 `atan2d2', `atan2f4', `atand2', `atanf4', `atanhd2', `atanhf4', 18422 `cbrtd2', `cbrtf4', `cosd2', `cosf4', `coshd2', `coshf4', 18423 `erfcd2', `erfcf4', `erfd2', `erff4', `exp2d2', `exp2f4', `expd2', 18424 `expf4', `expm1d2', `expm1f4', `hypotd2', `hypotf4', `lgammad2', 18425 `lgammaf4', `log10d2', `log10f4', `log1pd2', `log1pf4', `log2d2', 18426 `log2f4', `logd2', `logf4', `powd2', `powf4', `sind2', `sinf4', 18427 `sinhd2', `sinhf4', `sqrtd2', `sqrtf4', `tand2', `tanf4', 18428 `tanhd2', and `tanhf4' when generating code for power7. Both 18429 `-ftree-vectorize' and `-funsafe-math-optimizations' must also be 18430 enabled. The MASS libraries must be specified at link time. 18431 18432`-mfriz' 18433`-mno-friz' 18434 Generate (do not generate) the `friz' instruction when the 18435 `-funsafe-math-optimizations' option is used to optimize rounding 18436 of floating-point values to 64-bit integer and back to floating 18437 point. The `friz' instruction does not return the same value if 18438 the floating-point number is too large to fit in an integer. 18439 18440`-mpointers-to-nested-functions' 18441`-mno-pointers-to-nested-functions' 18442 Generate (do not generate) code to load up the static chain 18443 register (`r11') when calling through a pointer on AIX and 64-bit 18444 Linux systems where a function pointer points to a 3-word 18445 descriptor giving the function address, TOC value to be loaded in 18446 register `r2', and static chain value to be loaded in register 18447 `r11'. The `-mpointers-to-nested-functions' is on by default. 18448 You cannot call through pointers to nested functions or pointers 18449 to functions compiled in other languages that use the static chain 18450 if you use `-mno-pointers-to-nested-functions'. 18451 18452`-msave-toc-indirect' 18453`-mno-save-toc-indirect' 18454 Generate (do not generate) code to save the TOC value in the 18455 reserved stack location in the function prologue if the function 18456 calls through a pointer on AIX and 64-bit Linux systems. If the 18457 TOC value is not saved in the prologue, it is saved just before 18458 the call through the pointer. The `-mno-save-toc-indirect' option 18459 is the default. 18460 18461`-mcompat-align-parm' 18462`-mno-compat-align-parm' 18463 Generate (do not generate) code to pass structure parameters with a 18464 maximum alignment of 64 bits, for compatibility with older versions 18465 of GCC. 18466 18467 Older versions of GCC (prior to 4.9.0) incorrectly did not align a 18468 structure parameter on a 128-bit boundary when that structure 18469 contained a member requiring 128-bit alignment. This is corrected 18470 in more recent versions of GCC. This option may be used to 18471 generate code that is compatible with functions compiled with 18472 older versions of GCC. 18473 18474 The `-mno-compat-align-parm' option is the default. 18475 18476 18477File: gcc.info, Node: RX Options, Next: S/390 and zSeries Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 18478 184793.17.38 RX Options 18480------------------ 18481 18482These command-line options are defined for RX targets: 18483 18484`-m64bit-doubles' 18485`-m32bit-doubles' 18486 Make the `double' data type be 64 bits (`-m64bit-doubles') or 32 18487 bits (`-m32bit-doubles') in size. The default is 18488 `-m32bit-doubles'. _Note_ RX floating-point hardware only works 18489 on 32-bit values, which is why the default is `-m32bit-doubles'. 18490 18491`-fpu' 18492`-nofpu' 18493 Enables (`-fpu') or disables (`-nofpu') the use of RX 18494 floating-point hardware. The default is enabled for the RX600 18495 series and disabled for the RX200 series. 18496 18497 Floating-point instructions are only generated for 32-bit 18498 floating-point values, however, so the FPU hardware is not used 18499 for doubles if the `-m64bit-doubles' option is used. 18500 18501 _Note_ If the `-fpu' option is enabled then 18502 `-funsafe-math-optimizations' is also enabled automatically. This 18503 is because the RX FPU instructions are themselves unsafe. 18504 18505`-mcpu=NAME' 18506 Selects the type of RX CPU to be targeted. Currently three types 18507 are supported, the generic `RX600' and `RX200' series hardware and 18508 the specific `RX610' CPU. The default is `RX600'. 18509 18510 The only difference between `RX600' and `RX610' is that the 18511 `RX610' does not support the `MVTIPL' instruction. 18512 18513 The `RX200' series does not have a hardware floating-point unit 18514 and so `-nofpu' is enabled by default when this type is selected. 18515 18516`-mbig-endian-data' 18517`-mlittle-endian-data' 18518 Store data (but not code) in the big-endian format. The default is 18519 `-mlittle-endian-data', i.e. to store data in the little-endian 18520 format. 18521 18522`-msmall-data-limit=N' 18523 Specifies the maximum size in bytes of global and static variables 18524 which can be placed into the small data area. Using the small data 18525 area can lead to smaller and faster code, but the size of area is 18526 limited and it is up to the programmer to ensure that the area does 18527 not overflow. Also when the small data area is used one of the 18528 RX's registers (usually `r13') is reserved for use pointing to this 18529 area, so it is no longer available for use by the compiler. This 18530 could result in slower and/or larger code if variables are pushed 18531 onto the stack instead of being held in this register. 18532 18533 Note, common variables (variables that have not been initialized) 18534 and constants are not placed into the small data area as they are 18535 assigned to other sections in the output executable. 18536 18537 The default value is zero, which disables this feature. Note, this 18538 feature is not enabled by default with higher optimization levels 18539 (`-O2' etc) because of the potentially detrimental effects of 18540 reserving a register. It is up to the programmer to experiment and 18541 discover whether this feature is of benefit to their program. See 18542 the description of the `-mpid' option for a description of how the 18543 actual register to hold the small data area pointer is chosen. 18544 18545`-msim' 18546`-mno-sim' 18547 Use the simulator runtime. The default is to use the libgloss 18548 board-specific runtime. 18549 18550`-mas100-syntax' 18551`-mno-as100-syntax' 18552 When generating assembler output use a syntax that is compatible 18553 with Renesas's AS100 assembler. This syntax can also be handled 18554 by the GAS assembler, but it has some restrictions so it is not 18555 generated by default. 18556 18557`-mmax-constant-size=N' 18558 Specifies the maximum size, in bytes, of a constant that can be 18559 used as an operand in a RX instruction. Although the RX 18560 instruction set does allow constants of up to 4 bytes in length to 18561 be used in instructions, a longer value equates to a longer 18562 instruction. Thus in some circumstances it can be beneficial to 18563 restrict the size of constants that are used in instructions. 18564 Constants that are too big are instead placed into a constant pool 18565 and referenced via register indirection. 18566 18567 The value N can be between 0 and 4. A value of 0 (the default) or 18568 4 means that constants of any size are allowed. 18569 18570`-mrelax' 18571 Enable linker relaxation. Linker relaxation is a process whereby 18572 the linker attempts to reduce the size of a program by finding 18573 shorter versions of various instructions. Disabled by default. 18574 18575`-mint-register=N' 18576 Specify the number of registers to reserve for fast interrupt 18577 handler functions. The value N can be between 0 and 4. A value 18578 of 1 means that register `r13' is reserved for the exclusive use 18579 of fast interrupt handlers. A value of 2 reserves `r13' and 18580 `r12'. A value of 3 reserves `r13', `r12' and `r11', and a value 18581 of 4 reserves `r13' through `r10'. A value of 0, the default, 18582 does not reserve any registers. 18583 18584`-msave-acc-in-interrupts' 18585 Specifies that interrupt handler functions should preserve the 18586 accumulator register. This is only necessary if normal code might 18587 use the accumulator register, for example because it performs 18588 64-bit multiplications. The default is to ignore the accumulator 18589 as this makes the interrupt handlers faster. 18590 18591`-mpid' 18592`-mno-pid' 18593 Enables the generation of position independent data. When enabled 18594 any access to constant data is done via an offset from a base 18595 address held in a register. This allows the location of constant 18596 data to be determined at run time without requiring the executable 18597 to be relocated, which is a benefit to embedded applications with 18598 tight memory constraints. Data that can be modified is not 18599 affected by this option. 18600 18601 Note, using this feature reserves a register, usually `r13', for 18602 the constant data base address. This can result in slower and/or 18603 larger code, especially in complicated functions. 18604 18605 The actual register chosen to hold the constant data base address 18606 depends upon whether the `-msmall-data-limit' and/or the 18607 `-mint-register' command-line options are enabled. Starting with 18608 register `r13' and proceeding downwards, registers are allocated 18609 first to satisfy the requirements of `-mint-register', then 18610 `-mpid' and finally `-msmall-data-limit'. Thus it is possible for 18611 the small data area register to be `r8' if both `-mint-register=4' 18612 and `-mpid' are specified on the command line. 18613 18614 By default this feature is not enabled. The default can be 18615 restored via the `-mno-pid' command-line option. 18616 18617`-mno-warn-multiple-fast-interrupts' 18618`-mwarn-multiple-fast-interrupts' 18619 Prevents GCC from issuing a warning message if it finds more than 18620 one fast interrupt handler when it is compiling a file. The 18621 default is to issue a warning for each extra fast interrupt 18622 handler found, as the RX only supports one such interrupt. 18623 18624 18625 _Note:_ The generic GCC command-line option `-ffixed-REG' has special 18626significance to the RX port when used with the `interrupt' function 18627attribute. This attribute indicates a function intended to process 18628fast interrupts. GCC ensures that it only uses the registers `r10', 18629`r11', `r12' and/or `r13' and only provided that the normal use of the 18630corresponding registers have been restricted via the `-ffixed-REG' or 18631`-mint-register' command-line options. 18632 18633 18634File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RX Options, Up: Submodel Options 18635 186363.17.39 S/390 and zSeries Options 18637--------------------------------- 18638 18639These are the `-m' options defined for the S/390 and zSeries 18640architecture. 18641 18642`-mhard-float' 18643`-msoft-float' 18644 Use (do not use) the hardware floating-point instructions and 18645 registers for floating-point operations. When `-msoft-float' is 18646 specified, functions in `libgcc.a' are used to perform 18647 floating-point operations. When `-mhard-float' is specified, the 18648 compiler generates IEEE floating-point instructions. This is the 18649 default. 18650 18651`-mhard-dfp' 18652`-mno-hard-dfp' 18653 Use (do not use) the hardware decimal-floating-point instructions 18654 for decimal-floating-point operations. When `-mno-hard-dfp' is 18655 specified, functions in `libgcc.a' are used to perform 18656 decimal-floating-point operations. When `-mhard-dfp' is 18657 specified, the compiler generates decimal-floating-point hardware 18658 instructions. This is the default for `-march=z9-ec' or higher. 18659 18660`-mlong-double-64' 18661`-mlong-double-128' 18662 These switches control the size of `long double' type. A size of 18663 64 bits makes the `long double' type equivalent to the `double' 18664 type. This is the default. 18665 18666`-mbackchain' 18667`-mno-backchain' 18668 Store (do not store) the address of the caller's frame as 18669 backchain pointer into the callee's stack frame. A backchain may 18670 be needed to allow debugging using tools that do not understand 18671 DWARF 2 call frame information. When `-mno-packed-stack' is in 18672 effect, the backchain pointer is stored at the bottom of the stack 18673 frame; when `-mpacked-stack' is in effect, the backchain is placed 18674 into the topmost word of the 96/160 byte register save area. 18675 18676 In general, code compiled with `-mbackchain' is call-compatible 18677 with code compiled with `-mmo-backchain'; however, use of the 18678 backchain for debugging purposes usually requires that the whole 18679 binary is built with `-mbackchain'. Note that the combination of 18680 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not 18681 supported. In order to build a linux kernel use `-msoft-float'. 18682 18683 The default is to not maintain the backchain. 18684 18685`-mpacked-stack' 18686`-mno-packed-stack' 18687 Use (do not use) the packed stack layout. When 18688 `-mno-packed-stack' is specified, the compiler uses the all fields 18689 of the 96/160 byte register save area only for their default 18690 purpose; unused fields still take up stack space. When 18691 `-mpacked-stack' is specified, register save slots are densely 18692 packed at the top of the register save area; unused space is 18693 reused for other purposes, allowing for more efficient use of the 18694 available stack space. However, when `-mbackchain' is also in 18695 effect, the topmost word of the save area is always used to store 18696 the backchain, and the return address register is always saved two 18697 words below the backchain. 18698 18699 As long as the stack frame backchain is not used, code generated 18700 with `-mpacked-stack' is call-compatible with code generated with 18701 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 18702 for S/390 or zSeries generated code that uses the stack frame 18703 backchain at run time, not just for debugging purposes. Such code 18704 is not call-compatible with code compiled with `-mpacked-stack'. 18705 Also, note that the combination of `-mbackchain', `-mpacked-stack' 18706 and `-mhard-float' is not supported. In order to build a linux 18707 kernel use `-msoft-float'. 18708 18709 The default is to not use the packed stack layout. 18710 18711`-msmall-exec' 18712`-mno-small-exec' 18713 Generate (or do not generate) code using the `bras' instruction to 18714 do subroutine calls. This only works reliably if the total 18715 executable size does not exceed 64k. The default is to use the 18716 `basr' instruction instead, which does not have this limitation. 18717 18718`-m64' 18719`-m31' 18720 When `-m31' is specified, generate code compliant to the GNU/Linux 18721 for S/390 ABI. When `-m64' is specified, generate code compliant 18722 to the GNU/Linux for zSeries ABI. This allows GCC in particular 18723 to generate 64-bit instructions. For the `s390' targets, the 18724 default is `-m31', while the `s390x' targets default to `-m64'. 18725 18726`-mzarch' 18727`-mesa' 18728 When `-mzarch' is specified, generate code using the instructions 18729 available on z/Architecture. When `-mesa' is specified, generate 18730 code using the instructions available on ESA/390. Note that 18731 `-mesa' is not possible with `-m64'. When generating code 18732 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 18733 When generating code compliant to the GNU/Linux for zSeries ABI, 18734 the default is `-mzarch'. 18735 18736`-mmvcle' 18737`-mno-mvcle' 18738 Generate (or do not generate) code using the `mvcle' instruction 18739 to perform block moves. When `-mno-mvcle' is specified, use a 18740 `mvc' loop instead. This is the default unless optimizing for 18741 size. 18742 18743`-mdebug' 18744`-mno-debug' 18745 Print (or do not print) additional debug information when 18746 compiling. The default is to not print debug information. 18747 18748`-march=CPU-TYPE' 18749 Generate code that runs on CPU-TYPE, which is the name of a system 18750 representing a certain processor type. Possible values for 18751 CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec', `z10', 18752 `z196', `zEC12', and `z13'. When generating code using the 18753 instructions available on z/Architecture, the default is 18754 `-march=z900'. Otherwise, the default is `-march=g5'. 18755 18756`-mtune=CPU-TYPE' 18757 Tune to CPU-TYPE everything applicable about the generated code, 18758 except for the ABI and the set of available instructions. The 18759 list of CPU-TYPE values is the same as for `-march'. The default 18760 is the value used for `-march'. 18761 18762`-mtpf-trace' 18763`-mno-tpf-trace' 18764 Generate code that adds (does not add) in TPF OS specific branches 18765 to trace routines in the operating system. This option is off by 18766 default, even when compiling for the TPF OS. 18767 18768`-mfused-madd' 18769`-mno-fused-madd' 18770 Generate code that uses (does not use) the floating-point multiply 18771 and accumulate instructions. These instructions are generated by 18772 default if hardware floating point is used. 18773 18774`-mwarn-framesize=FRAMESIZE' 18775 Emit a warning if the current function exceeds the given frame 18776 size. Because this is a compile-time check it doesn't need to be 18777 a real problem when the program runs. It is intended to identify 18778 functions that most probably cause a stack overflow. It is useful 18779 to be used in an environment with limited stack size e.g. the 18780 linux kernel. 18781 18782`-mwarn-dynamicstack' 18783 Emit a warning if the function calls `alloca' or uses 18784 dynamically-sized arrays. This is generally a bad idea with a 18785 limited stack size. 18786 18787`-mstack-guard=STACK-GUARD' 18788`-mstack-size=STACK-SIZE' 18789 If these options are provided the S/390 back end emits additional 18790 instructions in the function prologue that trigger a trap if the 18791 stack size is STACK-GUARD bytes above the STACK-SIZE (remember 18792 that the stack on S/390 grows downward). If the STACK-GUARD 18793 option is omitted the smallest power of 2 larger than the frame 18794 size of the compiled function is chosen. These options are 18795 intended to be used to help debugging stack overflow problems. 18796 The additionally emitted code causes only little overhead and 18797 hence can also be used in production-like systems without greater 18798 performance degradation. The given values have to be exact powers 18799 of 2 and STACK-SIZE has to be greater than STACK-GUARD without 18800 exceeding 64k. In order to be efficient the extra code makes the 18801 assumption that the stack starts at an address aligned to the 18802 value given by STACK-SIZE. The STACK-GUARD option can only be 18803 used in conjunction with STACK-SIZE. 18804 18805`-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS' 18806 If the hotpatch option is enabled, a "hot-patching" function 18807 prologue is generated for all functions in the compilation unit. 18808 The funtion label is prepended with the given number of two-byte 18809 NOP instructions (PRE-HALFWORDS, maximum 1000000). After the 18810 label, 2 * POST-HALFWORDS bytes are appended, using the largest 18811 NOP like instructions the architecture allows (maximum 1000000). 18812 18813 If both arguments are zero, hotpatching is disabled. 18814 18815 This option can be overridden for individual functions with the 18816 `hotpatch' attribute. 18817 18818 18819File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 18820 188213.17.40 Score Options 18822--------------------- 18823 18824These options are defined for Score implementations: 18825 18826`-meb' 18827 Compile code for big-endian mode. This is the default. 18828 18829`-mel' 18830 Compile code for little-endian mode. 18831 18832`-mnhwloop' 18833 Disable generation of `bcnz' instructions. 18834 18835`-muls' 18836 Enable generation of unaligned load and store instructions. 18837 18838`-mmac' 18839 Enable the use of multiply-accumulate instructions. Disabled by 18840 default. 18841 18842`-mscore5' 18843 Specify the SCORE5 as the target architecture. 18844 18845`-mscore5u' 18846 Specify the SCORE5U of the target architecture. 18847 18848`-mscore7' 18849 Specify the SCORE7 as the target architecture. This is the default. 18850 18851`-mscore7d' 18852 Specify the SCORE7D as the target architecture. 18853 18854 18855File: gcc.info, Node: SH Options, Next: Solaris 2 Options, Prev: Score Options, Up: Submodel Options 18856 188573.17.41 SH Options 18858------------------ 18859 18860These `-m' options are defined for the SH implementations: 18861 18862`-m1' 18863 Generate code for the SH1. 18864 18865`-m2' 18866 Generate code for the SH2. 18867 18868`-m2e' 18869 Generate code for the SH2e. 18870 18871`-m2a-nofpu' 18872 Generate code for the SH2a without FPU, or for a SH2a-FPU in such 18873 a way that the floating-point unit is not used. 18874 18875`-m2a-single-only' 18876 Generate code for the SH2a-FPU, in such a way that no 18877 double-precision floating-point operations are used. 18878 18879`-m2a-single' 18880 Generate code for the SH2a-FPU assuming the floating-point unit is 18881 in single-precision mode by default. 18882 18883`-m2a' 18884 Generate code for the SH2a-FPU assuming the floating-point unit is 18885 in double-precision mode by default. 18886 18887`-m3' 18888 Generate code for the SH3. 18889 18890`-m3e' 18891 Generate code for the SH3e. 18892 18893`-m4-nofpu' 18894 Generate code for the SH4 without a floating-point unit. 18895 18896`-m4-single-only' 18897 Generate code for the SH4 with a floating-point unit that only 18898 supports single-precision arithmetic. 18899 18900`-m4-single' 18901 Generate code for the SH4 assuming the floating-point unit is in 18902 single-precision mode by default. 18903 18904`-m4' 18905 Generate code for the SH4. 18906 18907`-m4-100' 18908 Generate code for SH4-100. 18909 18910`-m4-100-nofpu' 18911 Generate code for SH4-100 in such a way that the floating-point 18912 unit is not used. 18913 18914`-m4-100-single' 18915 Generate code for SH4-100 assuming the floating-point unit is in 18916 single-precision mode by default. 18917 18918`-m4-100-single-only' 18919 Generate code for SH4-100 in such a way that no double-precision 18920 floating-point operations are used. 18921 18922`-m4-200' 18923 Generate code for SH4-200. 18924 18925`-m4-200-nofpu' 18926 Generate code for SH4-200 without in such a way that the 18927 floating-point unit is not used. 18928 18929`-m4-200-single' 18930 Generate code for SH4-200 assuming the floating-point unit is in 18931 single-precision mode by default. 18932 18933`-m4-200-single-only' 18934 Generate code for SH4-200 in such a way that no double-precision 18935 floating-point operations are used. 18936 18937`-m4-300' 18938 Generate code for SH4-300. 18939 18940`-m4-300-nofpu' 18941 Generate code for SH4-300 without in such a way that the 18942 floating-point unit is not used. 18943 18944`-m4-300-single' 18945 Generate code for SH4-300 in such a way that no double-precision 18946 floating-point operations are used. 18947 18948`-m4-300-single-only' 18949 Generate code for SH4-300 in such a way that no double-precision 18950 floating-point operations are used. 18951 18952`-m4-340' 18953 Generate code for SH4-340 (no MMU, no FPU). 18954 18955`-m4-500' 18956 Generate code for SH4-500 (no FPU). Passes `-isa=sh4-nofpu' to the 18957 assembler. 18958 18959`-m4a-nofpu' 18960 Generate code for the SH4al-dsp, or for a SH4a in such a way that 18961 the floating-point unit is not used. 18962 18963`-m4a-single-only' 18964 Generate code for the SH4a, in such a way that no double-precision 18965 floating-point operations are used. 18966 18967`-m4a-single' 18968 Generate code for the SH4a assuming the floating-point unit is in 18969 single-precision mode by default. 18970 18971`-m4a' 18972 Generate code for the SH4a. 18973 18974`-m4al' 18975 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to 18976 the assembler. GCC doesn't generate any DSP instructions at the 18977 moment. 18978 18979`-m5-32media' 18980 Generate 32-bit code for SHmedia. 18981 18982`-m5-32media-nofpu' 18983 Generate 32-bit code for SHmedia in such a way that the 18984 floating-point unit is not used. 18985 18986`-m5-64media' 18987 Generate 64-bit code for SHmedia. 18988 18989`-m5-64media-nofpu' 18990 Generate 64-bit code for SHmedia in such a way that the 18991 floating-point unit is not used. 18992 18993`-m5-compact' 18994 Generate code for SHcompact. 18995 18996`-m5-compact-nofpu' 18997 Generate code for SHcompact in such a way that the floating-point 18998 unit is not used. 18999 19000`-mb' 19001 Compile code for the processor in big-endian mode. 19002 19003`-ml' 19004 Compile code for the processor in little-endian mode. 19005 19006`-mdalign' 19007 Align doubles at 64-bit boundaries. Note that this changes the 19008 calling conventions, and thus some functions from the standard C 19009 library do not work unless you recompile it first with `-mdalign'. 19010 19011`-mrelax' 19012 Shorten some address references at link time, when possible; uses 19013 the linker option `-relax'. 19014 19015`-mbigtable' 19016 Use 32-bit offsets in `switch' tables. The default is to use 19017 16-bit offsets. 19018 19019`-mbitops' 19020 Enable the use of bit manipulation instructions on SH2A. 19021 19022`-mfmovd' 19023 Enable the use of the instruction `fmovd'. Check `-mdalign' for 19024 alignment constraints. 19025 19026`-mrenesas' 19027 Comply with the calling conventions defined by Renesas. 19028 19029`-mno-renesas' 19030 Comply with the calling conventions defined for GCC before the 19031 Renesas conventions were available. This option is the default 19032 for all targets of the SH toolchain. 19033 19034`-mnomacsave' 19035 Mark the `MAC' register as call-clobbered, even if `-mrenesas' is 19036 given. 19037 19038`-mieee' 19039`-mno-ieee' 19040 Control the IEEE compliance of floating-point comparisons, which 19041 affects the handling of cases where the result of a comparison is 19042 unordered. By default `-mieee' is implicitly enabled. If 19043 `-ffinite-math-only' is enabled `-mno-ieee' is implicitly set, 19044 which results in faster floating-point greater-equal and 19045 less-equal comparisons. The implcit settings can be overridden by 19046 specifying either `-mieee' or `-mno-ieee'. 19047 19048`-minline-ic_invalidate' 19049 Inline code to invalidate instruction cache entries after setting 19050 up nested function trampolines. This option has no effect if 19051 `-musermode' is in effect and the selected code generation option 19052 (e.g. `-m4') does not allow the use of the `icbi' instruction. If 19053 the selected code generation option does not allow the use of the 19054 `icbi' instruction, and `-musermode' is not in effect, the inlined 19055 code manipulates the instruction cache address array directly with 19056 an associative write. This not only requires privileged mode at 19057 run time, but it also fails if the cache line had been mapped via 19058 the TLB and has become unmapped. 19059 19060`-misize' 19061 Dump instruction size and location in the assembly code. 19062 19063`-mpadstruct' 19064 This option is deprecated. It pads structures to multiple of 4 19065 bytes, which is incompatible with the SH ABI. 19066 19067`-matomic-model=MODEL' 19068 Sets the model of atomic operations and additional parameters as a 19069 comma separated list. For details on the atomic built-in 19070 functions see *note __atomic Builtins::. The following models and 19071 parameters are supported: 19072 19073 `none' 19074 Disable compiler generated atomic sequences and emit library 19075 calls for atomic operations. This is the default if the 19076 target is not `sh*-*-linux*'. 19077 19078 `soft-gusa' 19079 Generate GNU/Linux compatible gUSA software atomic sequences 19080 for the atomic built-in functions. The generated atomic 19081 sequences require additional support from the 19082 interrupt/exception handling code of the system and are only 19083 suitable for SH3* and SH4* single-core systems. This option 19084 is enabled by default when the target is `sh*-*-linux*' and 19085 SH3* or SH4*. When the target is SH4A, this option also 19086 partially utilizes the hardware atomic instructions `movli.l' 19087 and `movco.l' to create more efficient code, unless `strict' 19088 is specified. 19089 19090 `soft-tcb' 19091 Generate software atomic sequences that use a variable in the 19092 thread control block. This is a variation of the gUSA 19093 sequences which can also be used on SH1* and SH2* targets. 19094 The generated atomic sequences require additional support 19095 from the interrupt/exception handling code of the system and 19096 are only suitable for single-core systems. When using this 19097 model, the `gbr-offset=' parameter has to be specified as 19098 well. 19099 19100 `soft-imask' 19101 Generate software atomic sequences that temporarily disable 19102 interrupts by setting `SR.IMASK = 1111'. This model works 19103 only when the program runs in privileged mode and is only 19104 suitable for single-core systems. Additional support from 19105 the interrupt/exception handling code of the system is not 19106 required. This model is enabled by default when the target is 19107 `sh*-*-linux*' and SH1* or SH2*. 19108 19109 `hard-llcs' 19110 Generate hardware atomic sequences using the `movli.l' and 19111 `movco.l' instructions only. This is only available on SH4A 19112 and is suitable for multi-core systems. Since the hardware 19113 instructions support only 32 bit atomic variables access to 8 19114 or 16 bit variables is emulated with 32 bit accesses. Code 19115 compiled with this option is also compatible with other 19116 software atomic model interrupt/exception handling systems if 19117 executed on an SH4A system. Additional support from the 19118 interrupt/exception handling code of the system is not 19119 required for this model. 19120 19121 `gbr-offset=' 19122 This parameter specifies the offset in bytes of the variable 19123 in the thread control block structure that should be used by 19124 the generated atomic sequences when the `soft-tcb' model has 19125 been selected. For other models this parameter is ignored. 19126 The specified value must be an integer multiple of four and 19127 in the range 0-1020. 19128 19129 `strict' 19130 This parameter prevents mixed usage of multiple atomic 19131 models, even if they are compatible, and makes the compiler 19132 generate atomic sequences of the specified model only. 19133 19134 19135`-mtas' 19136 Generate the `tas.b' opcode for `__atomic_test_and_set'. Notice 19137 that depending on the particular hardware and software 19138 configuration this can degrade overall performance due to the 19139 operand cache line flushes that are implied by the `tas.b' 19140 instruction. On multi-core SH4A processors the `tas.b' 19141 instruction must be used with caution since it can result in data 19142 corruption for certain cache configurations. 19143 19144`-mprefergot' 19145 When generating position-independent code, emit function calls 19146 using the Global Offset Table instead of the Procedure Linkage 19147 Table. 19148 19149`-musermode' 19150`-mno-usermode' 19151 Don't allow (allow) the compiler generating privileged mode code. 19152 Specifying `-musermode' also implies `-mno-inline-ic_invalidate' 19153 if the inlined code would not work in user mode. `-musermode' is 19154 the default when the target is `sh*-*-linux*'. If the target is 19155 SH1* or SH2* `-musermode' has no effect, since there is no user 19156 mode. 19157 19158`-multcost=NUMBER' 19159 Set the cost to assume for a multiply insn. 19160 19161`-mdiv=STRATEGY' 19162 Set the division strategy to be used for integer division 19163 operations. For SHmedia STRATEGY can be one of: 19164 19165 `fp' 19166 Performs the operation in floating point. This has a very 19167 high latency, but needs only a few instructions, so it might 19168 be a good choice if your code has enough easily-exploitable 19169 ILP to allow the compiler to schedule the floating-point 19170 instructions together with other instructions. Division by 19171 zero causes a floating-point exception. 19172 19173 `inv' 19174 Uses integer operations to calculate the inverse of the 19175 divisor, and then multiplies the dividend with the inverse. 19176 This strategy allows CSE and hoisting of the inverse 19177 calculation. Division by zero calculates an unspecified 19178 result, but does not trap. 19179 19180 `inv:minlat' 19181 A variant of `inv' where, if no CSE or hoisting opportunities 19182 have been found, or if the entire operation has been hoisted 19183 to the same place, the last stages of the inverse calculation 19184 are intertwined with the final multiply to reduce the overall 19185 latency, at the expense of using a few more instructions, and 19186 thus offering fewer scheduling opportunities with other code. 19187 19188 `call' 19189 Calls a library function that usually implements the 19190 `inv:minlat' strategy. This gives high code density for 19191 `m5-*media-nofpu' compilations. 19192 19193 `call2' 19194 Uses a different entry point of the same library function, 19195 where it assumes that a pointer to a lookup table has already 19196 been set up, which exposes the pointer load to CSE and code 19197 hoisting optimizations. 19198 19199 `inv:call' 19200 `inv:call2' 19201 `inv:fp' 19202 Use the `inv' algorithm for initial code generation, but if 19203 the code stays unoptimized, revert to the `call', `call2', or 19204 `fp' strategies, respectively. Note that the 19205 potentially-trapping side effect of division by zero is 19206 carried by a separate instruction, so it is possible that all 19207 the integer instructions are hoisted out, but the marker for 19208 the side effect stays where it is. A recombination to 19209 floating-point operations or a call is not possible in that 19210 case. 19211 19212 `inv20u' 19213 `inv20l' 19214 Variants of the `inv:minlat' strategy. In the case that the 19215 inverse calculation is not separated from the multiply, they 19216 speed up division where the dividend fits into 20 bits (plus 19217 sign where applicable) by inserting a test to skip a number 19218 of operations in this case; this test slows down the case of 19219 larger dividends. `inv20u' assumes the case of a such a 19220 small dividend to be unlikely, and `inv20l' assumes it to be 19221 likely. 19222 19223 19224 For targets other than SHmedia STRATEGY can be one of: 19225 19226 `call-div1' 19227 Calls a library function that uses the single-step division 19228 instruction `div1' to perform the operation. Division by 19229 zero calculates an unspecified result and does not trap. 19230 This is the default except for SH4, SH2A and SHcompact. 19231 19232 `call-fp' 19233 Calls a library function that performs the operation in 19234 double precision floating point. Division by zero causes a 19235 floating-point exception. This is the default for SHcompact 19236 with FPU. Specifying this for targets that do not have a 19237 double precision FPU defaults to `call-div1'. 19238 19239 `call-table' 19240 Calls a library function that uses a lookup table for small 19241 divisors and the `div1' instruction with case distinction for 19242 larger divisors. Division by zero calculates an unspecified 19243 result and does not trap. This is the default for SH4. 19244 Specifying this for targets that do not have dynamic shift 19245 instructions defaults to `call-div1'. 19246 19247 19248 When a division strategy has not been specified the default 19249 strategy is selected based on the current target. For SH2A the 19250 default strategy is to use the `divs' and `divu' instructions 19251 instead of library function calls. 19252 19253`-maccumulate-outgoing-args' 19254 Reserve space once for outgoing arguments in the function prologue 19255 rather than around each call. Generally beneficial for 19256 performance and size. Also needed for unwinding to avoid changing 19257 the stack frame around conditional code. 19258 19259`-mdivsi3_libfunc=NAME' 19260 Set the name of the library function used for 32-bit signed 19261 division to NAME. This only affects the name used in the `call' 19262 and `inv:call' division strategies, and the compiler still expects 19263 the same sets of input/output/clobbered registers as if this 19264 option were not present. 19265 19266`-mfixed-range=REGISTER-RANGE' 19267 Generate code treating the given register range as fixed registers. 19268 A fixed register is one that the register allocator can not use. 19269 This is useful when compiling kernel code. A register range is 19270 specified as two registers separated by a dash. Multiple register 19271 ranges can be specified separated by a comma. 19272 19273`-mindexed-addressing' 19274 Enable the use of the indexed addressing mode for 19275 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 19276 implement 32-bit wrap-around semantics for the indexed addressing 19277 mode. The architecture allows the implementation of processors 19278 with 64-bit MMU, which the OS could use to get 32-bit addressing, 19279 but since no current hardware implementation supports this or any 19280 other way to make the indexed addressing mode safe to use in the 19281 32-bit ABI, the default is `-mno-indexed-addressing'. 19282 19283`-mgettrcost=NUMBER' 19284 Set the cost assumed for the `gettr' instruction to NUMBER. The 19285 default is 2 if `-mpt-fixed' is in effect, 100 otherwise. 19286 19287`-mpt-fixed' 19288 Assume `pt*' instructions won't trap. This generally generates 19289 better-scheduled code, but is unsafe on current hardware. The 19290 current architecture definition says that `ptabs' and `ptrel' trap 19291 when the target anded with 3 is 3. This has the unintentional 19292 effect of making it unsafe to schedule these instructions before a 19293 branch, or hoist them out of a loop. For example, 19294 `__do_global_ctors', a part of `libgcc' that runs constructors at 19295 program startup, calls functions in a list which is delimited by 19296 -1. With the `-mpt-fixed' option, the `ptabs' is done before 19297 testing against -1. That means that all the constructors run a 19298 bit more quickly, but when the loop comes to the end of the list, 19299 the program crashes because `ptabs' loads -1 into a target 19300 register. 19301 19302 Since this option is unsafe for any hardware implementing the 19303 current architecture specification, the default is 19304 `-mno-pt-fixed'. Unless specified explicitly with `-mgettrcost', 19305 `-mno-pt-fixed' also implies `-mgettrcost=100'; this deters 19306 register allocation from using target registers for storing 19307 ordinary integers. 19308 19309`-minvalid-symbols' 19310 Assume symbols might be invalid. Ordinary function symbols 19311 generated by the compiler are always valid to load with 19312 `movi'/`shori'/`ptabs' or `movi'/`shori'/`ptrel', but with 19313 assembler and/or linker tricks it is possible to generate symbols 19314 that cause `ptabs' or `ptrel' to trap. This option is only 19315 meaningful when `-mno-pt-fixed' is in effect. It prevents 19316 cross-basic-block CSE, hoisting and most scheduling of symbol 19317 loads. The default is `-mno-invalid-symbols'. 19318 19319`-mbranch-cost=NUM' 19320 Assume NUM to be the cost for a branch instruction. Higher numbers 19321 make the compiler try to generate more branch-free code if 19322 possible. If not specified the value is selected depending on the 19323 processor type that is being compiled for. 19324 19325`-mzdcbranch' 19326`-mno-zdcbranch' 19327 Assume (do not assume) that zero displacement conditional branch 19328 instructions `bt' and `bf' are fast. If `-mzdcbranch' is 19329 specified, the compiler prefers zero displacement branch code 19330 sequences. This is enabled by default when generating code for 19331 SH4 and SH4A. It can be explicitly disabled by specifying 19332 `-mno-zdcbranch'. 19333 19334`-mcbranch-force-delay-slot' 19335 Force the usage of delay slots for conditional branches, which 19336 stuffs the delay slot with a `nop' if a suitable instruction can't 19337 be found. By default this option is disabled. It can be enabled 19338 to work around hardware bugs as found in the original SH7055. 19339 19340`-mfused-madd' 19341`-mno-fused-madd' 19342 Generate code that uses (does not use) the floating-point multiply 19343 and accumulate instructions. These instructions are generated by 19344 default if hardware floating point is used. The machine-dependent 19345 `-mfused-madd' option is now mapped to the machine-independent 19346 `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to 19347 `-ffp-contract=off'. 19348 19349`-mfsca' 19350`-mno-fsca' 19351 Allow or disallow the compiler to emit the `fsca' instruction for 19352 sine and cosine approximations. The option `-mfsca' must be used 19353 in combination with `-funsafe-math-optimizations'. It is enabled 19354 by default when generating code for SH4A. Using `-mno-fsca' 19355 disables sine and cosine approximations even if 19356 `-funsafe-math-optimizations' is in effect. 19357 19358`-mfsrra' 19359`-mno-fsrra' 19360 Allow or disallow the compiler to emit the `fsrra' instruction for 19361 reciprocal square root approximations. The option `-mfsrra' must 19362 be used in combination with `-funsafe-math-optimizations' and 19363 `-ffinite-math-only'. It is enabled by default when generating 19364 code for SH4A. Using `-mno-fsrra' disables reciprocal square root 19365 approximations even if `-funsafe-math-optimizations' and 19366 `-ffinite-math-only' are in effect. 19367 19368`-mpretend-cmove' 19369 Prefer zero-displacement conditional branches for conditional move 19370 instruction patterns. This can result in faster code on the SH4 19371 processor. 19372 19373 19374 19375File: gcc.info, Node: Solaris 2 Options, Next: SPARC Options, Prev: SH Options, Up: Submodel Options 19376 193773.17.42 Solaris 2 Options 19378------------------------- 19379 19380These `-m' options are supported on Solaris 2: 19381 19382`-mclear-hwcap' 19383 `-mclear-hwcap' tells the compiler to remove the hardware 19384 capabilities generated by the Solaris assembler. This is only 19385 necessary when object files use ISA extensions not supported by 19386 the current machine, but check at runtime whether or not to use 19387 them. 19388 19389`-mimpure-text' 19390 `-mimpure-text', used in addition to `-shared', tells the compiler 19391 to not pass `-z text' to the linker when linking a shared object. 19392 Using this option, you can link position-dependent code into a 19393 shared object. 19394 19395 `-mimpure-text' suppresses the "relocations remain against 19396 allocatable but non-writable sections" linker error message. 19397 However, the necessary relocations trigger copy-on-write, and the 19398 shared object is not actually shared across processes. Instead of 19399 using `-mimpure-text', you should compile all source code with 19400 `-fpic' or `-fPIC'. 19401 19402 19403 These switches are supported in addition to the above on Solaris 2: 19404 19405`-pthreads' 19406 Add support for multithreading using the POSIX threads library. 19407 This option sets flags for both the preprocessor and linker. This 19408 option does not affect the thread safety of object code produced 19409 by the compiler or that of libraries supplied with it. 19410 19411`-pthread' 19412 This is a synonym for `-pthreads'. 19413 19414 19415File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: Solaris 2 Options, Up: Submodel Options 19416 194173.17.43 SPARC Options 19418--------------------- 19419 19420These `-m' options are supported on the SPARC: 19421 19422`-mno-app-regs' 19423`-mapp-regs' 19424 Specify `-mapp-regs' to generate output using the global registers 19425 2 through 4, which the SPARC SVR4 ABI reserves for applications. 19426 Like the global register 1, each global register 2 through 4 is 19427 then treated as an allocable register that is clobbered by 19428 function calls. This is the default. 19429 19430 To be fully SVR4 ABI-compliant at the cost of some performance 19431 loss, specify `-mno-app-regs'. You should compile libraries and 19432 system software with this option. 19433 19434`-mflat' 19435`-mno-flat' 19436 With `-mflat', the compiler does not generate save/restore 19437 instructions and uses a "flat" or single register window model. 19438 This model is compatible with the regular register window model. 19439 The local registers and the input registers (0-5) are still 19440 treated as "call-saved" registers and are saved on the stack as 19441 needed. 19442 19443 With `-mno-flat' (the default), the compiler generates save/restore 19444 instructions (except for leaf functions). This is the normal 19445 operating mode. 19446 19447`-mfpu' 19448`-mhard-float' 19449 Generate output containing floating-point instructions. This is 19450 the default. 19451 19452`-mno-fpu' 19453`-msoft-float' 19454 Generate output containing library calls for floating point. 19455 *Warning:* the requisite libraries are not available for all SPARC 19456 targets. Normally the facilities of the machine's usual C 19457 compiler are used, but this cannot be done directly in 19458 cross-compilation. You must make your own arrangements to provide 19459 suitable library functions for cross-compilation. The embedded 19460 targets `sparc-*-aout' and `sparclite-*-*' do provide software 19461 floating-point support. 19462 19463 `-msoft-float' changes the calling convention in the output file; 19464 therefore, it is only useful if you compile _all_ of a program with 19465 this option. In particular, you need to compile `libgcc.a', the 19466 library that comes with GCC, with `-msoft-float' in order for this 19467 to work. 19468 19469`-mhard-quad-float' 19470 Generate output containing quad-word (long double) floating-point 19471 instructions. 19472 19473`-msoft-quad-float' 19474 Generate output containing library calls for quad-word (long 19475 double) floating-point instructions. The functions called are 19476 those specified in the SPARC ABI. This is the default. 19477 19478 As of this writing, there are no SPARC implementations that have 19479 hardware support for the quad-word floating-point instructions. 19480 They all invoke a trap handler for one of these instructions, and 19481 then the trap handler emulates the effect of the instruction. 19482 Because of the trap handler overhead, this is much slower than 19483 calling the ABI library routines. Thus the `-msoft-quad-float' 19484 option is the default. 19485 19486`-mno-unaligned-doubles' 19487`-munaligned-doubles' 19488 Assume that doubles have 8-byte alignment. This is the default. 19489 19490 With `-munaligned-doubles', GCC assumes that doubles have 8-byte 19491 alignment only if they are contained in another type, or if they 19492 have an absolute address. Otherwise, it assumes they have 4-byte 19493 alignment. Specifying this option avoids some rare compatibility 19494 problems with code generated by other compilers. It is not the 19495 default because it results in a performance loss, especially for 19496 floating-point code. 19497 19498`-muser-mode' 19499`-mno-user-mode' 19500 Do not generate code that can only run in supervisor mode. This 19501 is relevant only for the `casa' instruction emitted for the LEON3 19502 processor. This is the default. 19503 19504`-mno-faster-structs' 19505`-mfaster-structs' 19506 With `-mfaster-structs', the compiler assumes that structures 19507 should have 8-byte alignment. This enables the use of pairs of 19508 `ldd' and `std' instructions for copies in structure assignment, 19509 in place of twice as many `ld' and `st' pairs. However, the use 19510 of this changed alignment directly violates the SPARC ABI. Thus, 19511 it's intended only for use on targets where the developer 19512 acknowledges that their resulting code is not directly in line with 19513 the rules of the ABI. 19514 19515`-mcpu=CPU_TYPE' 19516 Set the instruction set, register set, and instruction scheduling 19517 parameters for machine type CPU_TYPE. Supported values for 19518 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc', 19519 `leon', `leon3', `leon3v7', `sparclite', `f930', `f934', 19520 `sparclite86x', `sparclet', `tsc701', `v9', `ultrasparc', 19521 `ultrasparc3', `niagara', `niagara2', `niagara3' and `niagara4'. 19522 19523 Native Solaris and GNU/Linux toolchains also support the value 19524 `native', which selects the best architecture option for the host 19525 processor. `-mcpu=native' has no effect if GCC does not recognize 19526 the processor. 19527 19528 Default instruction scheduling parameters are used for values that 19529 select an architecture and not an implementation. These are `v7', 19530 `v8', `sparclite', `sparclet', `v9'. 19531 19532 Here is a list of each supported architecture and their supported 19533 implementations. 19534 19535 v7 19536 cypress, leon3v7 19537 19538 v8 19539 supersparc, hypersparc, leon, leon3 19540 19541 sparclite 19542 f930, f934, sparclite86x 19543 19544 sparclet 19545 tsc701 19546 19547 v9 19548 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4 19549 19550 By default (unless configured otherwise), GCC generates code for 19551 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 19552 the compiler additionally optimizes it for the Cypress CY7C602 19553 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 19554 also appropriate for the older SPARCStation 1, 2, IPX etc. 19555 19556 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 19557 architecture. The only difference from V7 code is that the 19558 compiler emits the integer multiply and integer divide 19559 instructions which exist in SPARC-V8 but not in SPARC-V7. With 19560 `-mcpu=supersparc', the compiler additionally optimizes it for the 19561 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 19562 series. 19563 19564 With `-mcpu=sparclite', GCC generates code for the SPARClite 19565 variant of the SPARC architecture. This adds the integer 19566 multiply, integer divide step and scan (`ffs') instructions which 19567 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 19568 compiler additionally optimizes it for the Fujitsu MB86930 chip, 19569 which is the original SPARClite, with no FPU. With `-mcpu=f934', 19570 the compiler additionally optimizes it for the Fujitsu MB86934 19571 chip, which is the more recent SPARClite with FPU. 19572 19573 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 19574 of the SPARC architecture. This adds the integer multiply, 19575 multiply/accumulate, integer divide step and scan (`ffs') 19576 instructions which exist in SPARClet but not in SPARC-V7. With 19577 `-mcpu=tsc701', the compiler additionally optimizes it for the 19578 TEMIC SPARClet chip. 19579 19580 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 19581 architecture. This adds 64-bit integer and floating-point move 19582 instructions, 3 additional floating-point condition code registers 19583 and conditional move instructions. With `-mcpu=ultrasparc', the 19584 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 19585 chips. With `-mcpu=ultrasparc3', the compiler additionally 19586 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 19587 chips. With `-mcpu=niagara', the compiler additionally optimizes 19588 it for Sun UltraSPARC T1 chips. With `-mcpu=niagara2', the 19589 compiler additionally optimizes it for Sun UltraSPARC T2 chips. 19590 With `-mcpu=niagara3', the compiler additionally optimizes it for 19591 Sun UltraSPARC T3 chips. With `-mcpu=niagara4', the compiler 19592 additionally optimizes it for Sun UltraSPARC T4 chips. 19593 19594`-mtune=CPU_TYPE' 19595 Set the instruction scheduling parameters for machine type 19596 CPU_TYPE, but do not set the instruction set or register set that 19597 the option `-mcpu=CPU_TYPE' does. 19598 19599 The same values for `-mcpu=CPU_TYPE' can be used for 19600 `-mtune=CPU_TYPE', but the only useful values are those that 19601 select a particular CPU implementation. Those are `cypress', 19602 `supersparc', `hypersparc', `leon', `leon3', `leon3v7', `f930', 19603 `f934', `sparclite86x', `tsc701', `ultrasparc', `ultrasparc3', 19604 `niagara', `niagara2', `niagara3' and `niagara4'. With native 19605 Solaris and GNU/Linux toolchains, `native' can also be used. 19606 19607`-mv8plus' 19608`-mno-v8plus' 19609 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 19610 difference from the V8 ABI is that the global and out registers are 19611 considered 64 bits wide. This is enabled by default on Solaris in 19612 32-bit mode for all SPARC-V9 processors. 19613 19614`-mvis' 19615`-mno-vis' 19616 With `-mvis', GCC generates code that takes advantage of the 19617 UltraSPARC Visual Instruction Set extensions. The default is 19618 `-mno-vis'. 19619 19620`-mvis2' 19621`-mno-vis2' 19622 With `-mvis2', GCC generates code that takes advantage of version 19623 2.0 of the UltraSPARC Visual Instruction Set extensions. The 19624 default is `-mvis2' when targeting a cpu that supports such 19625 instructions, such as UltraSPARC-III and later. Setting `-mvis2' 19626 also sets `-mvis'. 19627 19628`-mvis3' 19629`-mno-vis3' 19630 With `-mvis3', GCC generates code that takes advantage of version 19631 3.0 of the UltraSPARC Visual Instruction Set extensions. The 19632 default is `-mvis3' when targeting a cpu that supports such 19633 instructions, such as niagara-3 and later. Setting `-mvis3' also 19634 sets `-mvis2' and `-mvis'. 19635 19636`-mcbcond' 19637`-mno-cbcond' 19638 With `-mcbcond', GCC generates code that takes advantage of 19639 compare-and-branch instructions, as defined in the Sparc 19640 Architecture 2011. The default is `-mcbcond' when targeting a cpu 19641 that supports such instructions, such as niagara-4 and later. 19642 19643`-mpopc' 19644`-mno-popc' 19645 With `-mpopc', GCC generates code that takes advantage of the 19646 UltraSPARC population count instruction. The default is `-mpopc' 19647 when targeting a cpu that supports such instructions, such as 19648 Niagara-2 and later. 19649 19650`-mfmaf' 19651`-mno-fmaf' 19652 With `-mfmaf', GCC generates code that takes advantage of the 19653 UltraSPARC Fused Multiply-Add Floating-point extensions. The 19654 default is `-mfmaf' when targeting a cpu that supports such 19655 instructions, such as Niagara-3 and later. 19656 19657`-mfix-at697f' 19658 Enable the documented workaround for the single erratum of the 19659 Atmel AT697F processor (which corresponds to erratum #13 of the 19660 AT697E processor). 19661 19662`-mfix-ut699' 19663 Enable the documented workarounds for the floating-point errata 19664 and the data cache nullify errata of the UT699 processor. 19665 19666 These `-m' options are supported in addition to the above on SPARC-V9 19667processors in 64-bit environments: 19668 19669`-m32' 19670`-m64' 19671 Generate code for a 32-bit or 64-bit environment. The 32-bit 19672 environment sets int, long and pointer to 32 bits. The 64-bit 19673 environment sets int to 32 bits and long and pointer to 64 bits. 19674 19675`-mcmodel=WHICH' 19676 Set the code model to one of 19677 19678 `medlow' 19679 The Medium/Low code model: 64-bit addresses, programs must be 19680 linked in the low 32 bits of memory. Programs can be 19681 statically or dynamically linked. 19682 19683 `medmid' 19684 The Medium/Middle code model: 64-bit addresses, programs must 19685 be linked in the low 44 bits of memory, the text and data 19686 segments must be less than 2GB in size and the data segment 19687 must be located within 2GB of the text segment. 19688 19689 `medany' 19690 The Medium/Anywhere code model: 64-bit addresses, programs 19691 may be linked anywhere in memory, the text and data segments 19692 must be less than 2GB in size and the data segment must be 19693 located within 2GB of the text segment. 19694 19695 `embmedany' 19696 The Medium/Anywhere code model for embedded systems: 64-bit 19697 addresses, the text and data segments must be less than 2GB in 19698 size, both starting anywhere in memory (determined at link 19699 time). The global register %g4 points to the base of the 19700 data segment. Programs are statically linked and PIC is not 19701 supported. 19702 19703`-mmemory-model=MEM-MODEL' 19704 Set the memory model in force on the processor to one of 19705 19706 `default' 19707 The default memory model for the processor and operating 19708 system. 19709 19710 `rmo' 19711 Relaxed Memory Order 19712 19713 `pso' 19714 Partial Store Order 19715 19716 `tso' 19717 Total Store Order 19718 19719 `sc' 19720 Sequential Consistency 19721 19722 These memory models are formally defined in Appendix D of the 19723 Sparc V9 architecture manual, as set in the processor's 19724 `PSTATE.MM' field. 19725 19726`-mstack-bias' 19727`-mno-stack-bias' 19728 With `-mstack-bias', GCC assumes that the stack pointer, and frame 19729 pointer if present, are offset by -2047 which must be added back 19730 when making stack frame references. This is the default in 64-bit 19731 mode. Otherwise, assume no such offset is present. 19732 19733 19734File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options 19735 197363.17.44 SPU Options 19737------------------- 19738 19739These `-m' options are supported on the SPU: 19740 19741`-mwarn-reloc' 19742`-merror-reloc' 19743 The loader for SPU does not handle dynamic relocations. By 19744 default, GCC gives an error when it generates code that requires a 19745 dynamic relocation. `-mno-error-reloc' disables the error, 19746 `-mwarn-reloc' generates a warning instead. 19747 19748`-msafe-dma' 19749`-munsafe-dma' 19750 Instructions that initiate or test completion of DMA must not be 19751 reordered with respect to loads and stores of the memory that is 19752 being accessed. With `-munsafe-dma' you must use the `volatile' 19753 keyword to protect memory accesses, but that can lead to 19754 inefficient code in places where the memory is known to not 19755 change. Rather than mark the memory as volatile, you can use 19756 `-msafe-dma' to tell the compiler to treat the DMA instructions as 19757 potentially affecting all memory. 19758 19759`-mbranch-hints' 19760 By default, GCC generates a branch hint instruction to avoid 19761 pipeline stalls for always-taken or probably-taken branches. A 19762 hint is not generated closer than 8 instructions away from its 19763 branch. There is little reason to disable them, except for 19764 debugging purposes, or to make an object a little bit smaller. 19765 19766`-msmall-mem' 19767`-mlarge-mem' 19768 By default, GCC generates code assuming that addresses are never 19769 larger than 18 bits. With `-mlarge-mem' code is generated that 19770 assumes a full 32-bit address. 19771 19772`-mstdmain' 19773 By default, GCC links against startup code that assumes the 19774 SPU-style main function interface (which has an unconventional 19775 parameter list). With `-mstdmain', GCC links your program against 19776 startup code that assumes a C99-style interface to `main', 19777 including a local copy of `argv' strings. 19778 19779`-mfixed-range=REGISTER-RANGE' 19780 Generate code treating the given register range as fixed registers. 19781 A fixed register is one that the register allocator cannot use. 19782 This is useful when compiling kernel code. A register range is 19783 specified as two registers separated by a dash. Multiple register 19784 ranges can be specified separated by a comma. 19785 19786`-mea32' 19787`-mea64' 19788 Compile code assuming that pointers to the PPU address space 19789 accessed via the `__ea' named address space qualifier are either 19790 32 or 64 bits wide. The default is 32 bits. As this is an 19791 ABI-changing option, all object code in an executable must be 19792 compiled with the same setting. 19793 19794`-maddress-space-conversion' 19795`-mno-address-space-conversion' 19796 Allow/disallow treating the `__ea' address space as superset of 19797 the generic address space. This enables explicit type casts 19798 between `__ea' and generic pointer as well as implicit conversions 19799 of generic pointers to `__ea' pointers. The default is to allow 19800 address space pointer conversions. 19801 19802`-mcache-size=CACHE-SIZE' 19803 This option controls the version of libgcc that the compiler links 19804 to an executable and selects a software-managed cache for 19805 accessing variables in the `__ea' address space with a particular 19806 cache size. Possible options for CACHE-SIZE are `8', `16', `32', 19807 `64' and `128'. The default cache size is 64KB. 19808 19809`-matomic-updates' 19810`-mno-atomic-updates' 19811 This option controls the version of libgcc that the compiler links 19812 to an executable and selects whether atomic updates to the 19813 software-managed cache of PPU-side variables are used. If you use 19814 atomic updates, changes to a PPU variable from SPU code using the 19815 `__ea' named address space qualifier do not interfere with changes 19816 to other PPU variables residing in the same cache line from PPU 19817 code. If you do not use atomic updates, such interference may 19818 occur; however, writing back cache lines is more efficient. The 19819 default behavior is to use atomic updates. 19820 19821`-mdual-nops' 19822`-mdual-nops=N' 19823 By default, GCC inserts nops to increase dual issue when it expects 19824 it to increase performance. N can be a value from 0 to 10. A 19825 smaller N inserts fewer nops. 10 is the default, 0 is the same as 19826 `-mno-dual-nops'. Disabled with `-Os'. 19827 19828`-mhint-max-nops=N' 19829 Maximum number of nops to insert for a branch hint. A branch hint 19830 must be at least 8 instructions away from the branch it is 19831 affecting. GCC inserts up to N nops to enforce this, otherwise it 19832 does not generate the branch hint. 19833 19834`-mhint-max-distance=N' 19835 The encoding of the branch hint instruction limits the hint to be 19836 within 256 instructions of the branch it is affecting. By 19837 default, GCC makes sure it is within 125. 19838 19839`-msafe-hints' 19840 Work around a hardware bug that causes the SPU to stall 19841 indefinitely. By default, GCC inserts the `hbrp' instruction to 19842 make sure this stall won't happen. 19843 19844 19845 19846File: gcc.info, Node: System V Options, Next: TILE-Gx Options, Prev: SPU Options, Up: Submodel Options 19847 198483.17.45 Options for System V 19849---------------------------- 19850 19851These additional options are available on System V Release 4 for 19852compatibility with other compilers on those systems: 19853 19854`-G' 19855 Create a shared object. It is recommended that `-symbolic' or 19856 `-shared' be used instead. 19857 19858`-Qy' 19859 Identify the versions of each tool used by the compiler, in a 19860 `.ident' assembler directive in the output. 19861 19862`-Qn' 19863 Refrain from adding `.ident' directives to the output file (this is 19864 the default). 19865 19866`-YP,DIRS' 19867 Search the directories DIRS, and no others, for libraries 19868 specified with `-l'. 19869 19870`-Ym,DIR' 19871 Look in the directory DIR to find the M4 preprocessor. The 19872 assembler uses this option. 19873 19874 19875File: gcc.info, Node: TILE-Gx Options, Next: TILEPro Options, Prev: System V Options, Up: Submodel Options 19876 198773.17.46 TILE-Gx Options 19878----------------------- 19879 19880These `-m' options are supported on the TILE-Gx: 19881 19882`-mcmodel=small' 19883 Generate code for the small model. The distance for direct calls 19884 is limited to 500M in either direction. PC-relative addresses are 19885 32 bits. Absolute addresses support the full address range. 19886 19887`-mcmodel=large' 19888 Generate code for the large model. There is no limitation on call 19889 distance, pc-relative addresses, or absolute addresses. 19890 19891`-mcpu=NAME' 19892 Selects the type of CPU to be targeted. Currently the only 19893 supported type is `tilegx'. 19894 19895`-m32' 19896`-m64' 19897 Generate code for a 32-bit or 64-bit environment. The 32-bit 19898 environment sets int, long, and pointer to 32 bits. The 64-bit 19899 environment sets int to 32 bits and long and pointer to 64 bits. 19900 19901`-mbig-endian' 19902`-mlittle-endian' 19903 Generate code in big/little endian mode, respectively. 19904 19905 19906File: gcc.info, Node: TILEPro Options, Next: V850 Options, Prev: TILE-Gx Options, Up: Submodel Options 19907 199083.17.47 TILEPro Options 19909----------------------- 19910 19911These `-m' options are supported on the TILEPro: 19912 19913`-mcpu=NAME' 19914 Selects the type of CPU to be targeted. Currently the only 19915 supported type is `tilepro'. 19916 19917`-m32' 19918 Generate code for a 32-bit environment, which sets int, long, and 19919 pointer to 32 bits. This is the only supported behavior so the 19920 flag is essentially ignored. 19921 19922 19923File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: TILEPro Options, Up: Submodel Options 19924 199253.17.48 V850 Options 19926-------------------- 19927 19928These `-m' options are defined for V850 implementations: 19929 19930`-mlong-calls' 19931`-mno-long-calls' 19932 Treat all calls as being far away (near). If calls are assumed to 19933 be far away, the compiler always loads the function's address into 19934 a register, and calls indirect through the pointer. 19935 19936`-mno-ep' 19937`-mep' 19938 Do not optimize (do optimize) basic blocks that use the same index 19939 pointer 4 or more times to copy pointer into the `ep' register, and 19940 use the shorter `sld' and `sst' instructions. The `-mep' option 19941 is on by default if you optimize. 19942 19943`-mno-prolog-function' 19944`-mprolog-function' 19945 Do not use (do use) external functions to save and restore 19946 registers at the prologue and epilogue of a function. The 19947 external functions are slower, but use less code space if more 19948 than one function saves the same number of registers. The 19949 `-mprolog-function' option is on by default if you optimize. 19950 19951`-mspace' 19952 Try to make the code as small as possible. At present, this just 19953 turns on the `-mep' and `-mprolog-function' options. 19954 19955`-mtda=N' 19956 Put static or global variables whose size is N bytes or less into 19957 the tiny data area that register `ep' points to. The tiny data 19958 area can hold up to 256 bytes in total (128 bytes for byte 19959 references). 19960 19961`-msda=N' 19962 Put static or global variables whose size is N bytes or less into 19963 the small data area that register `gp' points to. The small data 19964 area can hold up to 64 kilobytes. 19965 19966`-mzda=N' 19967 Put static or global variables whose size is N bytes or less into 19968 the first 32 kilobytes of memory. 19969 19970`-mv850' 19971 Specify that the target processor is the V850. 19972 19973`-mv850e3v5' 19974 Specify that the target processor is the V850E3V5. The 19975 preprocessor constant `__v850e3v5__' is defined if this option is 19976 used. 19977 19978`-mv850e2v4' 19979 Specify that the target processor is the V850E3V5. This is an 19980 alias for the `-mv850e3v5' option. 19981 19982`-mv850e2v3' 19983 Specify that the target processor is the V850E2V3. The 19984 preprocessor constant `__v850e2v3__' is defined if this option is 19985 used. 19986 19987`-mv850e2' 19988 Specify that the target processor is the V850E2. The preprocessor 19989 constant `__v850e2__' is defined if this option is used. 19990 19991`-mv850e1' 19992 Specify that the target processor is the V850E1. The preprocessor 19993 constants `__v850e1__' and `__v850e__' are defined if this option 19994 is used. 19995 19996`-mv850es' 19997 Specify that the target processor is the V850ES. This is an alias 19998 for the `-mv850e1' option. 19999 20000`-mv850e' 20001 Specify that the target processor is the V850E. The preprocessor 20002 constant `__v850e__' is defined if this option is used. 20003 20004 If neither `-mv850' nor `-mv850e' nor `-mv850e1' nor `-mv850e2' 20005 nor `-mv850e2v3' nor `-mv850e3v5' are defined then a default 20006 target processor is chosen and the relevant `__v850*__' 20007 preprocessor constant is defined. 20008 20009 The preprocessor constants `__v850' and `__v851__' are always 20010 defined, regardless of which processor variant is the target. 20011 20012`-mdisable-callt' 20013`-mno-disable-callt' 20014 This option suppresses generation of the `CALLT' instruction for 20015 the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the 20016 v850 architecture. 20017 20018 This option is enabled by default when the RH850 ABI is in use 20019 (see `-mrh850-abi'), and disabled by default when the GCC ABI is 20020 in use. If `CALLT' instructions are being generated then the C 20021 preprocessor symbol `__V850_CALLT__' is defined. 20022 20023`-mrelax' 20024`-mno-relax' 20025 Pass on (or do not pass on) the `-mrelax' command-line option to 20026 the assembler. 20027 20028`-mlong-jumps' 20029`-mno-long-jumps' 20030 Disable (or re-enable) the generation of PC-relative jump 20031 instructions. 20032 20033`-msoft-float' 20034`-mhard-float' 20035 Disable (or re-enable) the generation of hardware floating point 20036 instructions. This option is only significant when the target 20037 architecture is `V850E2V3' or higher. If hardware floating point 20038 instructions are being generated then the C preprocessor symbol 20039 `__FPU_OK__' is defined, otherwise the symbol `__NO_FPU__' is 20040 defined. 20041 20042`-mloop' 20043 Enables the use of the e3v5 LOOP instruction. The use of this 20044 instruction is not enabled by default when the e3v5 architecture is 20045 selected because its use is still experimental. 20046 20047`-mrh850-abi' 20048`-mghs' 20049 Enables support for the RH850 version of the V850 ABI. This is the 20050 default. With this version of the ABI the following rules apply: 20051 20052 * Integer sized structures and unions are returned via a memory 20053 pointer rather than a register. 20054 20055 * Large structures and unions (more than 8 bytes in size) are 20056 passed by value. 20057 20058 * Functions are aligned to 16-bit boundaries. 20059 20060 * The `-m8byte-align' command-line option is supported. 20061 20062 * The `-mdisable-callt' command-line option is enabled by 20063 default. The `-mno-disable-callt' command-line option is not 20064 supported. 20065 20066 When this version of the ABI is enabled the C preprocessor symbol 20067 `__V850_RH850_ABI__' is defined. 20068 20069`-mgcc-abi' 20070 Enables support for the old GCC version of the V850 ABI. With this 20071 version of the ABI the following rules apply: 20072 20073 * Integer sized structures and unions are returned in register 20074 `r10'. 20075 20076 * Large structures and unions (more than 8 bytes in size) are 20077 passed by reference. 20078 20079 * Functions are aligned to 32-bit boundaries, unless optimizing 20080 for size. 20081 20082 * The `-m8byte-align' command-line option is not supported. 20083 20084 * The `-mdisable-callt' command-line option is supported but not 20085 enabled by default. 20086 20087 When this version of the ABI is enabled the C preprocessor symbol 20088 `__V850_GCC_ABI__' is defined. 20089 20090`-m8byte-align' 20091`-mno-8byte-align' 20092 Enables support for `double' and `long long' types to be aligned 20093 on 8-byte boundaries. The default is to restrict the alignment of 20094 all objects to at most 4-bytes. When `-m8byte-align' is in effect 20095 the C preprocessor symbol `__V850_8BYTE_ALIGN__' is defined. 20096 20097`-mbig-switch' 20098 Generate code suitable for big switch tables. Use this option 20099 only if the assembler/linker complain about out of range branches 20100 within a switch table. 20101 20102`-mapp-regs' 20103 This option causes r2 and r5 to be used in the code generated by 20104 the compiler. This setting is the default. 20105 20106`-mno-app-regs' 20107 This option causes r2 and r5 to be treated as fixed registers. 20108 20109 20110 20111File: gcc.info, Node: VAX Options, Next: Visium Options, Prev: V850 Options, Up: Submodel Options 20112 201133.17.49 VAX Options 20114------------------- 20115 20116These `-m' options are defined for the VAX: 20117 20118`-munix' 20119 Do not output certain jump instructions (`aobleq' and so on) that 20120 the Unix assembler for the VAX cannot handle across long ranges. 20121 20122`-mgnu' 20123 Do output those jump instructions, on the assumption that the GNU 20124 assembler is being used. 20125 20126`-mg' 20127 Output code for G-format floating-point numbers instead of 20128 D-format. 20129 20130 20131File: gcc.info, Node: Visium Options, Next: VMS Options, Prev: VAX Options, Up: Submodel Options 20132 201333.17.50 Visium Options 20134---------------------- 20135 20136`-mdebug' 20137 A program which performs file I/O and is destined to run on an MCM 20138 target should be linked with this option. It causes the libraries 20139 libc.a and libdebug.a to be linked. The program should be run on 20140 the target under the control of the GDB remote debugging stub. 20141 20142`-msim' 20143 A program which performs file I/O and is destined to run on the 20144 simulator should be linked with option. This causes libraries 20145 libc.a and libsim.a to be linked. 20146 20147`-mfpu' 20148`-mhard-float' 20149 Generate code containing floating-point instructions. This is the 20150 default. 20151 20152`-mno-fpu' 20153`-msoft-float' 20154 Generate code containing library calls for floating-point. 20155 20156 `-msoft-float' changes the calling convention in the output file; 20157 therefore, it is only useful if you compile _all_ of a program with 20158 this option. In particular, you need to compile `libgcc.a', the 20159 library that comes with GCC, with `-msoft-float' in order for this 20160 to work. 20161 20162`-mcpu=CPU_TYPE' 20163 Set the instruction set, register set, and instruction scheduling 20164 parameters for machine type CPU_TYPE. Supported values for 20165 CPU_TYPE are `mcm', `gr5' and `gr6'. 20166 20167 `mcm' is a synonym of `gr5' present for backward compatibility. 20168 20169 By default (unless configured otherwise), GCC generates code for 20170 the GR5 variant of the Visium architecture. 20171 20172 With `-mcpu=gr6', GCC generates code for the GR6 variant of the 20173 Visium architecture. The only difference from GR5 code is that 20174 the compiler will generate block move instructions. 20175 20176`-mtune=CPU_TYPE' 20177 Set the instruction scheduling parameters for machine type 20178 CPU_TYPE, but do not set the instruction set or register set that 20179 the option `-mcpu=CPU_TYPE' would. 20180 20181`-msv-mode' 20182 Generate code for the supervisor mode, where there are no 20183 restrictions on the access to general registers. This is the 20184 default. 20185 20186`-muser-mode' 20187 Generate code for the user mode, where the access to some general 20188 registers is forbidden: on the GR5, registers r24 to r31 cannot be 20189 accessed in this mode; on the GR6, only registers r29 to r31 are 20190 affected. 20191 20192 20193File: gcc.info, Node: VMS Options, Next: VxWorks Options, Prev: Visium Options, Up: Submodel Options 20194 201953.17.51 VMS Options 20196------------------- 20197 20198These `-m' options are defined for the VMS implementations: 20199 20200`-mvms-return-codes' 20201 Return VMS condition codes from `main'. The default is to return 20202 POSIX-style condition (e.g. error) codes. 20203 20204`-mdebug-main=PREFIX' 20205 Flag the first routine whose name starts with PREFIX as the main 20206 routine for the debugger. 20207 20208`-mmalloc64' 20209 Default to 64-bit memory allocation routines. 20210 20211`-mpointer-size=SIZE' 20212 Set the default size of pointers. Possible options for SIZE are 20213 `32' or `short' for 32 bit pointers, `64' or `long' for 64 bit 20214 pointers, and `no' for supporting only 32 bit pointers. The later 20215 option disables `pragma pointer_size'. 20216 20217 20218File: gcc.info, Node: VxWorks Options, Next: x86 Options, Prev: VMS Options, Up: Submodel Options 20219 202203.17.52 VxWorks Options 20221----------------------- 20222 20223The options in this section are defined for all VxWorks targets. 20224Options specific to the target hardware are listed with the other 20225options for that target. 20226 20227`-mrtp' 20228 GCC can generate code for both VxWorks kernels and real time 20229 processes (RTPs). This option switches from the former to the 20230 latter. It also defines the preprocessor macro `__RTP__'. 20231 20232`-non-static' 20233 Link an RTP executable against shared libraries rather than static 20234 libraries. The options `-static' and `-shared' can also be used 20235 for RTPs (*note Link Options::); `-static' is the default. 20236 20237`-Bstatic' 20238`-Bdynamic' 20239 These options are passed down to the linker. They are defined for 20240 compatibility with Diab. 20241 20242`-Xbind-lazy' 20243 Enable lazy binding of function calls. This option is equivalent 20244 to `-Wl,-z,now' and is defined for compatibility with Diab. 20245 20246`-Xbind-now' 20247 Disable lazy binding of function calls. This option is the 20248 default and is defined for compatibility with Diab. 20249 20250 20251File: gcc.info, Node: x86 Options, Next: x86 Windows Options, Prev: VxWorks Options, Up: Submodel Options 20252 202533.17.53 x86 Options 20254------------------- 20255 20256These `-m' options are defined for the x86 family of computers. 20257 20258`-march=CPU-TYPE' 20259 Generate instructions for the machine type CPU-TYPE. In contrast 20260 to `-mtune=CPU-TYPE', which merely tunes the generated code for 20261 the specified CPU-TYPE, `-march=CPU-TYPE' allows GCC to generate 20262 code that may not run at all on processors other than the one 20263 indicated. Specifying `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 20264 20265 The choices for CPU-TYPE are: 20266 20267 `native' 20268 This selects the CPU to generate code for at compilation time 20269 by determining the processor type of the compiling machine. 20270 Using `-march=native' enables all instruction subsets 20271 supported by the local machine (hence the result might not 20272 run on different machines). Using `-mtune=native' produces 20273 code optimized for the local machine under the constraints of 20274 the selected instruction set. 20275 20276 `i386' 20277 Original Intel i386 CPU. 20278 20279 `i486' 20280 Intel i486 CPU. (No scheduling is implemented for this chip.) 20281 20282 `i586' 20283 `pentium' 20284 Intel Pentium CPU with no MMX support. 20285 20286 `pentium-mmx' 20287 Intel Pentium MMX CPU, based on Pentium core with MMX 20288 instruction set support. 20289 20290 `pentiumpro' 20291 Intel Pentium Pro CPU. 20292 20293 `i686' 20294 When used with `-march', the Pentium Pro instruction set is 20295 used, so the code runs on all i686 family chips. When used 20296 with `-mtune', it has the same meaning as `generic'. 20297 20298 `pentium2' 20299 Intel Pentium II CPU, based on Pentium Pro core with MMX 20300 instruction set support. 20301 20302 `pentium3' 20303 `pentium3m' 20304 Intel Pentium III CPU, based on Pentium Pro core with MMX and 20305 SSE instruction set support. 20306 20307 `pentium-m' 20308 Intel Pentium M; low-power version of Intel Pentium III CPU 20309 with MMX, SSE and SSE2 instruction set support. Used by 20310 Centrino notebooks. 20311 20312 `pentium4' 20313 `pentium4m' 20314 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set 20315 support. 20316 20317 `prescott' 20318 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 20319 and SSE3 instruction set support. 20320 20321 `nocona' 20322 Improved version of Intel Pentium 4 CPU with 64-bit 20323 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 20324 20325 `core2' 20326 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 20327 and SSSE3 instruction set support. 20328 20329 `nehalem' 20330 Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, 20331 SSE3, SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set 20332 support. 20333 20334 `westmere' 20335 Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2, 20336 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL 20337 instruction set support. 20338 20339 `sandybridge' 20340 Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, 20341 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and 20342 PCLMUL instruction set support. 20343 20344 `ivybridge' 20345 Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, 20346 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, 20347 FSGSBASE, RDRND and F16C instruction set support. 20348 20349 `haswell' 20350 Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, 20351 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, 20352 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction 20353 set support. 20354 20355 `broadwell' 20356 Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE, 20357 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, 20358 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX 20359 and PREFETCHW instruction set support. 20360 20361 `bonnell' 20362 Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, 20363 SSE2, SSE3 and SSSE3 instruction set support. 20364 20365 `silvermont' 20366 Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, 20367 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and 20368 RDRND instruction set support. 20369 20370 `knl' 20371 Intel Knight's Landing CPU with 64-bit extensions, MOVBE, 20372 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, 20373 AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, 20374 RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER and 20375 AVX512CD instruction set support. 20376 20377 `k6' 20378 AMD K6 CPU with MMX instruction set support. 20379 20380 `k6-2' 20381 `k6-3' 20382 Improved versions of AMD K6 CPU with MMX and 3DNow! 20383 instruction set support. 20384 20385 `athlon' 20386 `athlon-tbird' 20387 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE 20388 prefetch instructions support. 20389 20390 `athlon-4' 20391 `athlon-xp' 20392 `athlon-mp' 20393 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and 20394 full SSE instruction set support. 20395 20396 `k8' 20397 `opteron' 20398 `athlon64' 20399 `athlon-fx' 20400 Processors based on the AMD K8 core with x86-64 instruction 20401 set support, including the AMD Opteron, Athlon 64, and Athlon 20402 64 FX processors. (This supersets MMX, SSE, SSE2, 3DNow!, 20403 enhanced 3DNow! and 64-bit instruction set extensions.) 20404 20405 `k8-sse3' 20406 `opteron-sse3' 20407 `athlon64-sse3' 20408 Improved versions of AMD K8 cores with SSE3 instruction set 20409 support. 20410 20411 `amdfam10' 20412 `barcelona' 20413 CPUs based on AMD Family 10h cores with x86-64 instruction 20414 set support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 20415 3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set 20416 extensions.) 20417 20418 `bdver1' 20419 CPUs based on AMD Family 15h cores with x86-64 instruction 20420 set support. (This supersets FMA4, AVX, XOP, LWP, AES, 20421 PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, 20422 SSE4.2, ABM and 64-bit instruction set extensions.) 20423 20424 `bdver2' 20425 AMD Family 15h core based CPUs with x86-64 instruction set 20426 support. (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, 20427 XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, 20428 SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set 20429 extensions.) 20430 20431 `bdver3' 20432 AMD Family 15h core based CPUs with x86-64 instruction set 20433 support. (This supersets BMI, TBM, F16C, FMA, FMA4, 20434 FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, 20435 SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit 20436 instruction set extensions. 20437 20438 `bdver4' 20439 AMD Family 15h core based CPUs with x86-64 instruction set 20440 support. (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4, 20441 FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, 20442 MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 20443 64-bit instruction set extensions. 20444 20445 `btver1' 20446 CPUs based on AMD Family 14h cores with x86-64 instruction 20447 set support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, 20448 SSE4A, CX16, ABM and 64-bit instruction set extensions.) 20449 20450 `btver2' 20451 CPUs based on AMD Family 16h cores with x86-64 instruction 20452 set support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, 20453 AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, 20454 SSE, MMX and 64-bit instruction set extensions. 20455 20456 `winchip-c6' 20457 IDT WinChip C6 CPU, dealt in same way as i486 with additional 20458 MMX instruction set support. 20459 20460 `winchip2' 20461 IDT WinChip 2 CPU, dealt in same way as i486 with additional 20462 MMX and 3DNow! instruction set support. 20463 20464 `c3' 20465 VIA C3 CPU with MMX and 3DNow! instruction set support. (No 20466 scheduling is implemented for this chip.) 20467 20468 `c3-2' 20469 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set 20470 support. (No scheduling is implemented for this chip.) 20471 20472 `geode' 20473 AMD Geode embedded processor with MMX and 3DNow! instruction 20474 set support. 20475 20476`-mtune=CPU-TYPE' 20477 Tune to CPU-TYPE everything applicable about the generated code, 20478 except for the ABI and the set of available instructions. While 20479 picking a specific CPU-TYPE schedules things appropriately for 20480 that particular chip, the compiler does not generate any code that 20481 cannot run on the default machine type unless you use a 20482 `-march=CPU-TYPE' option. For example, if GCC is configured for 20483 i686-pc-linux-gnu then `-mtune=pentium4' generates code that is 20484 tuned for Pentium 4 but still runs on i686 machines. 20485 20486 The choices for CPU-TYPE are the same as for `-march'. In 20487 addition, `-mtune' supports 2 extra choices for CPU-TYPE: 20488 20489 `generic' 20490 Produce code optimized for the most common IA32/AMD64/EM64T 20491 processors. If you know the CPU on which your code will run, 20492 then you should use the corresponding `-mtune' or `-march' 20493 option instead of `-mtune=generic'. But, if you do not know 20494 exactly what CPU users of your application will have, then 20495 you should use this option. 20496 20497 As new processors are deployed in the marketplace, the 20498 behavior of this option will change. Therefore, if you 20499 upgrade to a newer version of GCC, code generation controlled 20500 by this option will change to reflect the processors that are 20501 most common at the time that version of GCC is released. 20502 20503 There is no `-march=generic' option because `-march' 20504 indicates the instruction set the compiler can use, and there 20505 is no generic instruction set applicable to all processors. 20506 In contrast, `-mtune' indicates the processor (or, in this 20507 case, collection of processors) for which the code is 20508 optimized. 20509 20510 `intel' 20511 Produce code optimized for the most current Intel processors, 20512 which are Haswell and Silvermont for this version of GCC. If 20513 you know the CPU on which your code will run, then you should 20514 use the corresponding `-mtune' or `-march' option instead of 20515 `-mtune=intel'. But, if you want your application performs 20516 better on both Haswell and Silvermont, then you should use 20517 this option. 20518 20519 As new Intel processors are deployed in the marketplace, the 20520 behavior of this option will change. Therefore, if you 20521 upgrade to a newer version of GCC, code generation controlled 20522 by this option will change to reflect the most current Intel 20523 processors at the time that version of GCC is released. 20524 20525 There is no `-march=intel' option because `-march' indicates 20526 the instruction set the compiler can use, and there is no 20527 common instruction set applicable to all processors. In 20528 contrast, `-mtune' indicates the processor (or, in this case, 20529 collection of processors) for which the code is optimized. 20530 20531`-mcpu=CPU-TYPE' 20532 A deprecated synonym for `-mtune'. 20533 20534`-mfpmath=UNIT' 20535 Generate floating-point arithmetic for selected unit UNIT. The 20536 choices for UNIT are: 20537 20538 `387' 20539 Use the standard 387 floating-point coprocessor present on 20540 the majority of chips and emulated otherwise. Code compiled 20541 with this option runs almost everywhere. The temporary 20542 results are computed in 80-bit precision instead of the 20543 precision specified by the type, resulting in slightly 20544 different results compared to most of other chips. See 20545 `-ffloat-store' for more detailed description. 20546 20547 This is the default choice for x86-32 targets. 20548 20549 `sse' 20550 Use scalar floating-point instructions present in the SSE 20551 instruction set. This instruction set is supported by 20552 Pentium III and newer chips, and in the AMD line by Athlon-4, 20553 Athlon XP and Athlon MP chips. The earlier version of the SSE 20554 instruction set supports only single-precision arithmetic, 20555 thus the double and extended-precision arithmetic are still 20556 done using 387. A later version, present only in Pentium 4 20557 and AMD x86-64 chips, supports double-precision arithmetic 20558 too. 20559 20560 For the x86-32 compiler, you must use `-march=CPU-TYPE', 20561 `-msse' or `-msse2' switches to enable SSE extensions and 20562 make this option effective. For the x86-64 compiler, these 20563 extensions are enabled by default. 20564 20565 The resulting code should be considerably faster in the 20566 majority of cases and avoid the numerical instability 20567 problems of 387 code, but may break some existing code that 20568 expects temporaries to be 80 bits. 20569 20570 This is the default choice for the x86-64 compiler. 20571 20572 `sse,387' 20573 `sse+387' 20574 `both' 20575 Attempt to utilize both instruction sets at once. This 20576 effectively doubles the amount of available registers, and on 20577 chips with separate execution units for 387 and SSE the 20578 execution resources too. Use this option with care, as it is 20579 still experimental, because the GCC register allocator does 20580 not model separate functional units well, resulting in 20581 unstable performance. 20582 20583`-masm=DIALECT' 20584 Output assembly instructions using selected DIALECT. Also affects 20585 which dialect is used for basic `asm' (*note Basic Asm::) and 20586 extended `asm' (*note Extended Asm::). Supported choices (in 20587 dialect order) are `att' or `intel'. The default is `att'. Darwin 20588 does not support `intel'. 20589 20590`-mieee-fp' 20591`-mno-ieee-fp' 20592 Control whether or not the compiler uses IEEE floating-point 20593 comparisons. These correctly handle the case where the result of a 20594 comparison is unordered. 20595 20596`-msoft-float' 20597 Generate output containing library calls for floating point. 20598 20599 *Warning:* the requisite libraries are not part of GCC. Normally 20600 the facilities of the machine's usual C compiler are used, but 20601 this can't be done directly in cross-compilation. You must make 20602 your own arrangements to provide suitable library functions for 20603 cross-compilation. 20604 20605 On machines where a function returns floating-point results in the 20606 80387 register stack, some floating-point opcodes may be emitted 20607 even if `-msoft-float' is used. 20608 20609`-mno-fp-ret-in-387' 20610 Do not use the FPU registers for return values of functions. 20611 20612 The usual calling convention has functions return values of types 20613 `float' and `double' in an FPU register, even if there is no FPU. 20614 The idea is that the operating system should emulate an FPU. 20615 20616 The option `-mno-fp-ret-in-387' causes such values to be returned 20617 in ordinary CPU registers instead. 20618 20619`-mno-fancy-math-387' 20620 Some 387 emulators do not support the `sin', `cos' and `sqrt' 20621 instructions for the 387. Specify this option to avoid generating 20622 those instructions. This option is the default on OpenBSD and 20623 NetBSD. This option is overridden when `-march' indicates that 20624 the target CPU always has an FPU and so the instruction does not 20625 need emulation. These instructions are not generated unless you 20626 also use the `-funsafe-math-optimizations' switch. 20627 20628`-malign-double' 20629`-mno-align-double' 20630 Control whether GCC aligns `double', `long double', and `long 20631 long' variables on a two-word boundary or a one-word boundary. 20632 Aligning `double' variables on a two-word boundary produces code 20633 that runs somewhat faster on a Pentium at the expense of more 20634 memory. 20635 20636 On x86-64, `-malign-double' is enabled by default. 20637 20638 *Warning:* if you use the `-malign-double' switch, structures 20639 containing the above types are aligned differently than the 20640 published application binary interface specifications for the 20641 x86-32 and are not binary compatible with structures in code 20642 compiled without that switch. 20643 20644`-m96bit-long-double' 20645`-m128bit-long-double' 20646 These switches control the size of `long double' type. The x86-32 20647 application binary interface specifies the size to be 96 bits, so 20648 `-m96bit-long-double' is the default in 32-bit mode. 20649 20650 Modern architectures (Pentium and newer) prefer `long double' to 20651 be aligned to an 8- or 16-byte boundary. In arrays or structures 20652 conforming to the ABI, this is not possible. So specifying 20653 `-m128bit-long-double' aligns `long double' to a 16-byte boundary 20654 by padding the `long double' with an additional 32-bit zero. 20655 20656 In the x86-64 compiler, `-m128bit-long-double' is the default 20657 choice as its ABI specifies that `long double' is aligned on 20658 16-byte boundary. 20659 20660 Notice that neither of these options enable any extra precision 20661 over the x87 standard of 80 bits for a `long double'. 20662 20663 *Warning:* if you override the default value for your target ABI, 20664 this changes the size of structures and arrays containing `long 20665 double' variables, as well as modifying the function calling 20666 convention for functions taking `long double'. Hence they are not 20667 binary-compatible with code compiled without that switch. 20668 20669`-mlong-double-64' 20670`-mlong-double-80' 20671`-mlong-double-128' 20672 These switches control the size of `long double' type. A size of 20673 64 bits makes the `long double' type equivalent to the `double' 20674 type. This is the default for 32-bit Bionic C library. A size of 20675 128 bits makes the `long double' type equivalent to the 20676 `__float128' type. This is the default for 64-bit Bionic C library. 20677 20678 *Warning:* if you override the default value for your target ABI, 20679 this changes the size of structures and arrays containing `long 20680 double' variables, as well as modifying the function calling 20681 convention for functions taking `long double'. Hence they are not 20682 binary-compatible with code compiled without that switch. 20683 20684`-malign-data=TYPE' 20685 Control how GCC aligns variables. Supported values for TYPE are 20686 `compat' uses increased alignment value compatible uses GCC 4.8 20687 and earlier, `abi' uses alignment value as specified by the psABI, 20688 and `cacheline' uses increased alignment value to match the cache 20689 line size. `compat' is the default. 20690 20691`-mlarge-data-threshold=THRESHOLD' 20692 When `-mcmodel=medium' is specified, data objects larger than 20693 THRESHOLD are placed in the large data section. This value must 20694 be the same across all objects linked into the binary, and 20695 defaults to 65535. 20696 20697`-mrtd' 20698 Use a different function-calling convention, in which functions 20699 that take a fixed number of arguments return with the `ret NUM' 20700 instruction, which pops their arguments while returning. This 20701 saves one instruction in the caller since there is no need to pop 20702 the arguments there. 20703 20704 You can specify that an individual function is called with this 20705 calling sequence with the function attribute `stdcall'. You can 20706 also override the `-mrtd' option by using the function attribute 20707 `cdecl'. *Note Function Attributes::. 20708 20709 *Warning:* this calling convention is incompatible with the one 20710 normally used on Unix, so you cannot use it if you need to call 20711 libraries compiled with the Unix compiler. 20712 20713 Also, you must provide function prototypes for all functions that 20714 take variable numbers of arguments (including `printf'); otherwise 20715 incorrect code is generated for calls to those functions. 20716 20717 In addition, seriously incorrect code results if you call a 20718 function with too many arguments. (Normally, extra arguments are 20719 harmlessly ignored.) 20720 20721`-mregparm=NUM' 20722 Control how many registers are used to pass integer arguments. By 20723 default, no registers are used to pass arguments, and at most 3 20724 registers can be used. You can control this behavior for a 20725 specific function by using the function attribute `regparm'. 20726 *Note Function Attributes::. 20727 20728 *Warning:* if you use this switch, and NUM is nonzero, then you 20729 must build all modules with the same value, including any 20730 libraries. This includes the system libraries and startup modules. 20731 20732`-msseregparm' 20733 Use SSE register passing conventions for float and double arguments 20734 and return values. You can control this behavior for a specific 20735 function by using the function attribute `sseregparm'. *Note 20736 Function Attributes::. 20737 20738 *Warning:* if you use this switch then you must build all modules 20739 with the same value, including any libraries. This includes the 20740 system libraries and startup modules. 20741 20742`-mvect8-ret-in-mem' 20743 Return 8-byte vectors in memory instead of MMX registers. This is 20744 the default on Solaris 8 and 9 and VxWorks to match the ABI of the 20745 Sun Studio compilers until version 12. Later compiler versions 20746 (starting with Studio 12 Update 1) follow the ABI used by other 20747 x86 targets, which is the default on Solaris 10 and later. _Only_ 20748 use this option if you need to remain compatible with existing 20749 code produced by those previous compiler versions or older 20750 versions of GCC. 20751 20752`-mpc32' 20753`-mpc64' 20754`-mpc80' 20755 Set 80387 floating-point precision to 32, 64 or 80 bits. When 20756 `-mpc32' is specified, the significands of results of 20757 floating-point operations are rounded to 24 bits (single 20758 precision); `-mpc64' rounds the significands of results of 20759 floating-point operations to 53 bits (double precision) and 20760 `-mpc80' rounds the significands of results of floating-point 20761 operations to 64 bits (extended double precision), which is the 20762 default. When this option is used, floating-point operations in 20763 higher precisions are not available to the programmer without 20764 setting the FPU control word explicitly. 20765 20766 Setting the rounding of floating-point operations to less than the 20767 default 80 bits can speed some programs by 2% or more. Note that 20768 some mathematical libraries assume that extended-precision 20769 (80-bit) floating-point operations are enabled by default; 20770 routines in such libraries could suffer significant loss of 20771 accuracy, typically through so-called "catastrophic cancellation", 20772 when this option is used to set the precision to less than 20773 extended precision. 20774 20775`-mstackrealign' 20776 Realign the stack at entry. On the x86, the `-mstackrealign' 20777 option generates an alternate prologue and epilogue that realigns 20778 the run-time stack if necessary. This supports mixing legacy 20779 codes that keep 4-byte stack alignment with modern codes that keep 20780 16-byte stack alignment for SSE compatibility. See also the 20781 attribute `force_align_arg_pointer', applicable to individual 20782 functions. 20783 20784`-mpreferred-stack-boundary=NUM' 20785 Attempt to keep the stack boundary aligned to a 2 raised to NUM 20786 byte boundary. If `-mpreferred-stack-boundary' is not specified, 20787 the default is 4 (16 bytes or 128 bits). 20788 20789 *Warning:* When generating code for the x86-64 architecture with 20790 SSE extensions disabled, `-mpreferred-stack-boundary=3' can be 20791 used to keep the stack boundary aligned to 8 byte boundary. Since 20792 x86-64 ABI require 16 byte stack alignment, this is ABI 20793 incompatible and intended to be used in controlled environment 20794 where stack space is important limitation. This option leads to 20795 wrong code when functions compiled with 16 byte stack alignment 20796 (such as functions from a standard library) are called with 20797 misaligned stack. In this case, SSE instructions may lead to 20798 misaligned memory access traps. In addition, variable arguments 20799 are handled incorrectly for 16 byte aligned objects (including x87 20800 long double and __int128), leading to wrong results. You must 20801 build all modules with `-mpreferred-stack-boundary=3', including 20802 any libraries. This includes the system libraries and startup 20803 modules. 20804 20805`-mincoming-stack-boundary=NUM' 20806 Assume the incoming stack is aligned to a 2 raised to NUM byte 20807 boundary. If `-mincoming-stack-boundary' is not specified, the 20808 one specified by `-mpreferred-stack-boundary' is used. 20809 20810 On Pentium and Pentium Pro, `double' and `long double' values 20811 should be aligned to an 8-byte boundary (see `-malign-double') or 20812 suffer significant run time performance penalties. On Pentium 20813 III, the Streaming SIMD Extension (SSE) data type `__m128' may not 20814 work properly if it is not 16-byte aligned. 20815 20816 To ensure proper alignment of this values on the stack, the stack 20817 boundary must be as aligned as that required by any value stored 20818 on the stack. Further, every function must be generated such that 20819 it keeps the stack aligned. Thus calling a function compiled with 20820 a higher preferred stack boundary from a function compiled with a 20821 lower preferred stack boundary most likely misaligns the stack. 20822 It is recommended that libraries that use callbacks always use the 20823 default setting. 20824 20825 This extra alignment does consume extra stack space, and generally 20826 increases code size. Code that is sensitive to stack space usage, 20827 such as embedded systems and operating system kernels, may want to 20828 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 20829 20830`-mmmx' 20831`-msse' 20832`-msse2' 20833`-msse3' 20834`-mssse3' 20835`-msse4' 20836`-msse4a' 20837`-msse4.1' 20838`-msse4.2' 20839`-mavx' 20840`-mavx2' 20841`-mavx512f' 20842`-mavx512pf' 20843`-mavx512er' 20844`-mavx512cd' 20845`-msha' 20846`-maes' 20847`-mpclmul' 20848`-mclfushopt' 20849`-mfsgsbase' 20850`-mrdrnd' 20851`-mf16c' 20852`-mfma' 20853`-mfma4' 20854`-mno-fma4' 20855`-mprefetchwt1' 20856`-mxop' 20857`-mlwp' 20858`-m3dnow' 20859`-mpopcnt' 20860`-mabm' 20861`-mbmi' 20862`-mbmi2' 20863`-mlzcnt' 20864`-mfxsr' 20865`-mxsave' 20866`-mxsaveopt' 20867`-mxsavec' 20868`-mxsaves' 20869`-mrtm' 20870`-mtbm' 20871`-mmpx' 20872`-mmwaitx' 20873 These switches enable the use of instructions in the MMX, SSE, 20874 SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, 20875 AVX512CD, SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, 20876 FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT, RTM, 20877 MPX, MWAITX or 3DNow! extended instruction sets. Each has a 20878 corresponding `-mno-' option to disable use of these instructions. 20879 20880 These extensions are also available as built-in functions: see 20881 *note x86 Built-in Functions::, for details of the functions 20882 enabled and disabled by these switches. 20883 20884 To generate SSE/SSE2 instructions automatically from floating-point 20885 code (as opposed to 387 instructions), see `-mfpmath=sse'. 20886 20887 GCC depresses SSEx instructions when `-mavx' is used. Instead, it 20888 generates new AVX instructions or AVX equivalence for all SSEx 20889 instructions when needed. 20890 20891 These options enable GCC to use these extended instructions in 20892 generated code, even without `-mfpmath=sse'. Applications that 20893 perform run-time CPU detection must compile separate files for each 20894 supported architecture, using the appropriate flags. In 20895 particular, the file containing the CPU detection code should be 20896 compiled without these options. 20897 20898`-mdump-tune-features' 20899 This option instructs GCC to dump the names of the x86 performance 20900 tuning features and default settings. The names can be used in 20901 `-mtune-ctrl=FEATURE-LIST'. 20902 20903`-mtune-ctrl=FEATURE-LIST' 20904 This option is used to do fine grain control of x86 code 20905 generation features. FEATURE-LIST is a comma separated list of 20906 FEATURE names. See also `-mdump-tune-features'. When specified, 20907 the FEATURE is turned on if it is not preceded with `^', 20908 otherwise, it is turned off. `-mtune-ctrl=FEATURE-LIST' is 20909 intended to be used by GCC developers. Using it may lead to code 20910 paths not covered by testing and can potentially result in 20911 compiler ICEs or runtime errors. 20912 20913`-mno-default' 20914 This option instructs GCC to turn off all tunable features. See 20915 also `-mtune-ctrl=FEATURE-LIST' and `-mdump-tune-features'. 20916 20917`-mcld' 20918 This option instructs GCC to emit a `cld' instruction in the 20919 prologue of functions that use string instructions. String 20920 instructions depend on the DF flag to select between autoincrement 20921 or autodecrement mode. While the ABI specifies the DF flag to be 20922 cleared on function entry, some operating systems violate this 20923 specification by not clearing the DF flag in their exception 20924 dispatchers. The exception handler can be invoked with the DF flag 20925 set, which leads to wrong direction mode when string instructions 20926 are used. This option can be enabled by default on 32-bit x86 20927 targets by configuring GCC with the `--enable-cld' configure 20928 option. Generation of `cld' instructions can be suppressed with 20929 the `-mno-cld' compiler option in this case. 20930 20931`-mvzeroupper' 20932 This option instructs GCC to emit a `vzeroupper' instruction 20933 before a transfer of control flow out of the function to minimize 20934 the AVX to SSE transition penalty as well as remove unnecessary 20935 `zeroupper' intrinsics. 20936 20937`-mprefer-avx128' 20938 This option instructs GCC to use 128-bit AVX instructions instead 20939 of 256-bit AVX instructions in the auto-vectorizer. 20940 20941`-mcx16' 20942 This option enables GCC to generate `CMPXCHG16B' instructions. 20943 `CMPXCHG16B' allows for atomic operations on 128-bit double 20944 quadword (or oword) data types. This is useful for 20945 high-resolution counters that can be updated by multiple 20946 processors (or cores). This instruction is generated as part of 20947 atomic built-in functions: see *note __sync Builtins:: or *note 20948 __atomic Builtins:: for details. 20949 20950`-msahf' 20951 This option enables generation of `SAHF' instructions in 64-bit 20952 code. Early Intel Pentium 4 CPUs with Intel 64 support, prior to 20953 the introduction of Pentium 4 G1 step in December 2005, lacked the 20954 `LAHF' and `SAHF' instructions which are supported by AMD64. 20955 These are load and store instructions, respectively, for certain 20956 status flags. In 64-bit mode, the `SAHF' instruction is used to 20957 optimize `fmod', `drem', and `remainder' built-in functions; see 20958 *note Other Builtins:: for details. 20959 20960`-mmovbe' 20961 This option enables use of the `movbe' instruction to implement 20962 `__builtin_bswap32' and `__builtin_bswap64'. 20963 20964`-mcrc32' 20965 This option enables built-in functions `__builtin_ia32_crc32qi', 20966 `__builtin_ia32_crc32hi', `__builtin_ia32_crc32si' and 20967 `__builtin_ia32_crc32di' to generate the `crc32' machine 20968 instruction. 20969 20970`-mrecip' 20971 This option enables use of `RCPSS' and `RSQRTSS' instructions (and 20972 their vectorized variants `RCPPS' and `RSQRTPS') with an 20973 additional Newton-Raphson step to increase precision instead of 20974 `DIVSS' and `SQRTSS' (and their vectorized variants) for 20975 single-precision floating-point arguments. These instructions are 20976 generated only when `-funsafe-math-optimizations' is enabled 20977 together with `-finite-math-only' and `-fno-trapping-math'. Note 20978 that while the throughput of the sequence is higher than the 20979 throughput of the non-reciprocal instruction, the precision of the 20980 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 20981 equals 0.99999994). 20982 20983 Note that GCC implements `1.0f/sqrtf(X)' in terms of `RSQRTSS' (or 20984 `RSQRTPS') already with `-ffast-math' (or the above option 20985 combination), and doesn't need `-mrecip'. 20986 20987 Also note that GCC emits the above sequence with additional 20988 Newton-Raphson step for vectorized single-float division and 20989 vectorized `sqrtf(X)' already with `-ffast-math' (or the above 20990 option combination), and doesn't need `-mrecip'. 20991 20992`-mrecip=OPT' 20993 This option controls which reciprocal estimate instructions may be 20994 used. OPT is a comma-separated list of options, which may be 20995 preceded by a `!' to invert the option: 20996 20997 `all' 20998 Enable all estimate instructions. 20999 21000 `default' 21001 Enable the default instructions, equivalent to `-mrecip'. 21002 21003 `none' 21004 Disable all estimate instructions, equivalent to `-mno-recip'. 21005 21006 `div' 21007 Enable the approximation for scalar division. 21008 21009 `vec-div' 21010 Enable the approximation for vectorized division. 21011 21012 `sqrt' 21013 Enable the approximation for scalar square root. 21014 21015 `vec-sqrt' 21016 Enable the approximation for vectorized square root. 21017 21018 So, for example, `-mrecip=all,!sqrt' enables all of the reciprocal 21019 approximations, except for square root. 21020 21021`-mveclibabi=TYPE' 21022 Specifies the ABI type to use for vectorizing intrinsics using an 21023 external library. Supported values for TYPE are `svml' for the 21024 Intel short vector math library and `acml' for the AMD math core 21025 library. To use this option, both `-ftree-vectorize' and 21026 `-funsafe-math-optimizations' have to be enabled, and an SVML or 21027 ACML ABI-compatible library must be specified at link time. 21028 21029 GCC currently emits calls to `vmldExp2', `vmldLn2', `vmldLog102', 21030 `vmldLog102', `vmldPow2', `vmldTanh2', `vmldTan2', `vmldAtan2', 21031 `vmldAtanh2', `vmldCbrt2', `vmldSinh2', `vmldSin2', `vmldAsinh2', 21032 `vmldAsin2', `vmldCosh2', `vmldCos2', `vmldAcosh2', `vmldAcos2', 21033 `vmlsExp4', `vmlsLn4', `vmlsLog104', `vmlsLog104', `vmlsPow4', 21034 `vmlsTanh4', `vmlsTan4', `vmlsAtan4', `vmlsAtanh4', `vmlsCbrt4', 21035 `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', `vmlsAsin4', `vmlsCosh4', 21036 `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' for corresponding 21037 function type when `-mveclibabi=svml' is used, and `__vrd2_sin', 21038 `__vrd2_cos', `__vrd2_exp', `__vrd2_log', `__vrd2_log2', 21039 `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', `__vrs4_expf', 21040 `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and `__vrs4_powf' 21041 for the corresponding function type when `-mveclibabi=acml' is 21042 used. 21043 21044`-mabi=NAME' 21045 Generate code for the specified calling convention. Permissible 21046 values are `sysv' for the ABI used on GNU/Linux and other systems, 21047 and `ms' for the Microsoft ABI. The default is to use the 21048 Microsoft ABI when targeting Microsoft Windows and the SysV ABI on 21049 all other systems. You can control this behavior for specific 21050 functions by using the function attributes `ms_abi' and `sysv_abi'. 21051 *Note Function Attributes::. 21052 21053`-mtls-dialect=TYPE' 21054 Generate code to access thread-local storage using the `gnu' or 21055 `gnu2' conventions. `gnu' is the conservative default; `gnu2' is 21056 more efficient, but it may add compile- and run-time requirements 21057 that cannot be satisfied on all systems. 21058 21059`-mpush-args' 21060`-mno-push-args' 21061 Use PUSH operations to store outgoing parameters. This method is 21062 shorter and usually equally fast as method using SUB/MOV 21063 operations and is enabled by default. In some cases disabling it 21064 may improve performance because of improved scheduling and reduced 21065 dependencies. 21066 21067`-maccumulate-outgoing-args' 21068 If enabled, the maximum amount of space required for outgoing 21069 arguments is computed in the function prologue. This is faster on 21070 most modern CPUs because of reduced dependencies, improved 21071 scheduling and reduced stack usage when the preferred stack 21072 boundary is not equal to 2. The drawback is a notable increase in 21073 code size. This switch implies `-mno-push-args'. 21074 21075`-mthreads' 21076 Support thread-safe exception handling on MinGW. Programs that 21077 rely on thread-safe exception handling must compile and link all 21078 code with the `-mthreads' option. When compiling, `-mthreads' 21079 defines `-D_MT'; when linking, it links in a special thread helper 21080 library `-lmingwthrd' which cleans up per-thread 21081 exception-handling data. 21082 21083`-mno-align-stringops' 21084 Do not align the destination of inlined string operations. This 21085 switch reduces code size and improves performance in case the 21086 destination is already aligned, but GCC doesn't know about it. 21087 21088`-minline-all-stringops' 21089 By default GCC inlines string operations only when the destination 21090 is known to be aligned to least a 4-byte boundary. This enables 21091 more inlining and increases code size, but may improve performance 21092 of code that depends on fast `memcpy', `strlen', and `memset' for 21093 short lengths. 21094 21095`-minline-stringops-dynamically' 21096 For string operations of unknown size, use run-time checks with 21097 inline code for small blocks and a library call for large blocks. 21098 21099`-mstringop-strategy=ALG' 21100 Override the internal decision heuristic for the particular 21101 algorithm to use for inlining string operations. The allowed 21102 values for ALG are: 21103 21104 `rep_byte' 21105 `rep_4byte' 21106 `rep_8byte' 21107 Expand using i386 `rep' prefix of the specified size. 21108 21109 `byte_loop' 21110 `loop' 21111 `unrolled_loop' 21112 Expand into an inline loop. 21113 21114 `libcall' 21115 Always use a library call. 21116 21117`-mmemcpy-strategy=STRATEGY' 21118 Override the internal decision heuristic to decide if 21119 `__builtin_memcpy' should be inlined and what inline algorithm to 21120 use when the expected size of the copy operation is known. STRATEGY 21121 is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN triplets. 21122 ALG is specified in `-mstringop-strategy', MAX_SIZE specifies the 21123 max byte size with which inline algorithm ALG is allowed. For the 21124 last triplet, the MAX_SIZE must be `-1'. The MAX_SIZE of the 21125 triplets in the list must be specified in increasing order. The 21126 minimal byte size for ALG is `0' for the first triplet and 21127 `MAX_SIZE + 1' of the preceding range. 21128 21129`-mmemset-strategy=STRATEGY' 21130 The option is similar to `-mmemcpy-strategy=' except that it is to 21131 control `__builtin_memset' expansion. 21132 21133`-momit-leaf-frame-pointer' 21134 Don't keep the frame pointer in a register for leaf functions. 21135 This avoids the instructions to save, set up, and restore frame 21136 pointers and makes an extra register available in leaf functions. 21137 The option `-fomit-leaf-frame-pointer' removes the frame pointer 21138 for leaf functions, which might make debugging harder. 21139 21140`-mtls-direct-seg-refs' 21141`-mno-tls-direct-seg-refs' 21142 Controls whether TLS variables may be accessed with offsets from 21143 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 21144 whether the thread base pointer must be added. Whether or not this 21145 is valid depends on the operating system, and whether it maps the 21146 segment to cover the entire TLS area. 21147 21148 For systems that use the GNU C Library, the default is on. 21149 21150`-msse2avx' 21151`-mno-sse2avx' 21152 Specify that the assembler should encode SSE instructions with VEX 21153 prefix. The option `-mavx' turns this on by default. 21154 21155`-mfentry' 21156`-mno-fentry' 21157 If profiling is active (`-pg'), put the profiling counter call 21158 before the prologue. Note: On x86 architectures the attribute 21159 `ms_hook_prologue' isn't possible at the moment for `-mfentry' and 21160 `-pg'. 21161 21162`-mrecord-mcount' 21163`-mno-record-mcount' 21164 If profiling is active (`-pg'), generate a __mcount_loc section 21165 that contains pointers to each profiling call. This is useful for 21166 automatically patching and out calls. 21167 21168`-mnop-mcount' 21169`-mno-nop-mcount' 21170 If profiling is active (`-pg'), generate the calls to the 21171 profiling functions as nops. This is useful when they should be 21172 patched in later dynamically. This is likely only useful together 21173 with `-mrecord-mcount'. 21174 21175`-mskip-rax-setup' 21176`-mno-skip-rax-setup' 21177 When generating code for the x86-64 architecture with SSE 21178 extensions disabled, `-mskip-rax-setup' can be used to skip 21179 setting up RAX register when there are no variable arguments 21180 passed in vector registers. 21181 21182 *Warning:* Since RAX register is used to avoid unnecessarily 21183 saving vector registers on stack when passing variable arguments, 21184 the impacts of this option are callees may waste some stack space, 21185 misbehave or jump to a random location. GCC 4.4 or newer don't 21186 have those issues, regardless the RAX register value. 21187 21188`-m8bit-idiv' 21189`-mno-8bit-idiv' 21190 On some processors, like Intel Atom, 8-bit unsigned integer divide 21191 is much faster than 32-bit/64-bit integer divide. This option 21192 generates a run-time check. If both dividend and divisor are 21193 within range of 0 to 255, 8-bit unsigned integer divide is used 21194 instead of 32-bit/64-bit integer divide. 21195 21196`-mavx256-split-unaligned-load' 21197`-mavx256-split-unaligned-store' 21198 Split 32-byte AVX unaligned load and store. 21199 21200`-mstack-protector-guard=GUARD' 21201 Generate stack protection code using canary at GUARD. Supported 21202 locations are `global' for global canary or `tls' for per-thread 21203 canary in the TLS block (the default). This option has effect 21204 only when `-fstack-protector' or `-fstack-protector-all' is 21205 specified. 21206 21207 21208 These `-m' switches are supported in addition to the above on x86-64 21209processors in 64-bit environments. 21210 21211`-m32' 21212`-m64' 21213`-mx32' 21214`-m16' 21215 Generate code for a 16-bit, 32-bit or 64-bit environment. The 21216 `-m32' option sets `int', `long', and pointer types to 32 bits, and 21217 generates code that runs on any i386 system. 21218 21219 The `-m64' option sets `int' to 32 bits and `long' and pointer 21220 types to 64 bits, and generates code for the x86-64 architecture. 21221 For Darwin only the `-m64' option also turns off the `-fno-pic' 21222 and `-mdynamic-no-pic' options. 21223 21224 The `-mx32' option sets `int', `long', and pointer types to 32 21225 bits, and generates code for the x86-64 architecture. 21226 21227 The `-m16' option is the same as `-m32', except for that it 21228 outputs the `.code16gcc' assembly directive at the beginning of 21229 the assembly output so that the binary can run in 16-bit mode. 21230 21231`-mno-red-zone' 21232 Do not use a so-called "red zone" for x86-64 code. The red zone 21233 is mandated by the x86-64 ABI; it is a 128-byte area beyond the 21234 location of the stack pointer that is not modified by signal or 21235 interrupt handlers and therefore can be used for temporary data 21236 without adjusting the stack pointer. The flag `-mno-red-zone' 21237 disables this red zone. 21238 21239`-mcmodel=small' 21240 Generate code for the small code model: the program and its 21241 symbols must be linked in the lower 2 GB of the address space. 21242 Pointers are 64 bits. Programs can be statically or dynamically 21243 linked. This is the default code model. 21244 21245`-mcmodel=kernel' 21246 Generate code for the kernel code model. The kernel runs in the 21247 negative 2 GB of the address space. This model has to be used for 21248 Linux kernel code. 21249 21250`-mcmodel=medium' 21251 Generate code for the medium model: the program is linked in the 21252 lower 2 GB of the address space. Small symbols are also placed 21253 there. Symbols with sizes larger than `-mlarge-data-threshold' 21254 are put into large data or BSS sections and can be located above 21255 2GB. Programs can be statically or dynamically linked. 21256 21257`-mcmodel=large' 21258 Generate code for the large model. This model makes no assumptions 21259 about addresses and sizes of sections. 21260 21261`-maddress-mode=long' 21262 Generate code for long address mode. This is only supported for 21263 64-bit and x32 environments. It is the default address mode for 21264 64-bit environments. 21265 21266`-maddress-mode=short' 21267 Generate code for short address mode. This is only supported for 21268 32-bit and x32 environments. It is the default address mode for 21269 32-bit and x32 environments. 21270 21271 21272File: gcc.info, Node: x86 Windows Options, Next: Xstormy16 Options, Prev: x86 Options, Up: Submodel Options 21273 212743.17.54 x86 Windows Options 21275--------------------------- 21276 21277These additional options are available for Microsoft Windows targets: 21278 21279`-mconsole' 21280 This option specifies that a console application is to be 21281 generated, by instructing the linker to set the PE header 21282 subsystem type required for console applications. This option is 21283 available for Cygwin and MinGW targets and is enabled by default 21284 on those targets. 21285 21286`-mdll' 21287 This option is available for Cygwin and MinGW targets. It 21288 specifies that a DLL--a dynamic link library--is to be generated, 21289 enabling the selection of the required runtime startup object and 21290 entry point. 21291 21292`-mnop-fun-dllimport' 21293 This option is available for Cygwin and MinGW targets. It 21294 specifies that the `dllimport' attribute should be ignored. 21295 21296`-mthread' 21297 This option is available for MinGW targets. It specifies that 21298 MinGW-specific thread support is to be used. 21299 21300`-municode' 21301 This option is available for MinGW-w64 targets. It causes the 21302 `UNICODE' preprocessor macro to be predefined, and chooses 21303 Unicode-capable runtime startup code. 21304 21305`-mwin32' 21306 This option is available for Cygwin and MinGW targets. It 21307 specifies that the typical Microsoft Windows predefined macros are 21308 to be set in the pre-processor, but does not influence the choice 21309 of runtime library/startup code. 21310 21311`-mwindows' 21312 This option is available for Cygwin and MinGW targets. It 21313 specifies that a GUI application is to be generated by instructing 21314 the linker to set the PE header subsystem type appropriately. 21315 21316`-fno-set-stack-executable' 21317 This option is available for MinGW targets. It specifies that the 21318 executable flag for the stack used by nested functions isn't set. 21319 This is necessary for binaries running in kernel mode of Microsoft 21320 Windows, as there the User32 API, which is used to set executable 21321 privileges, isn't available. 21322 21323`-fwritable-relocated-rdata' 21324 This option is available for MinGW and Cygwin targets. It 21325 specifies that relocated-data in read-only section is put into 21326 .data section. This is a necessary for older runtimes not 21327 supporting modification of .rdata sections for pseudo-relocation. 21328 21329`-mpe-aligned-commons' 21330 This option is available for Cygwin and MinGW targets. It 21331 specifies that the GNU extension to the PE file format that 21332 permits the correct alignment of COMMON variables should be used 21333 when generating code. It is enabled by default if GCC detects 21334 that the target assembler found during configuration supports the 21335 feature. 21336 21337 See also under *note x86 Options:: for standard options. 21338 21339 21340File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86 Windows Options, Up: Submodel Options 21341 213423.17.55 Xstormy16 Options 21343------------------------- 21344 21345These options are defined for Xstormy16: 21346 21347`-msim' 21348 Choose startup files and linker script suitable for the simulator. 21349 21350 21351File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 21352 213533.17.56 Xtensa Options 21354---------------------- 21355 21356These options are supported for Xtensa targets: 21357 21358`-mconst16' 21359`-mno-const16' 21360 Enable or disable use of `CONST16' instructions for loading 21361 constant values. The `CONST16' instruction is currently not a 21362 standard option from Tensilica. When enabled, `CONST16' 21363 instructions are always used in place of the standard `L32R' 21364 instructions. The use of `CONST16' is enabled by default only if 21365 the `L32R' instruction is not available. 21366 21367`-mfused-madd' 21368`-mno-fused-madd' 21369 Enable or disable use of fused multiply/add and multiply/subtract 21370 instructions in the floating-point option. This has no effect if 21371 the floating-point option is not also enabled. Disabling fused 21372 multiply/add and multiply/subtract instructions forces the 21373 compiler to use separate instructions for the multiply and 21374 add/subtract operations. This may be desirable in some cases 21375 where strict IEEE 754-compliant results are required: the fused 21376 multiply add/subtract instructions do not round the intermediate 21377 result, thereby producing results with _more_ bits of precision 21378 than specified by the IEEE standard. Disabling fused multiply 21379 add/subtract instructions also ensures that the program output is 21380 not sensitive to the compiler's ability to combine multiply and 21381 add/subtract operations. 21382 21383`-mserialize-volatile' 21384`-mno-serialize-volatile' 21385 When this option is enabled, GCC inserts `MEMW' instructions before 21386 `volatile' memory references to guarantee sequential consistency. 21387 The default is `-mserialize-volatile'. Use 21388 `-mno-serialize-volatile' to omit the `MEMW' instructions. 21389 21390`-mforce-no-pic' 21391 For targets, like GNU/Linux, where all user-mode Xtensa code must 21392 be position-independent code (PIC), this option disables PIC for 21393 compiling kernel code. 21394 21395`-mtext-section-literals' 21396`-mno-text-section-literals' 21397 These options control the treatment of literal pools. The default 21398 is `-mno-text-section-literals', which places literals in a 21399 separate section in the output file. This allows the literal pool 21400 to be placed in a data RAM/ROM, and it also allows the linker to 21401 combine literal pools from separate object files to remove 21402 redundant literals and improve code size. With 21403 `-mtext-section-literals', the literals are interspersed in the 21404 text section in order to keep them as close as possible to their 21405 references. This may be necessary for large assembly files. 21406 21407`-mtarget-align' 21408`-mno-target-align' 21409 When this option is enabled, GCC instructs the assembler to 21410 automatically align instructions to reduce branch penalties at the 21411 expense of some code density. The assembler attempts to widen 21412 density instructions to align branch targets and the instructions 21413 following call instructions. If there are not enough preceding 21414 safe density instructions to align a target, no widening is 21415 performed. The default is `-mtarget-align'. These options do not 21416 affect the treatment of auto-aligned instructions like `LOOP', 21417 which the assembler always aligns, either by widening density 21418 instructions or by inserting NOP instructions. 21419 21420`-mlongcalls' 21421`-mno-longcalls' 21422 When this option is enabled, GCC instructs the assembler to 21423 translate direct calls to indirect calls unless it can determine 21424 that the target of a direct call is in the range allowed by the 21425 call instruction. This translation typically occurs for calls to 21426 functions in other source files. Specifically, the assembler 21427 translates a direct `CALL' instruction into an `L32R' followed by 21428 a `CALLX' instruction. The default is `-mno-longcalls'. This 21429 option should be used in programs where the call target can 21430 potentially be out of range. This option is implemented in the 21431 assembler, not the compiler, so the assembly code generated by GCC 21432 still shows direct call instructions--look at the disassembled 21433 object code to see the actual instructions. Note that the 21434 assembler uses an indirect call for every cross-file call, not 21435 just those that really are out of range. 21436 21437 21438File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 21439 214403.17.57 zSeries Options 21441----------------------- 21442 21443These are listed under *Note S/390 and zSeries Options::. 21444 21445 21446File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 21447 214483.18 Options for Code Generation Conventions 21449============================================ 21450 21451These machine-independent options control the interface conventions 21452used in code generation. 21453 21454 Most of them have both positive and negative forms; the negative form 21455of `-ffoo' is `-fno-foo'. In the table below, only one of the forms is 21456listed--the one that is not the default. You can figure out the other 21457form by either removing `no-' or adding it. 21458 21459`-fbounds-check' 21460 For front ends that support it, generate additional code to check 21461 that indices used to access arrays are within the declared range. 21462 This is currently only supported by the Java and Fortran front 21463 ends, where this option defaults to true and false respectively. 21464 21465`-fstack-reuse=REUSE-LEVEL' 21466 This option controls stack space reuse for user declared 21467 local/auto variables and compiler generated temporaries. 21468 REUSE_LEVEL can be `all', `named_vars', or `none'. `all' enables 21469 stack reuse for all local variables and temporaries, `named_vars' 21470 enables the reuse only for user defined local variables with 21471 names, and `none' disables stack reuse completely. The default 21472 value is `all'. The option is needed when the program extends the 21473 lifetime of a scoped local variable or a compiler generated 21474 temporary beyond the end point defined by the language. When a 21475 lifetime of a variable ends, and if the variable lives in memory, 21476 the optimizing compiler has the freedom to reuse its stack space 21477 with other temporaries or scoped local variables whose live range 21478 does not overlap with it. Legacy code extending local lifetime is 21479 likely to break with the stack reuse optimization. 21480 21481 For example, 21482 21483 int *p; 21484 { 21485 int local1; 21486 21487 p = &local1; 21488 local1 = 10; 21489 .... 21490 } 21491 { 21492 int local2; 21493 local2 = 20; 21494 ... 21495 } 21496 21497 if (*p == 10) // out of scope use of local1 21498 { 21499 21500 } 21501 21502 Another example: 21503 21504 struct A 21505 { 21506 A(int k) : i(k), j(k) { } 21507 int i; 21508 int j; 21509 }; 21510 21511 A *ap; 21512 21513 void foo(const A& ar) 21514 { 21515 ap = &ar; 21516 } 21517 21518 void bar() 21519 { 21520 foo(A(10)); // temp object's lifetime ends when foo returns 21521 21522 { 21523 A a(20); 21524 .... 21525 } 21526 ap->i+= 10; // ap references out of scope temp whose space 21527 // is reused with a. What is the value of ap->i? 21528 } 21529 21530 The lifetime of a compiler generated temporary is well defined by 21531 the C++ standard. When a lifetime of a temporary ends, and if the 21532 temporary lives in memory, the optimizing compiler has the freedom 21533 to reuse its stack space with other temporaries or scoped local 21534 variables whose live range does not overlap with it. However some 21535 of the legacy code relies on the behavior of older compilers in 21536 which temporaries' stack space is not reused, the aggressive stack 21537 reuse can lead to runtime errors. This option is used to control 21538 the temporary stack reuse optimization. 21539 21540`-ftrapv' 21541 This option generates traps for signed overflow on addition, 21542 subtraction, multiplication operations. 21543 21544`-fwrapv' 21545 This option instructs the compiler to assume that signed arithmetic 21546 overflow of addition, subtraction and multiplication wraps around 21547 using twos-complement representation. This flag enables some 21548 optimizations and disables others. This option is enabled by 21549 default for the Java front end, as required by the Java language 21550 specification. 21551 21552`-fexceptions' 21553 Enable exception handling. Generates extra code needed to 21554 propagate exceptions. For some targets, this implies GCC 21555 generates frame unwind information for all functions, which can 21556 produce significant data size overhead, although it does not 21557 affect execution. If you do not specify this option, GCC enables 21558 it by default for languages like C++ that normally require 21559 exception handling, and disables it for languages like C that do 21560 not normally require it. However, you may need to enable this 21561 option when compiling C code that needs to interoperate properly 21562 with exception handlers written in C++. You may also wish to 21563 disable this option if you are compiling older C++ programs that 21564 don't use exception handling. 21565 21566`-fnon-call-exceptions' 21567 Generate code that allows trapping instructions to throw 21568 exceptions. Note that this requires platform-specific runtime 21569 support that does not exist everywhere. Moreover, it only allows 21570 _trapping_ instructions to throw exceptions, i.e. memory 21571 references or floating-point instructions. It does not allow 21572 exceptions to be thrown from arbitrary signal handlers such as 21573 `SIGALRM'. 21574 21575`-fdelete-dead-exceptions' 21576 Consider that instructions that may throw exceptions but don't 21577 otherwise contribute to the execution of the program can be 21578 optimized away. This option is enabled by default for the Ada 21579 front end, as permitted by the Ada language specification. 21580 Optimization passes that cause dead exceptions to be removed are 21581 enabled independently at different optimization levels. 21582 21583`-funwind-tables' 21584 Similar to `-fexceptions', except that it just generates any needed 21585 static data, but does not affect the generated code in any other 21586 way. You normally do not need to enable this option; instead, a 21587 language processor that needs this handling enables it on your 21588 behalf. 21589 21590`-fasynchronous-unwind-tables' 21591 Generate unwind table in DWARF 2 format, if supported by target 21592 machine. The table is exact at each instruction boundary, so it 21593 can be used for stack unwinding from asynchronous events (such as 21594 debugger or garbage collector). 21595 21596`-fno-gnu-unique' 21597 On systems with recent GNU assembler and C library, the C++ 21598 compiler uses the `STB_GNU_UNIQUE' binding to make sure that 21599 definitions of template static data members and static local 21600 variables in inline functions are unique even in the presence of 21601 `RTLD_LOCAL'; this is necessary to avoid problems with a library 21602 used by two different `RTLD_LOCAL' plugins depending on a 21603 definition in one of them and therefore disagreeing with the other 21604 one about the binding of the symbol. But this causes `dlclose' to 21605 be ignored for affected DSOs; if your program relies on 21606 reinitialization of a DSO via `dlclose' and `dlopen', you can use 21607 `-fno-gnu-unique'. 21608 21609`-fpcc-struct-return' 21610 Return "short" `struct' and `union' values in memory like longer 21611 ones, rather than in registers. This convention is less 21612 efficient, but it has the advantage of allowing intercallability 21613 between GCC-compiled files and files compiled with other 21614 compilers, particularly the Portable C Compiler (pcc). 21615 21616 The precise convention for returning structures in memory depends 21617 on the target configuration macros. 21618 21619 Short structures and unions are those whose size and alignment 21620 match that of some integer type. 21621 21622 *Warning:* code compiled with the `-fpcc-struct-return' switch is 21623 not binary compatible with code compiled with the 21624 `-freg-struct-return' switch. Use it to conform to a non-default 21625 application binary interface. 21626 21627`-freg-struct-return' 21628 Return `struct' and `union' values in registers when possible. 21629 This is more efficient for small structures than 21630 `-fpcc-struct-return'. 21631 21632 If you specify neither `-fpcc-struct-return' nor 21633 `-freg-struct-return', GCC defaults to whichever convention is 21634 standard for the target. If there is no standard convention, GCC 21635 defaults to `-fpcc-struct-return', except on targets where GCC is 21636 the principal compiler. In those cases, we can choose the 21637 standard, and we chose the more efficient register return 21638 alternative. 21639 21640 *Warning:* code compiled with the `-freg-struct-return' switch is 21641 not binary compatible with code compiled with the 21642 `-fpcc-struct-return' switch. Use it to conform to a non-default 21643 application binary interface. 21644 21645`-fshort-enums' 21646 Allocate to an `enum' type only as many bytes as it needs for the 21647 declared range of possible values. Specifically, the `enum' type 21648 is equivalent to the smallest integer type that has enough room. 21649 21650 *Warning:* the `-fshort-enums' switch causes GCC to generate code 21651 that is not binary compatible with code generated without that 21652 switch. Use it to conform to a non-default application binary 21653 interface. 21654 21655`-fshort-double' 21656 Use the same size for `double' as for `float'. 21657 21658 *Warning:* the `-fshort-double' switch causes GCC to generate code 21659 that is not binary compatible with code generated without that 21660 switch. Use it to conform to a non-default application binary 21661 interface. 21662 21663`-fshort-wchar' 21664 Override the underlying type for `wchar_t' to be `short unsigned 21665 int' instead of the default for the target. This option is useful 21666 for building programs to run under WINE. 21667 21668 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 21669 that is not binary compatible with code generated without that 21670 switch. Use it to conform to a non-default application binary 21671 interface. 21672 21673`-fno-common' 21674 In C code, controls the placement of uninitialized global 21675 variables. Unix C compilers have traditionally permitted multiple 21676 definitions of such variables in different compilation units by 21677 placing the variables in a common block. This is the behavior 21678 specified by `-fcommon', and is the default for GCC on most 21679 targets. On the other hand, this behavior is not required by ISO 21680 C, and on some targets may carry a speed or code size penalty on 21681 variable references. The `-fno-common' option specifies that the 21682 compiler should place uninitialized global variables in the data 21683 section of the object file, rather than generating them as common 21684 blocks. This has the effect that if the same variable is declared 21685 (without `extern') in two different compilations, you get a 21686 multiple-definition error when you link them. In this case, you 21687 must compile with `-fcommon' instead. Compiling with 21688 `-fno-common' is useful on targets for which it provides better 21689 performance, or if you wish to verify that the program will work 21690 on other systems that always treat uninitialized variable 21691 declarations this way. 21692 21693`-fno-ident' 21694 Ignore the `#ident' directive. 21695 21696`-finhibit-size-directive' 21697 Don't output a `.size' assembler directive, or anything else that 21698 would cause trouble if the function is split in the middle, and the 21699 two halves are placed at locations far apart in memory. This 21700 option is used when compiling `crtstuff.c'; you should not need to 21701 use it for anything else. 21702 21703`-fverbose-asm' 21704 Put extra commentary information in the generated assembly code to 21705 make it more readable. This option is generally only of use to 21706 those who actually need to read the generated assembly code 21707 (perhaps while debugging the compiler itself). 21708 21709 `-fno-verbose-asm', the default, causes the extra information to 21710 be omitted and is useful when comparing two assembler files. 21711 21712`-frecord-gcc-switches' 21713 This switch causes the command line used to invoke the compiler to 21714 be recorded into the object file that is being created. This 21715 switch is only implemented on some targets and the exact format of 21716 the recording is target and binary file format dependent, but it 21717 usually takes the form of a section containing ASCII text. This 21718 switch is related to the `-fverbose-asm' switch, but that switch 21719 only records information in the assembler output file as comments, 21720 so it never reaches the object file. See also 21721 `-grecord-gcc-switches' for another way of storing compiler 21722 options into the object file. 21723 21724`-fpic' 21725 Generate position-independent code (PIC) suitable for use in a 21726 shared library, if supported for the target machine. Such code 21727 accesses all constant addresses through a global offset table 21728 (GOT). The dynamic loader resolves the GOT entries when the 21729 program starts (the dynamic loader is not part of GCC; it is part 21730 of the operating system). If the GOT size for the linked 21731 executable exceeds a machine-specific maximum size, you get an 21732 error message from the linker indicating that `-fpic' does not 21733 work; in that case, recompile with `-fPIC' instead. (These 21734 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 21735 x86 has no such limit.) 21736 21737 Position-independent code requires special support, and therefore 21738 works only on certain machines. For the x86, GCC supports PIC for 21739 System V but not for the Sun 386i. Code generated for the IBM 21740 RS/6000 is always position-independent. 21741 21742 When this flag is set, the macros `__pic__' and `__PIC__' are 21743 defined to 1. 21744 21745`-fPIC' 21746 If supported for the target machine, emit position-independent 21747 code, suitable for dynamic linking and avoiding any limit on the 21748 size of the global offset table. This option makes a difference 21749 on the m68k, PowerPC and SPARC. 21750 21751 Position-independent code requires special support, and therefore 21752 works only on certain machines. 21753 21754 When this flag is set, the macros `__pic__' and `__PIC__' are 21755 defined to 2. 21756 21757`-fpie' 21758`-fPIE' 21759 These options are similar to `-fpic' and `-fPIC', but generated 21760 position independent code can be only linked into executables. 21761 Usually these options are used when `-pie' GCC option is used 21762 during linking. 21763 21764 `-fpie' and `-fPIE' both define the macros `__pie__' and 21765 `__PIE__'. The macros have the value 1 for `-fpie' and 2 for 21766 `-fPIE'. 21767 21768`-fno-jump-tables' 21769 Do not use jump tables for switch statements even where it would be 21770 more efficient than other code generation strategies. This option 21771 is of use in conjunction with `-fpic' or `-fPIC' for building code 21772 that forms part of a dynamic linker and cannot reference the 21773 address of a jump table. On some targets, jump tables do not 21774 require a GOT and this option is not needed. 21775 21776`-ffixed-REG' 21777 Treat the register named REG as a fixed register; generated code 21778 should never refer to it (except perhaps as a stack pointer, frame 21779 pointer or in some other fixed role). 21780 21781 REG must be the name of a register. The register names accepted 21782 are machine-specific and are defined in the `REGISTER_NAMES' macro 21783 in the machine description macro file. 21784 21785 This flag does not have a negative form, because it specifies a 21786 three-way choice. 21787 21788`-fcall-used-REG' 21789 Treat the register named REG as an allocable register that is 21790 clobbered by function calls. It may be allocated for temporaries 21791 or variables that do not live across a call. Functions compiled 21792 this way do not save and restore the register REG. 21793 21794 It is an error to use this flag with the frame pointer or stack 21795 pointer. Use of this flag for other registers that have fixed 21796 pervasive roles in the machine's execution model produces 21797 disastrous results. 21798 21799 This flag does not have a negative form, because it specifies a 21800 three-way choice. 21801 21802`-fcall-saved-REG' 21803 Treat the register named REG as an allocable register saved by 21804 functions. It may be allocated even for temporaries or variables 21805 that live across a call. Functions compiled this way save and 21806 restore the register REG if they use it. 21807 21808 It is an error to use this flag with the frame pointer or stack 21809 pointer. Use of this flag for other registers that have fixed 21810 pervasive roles in the machine's execution model produces 21811 disastrous results. 21812 21813 A different sort of disaster results from the use of this flag for 21814 a register in which function values may be returned. 21815 21816 This flag does not have a negative form, because it specifies a 21817 three-way choice. 21818 21819`-fpack-struct[=N]' 21820 Without a value specified, pack all structure members together 21821 without holes. When a value is specified (which must be a small 21822 power of two), pack structure members according to this value, 21823 representing the maximum alignment (that is, objects with default 21824 alignment requirements larger than this are output potentially 21825 unaligned at the next fitting location. 21826 21827 *Warning:* the `-fpack-struct' switch causes GCC to generate code 21828 that is not binary compatible with code generated without that 21829 switch. Additionally, it makes the code suboptimal. Use it to 21830 conform to a non-default application binary interface. 21831 21832`-finstrument-functions' 21833 Generate instrumentation calls for entry and exit to functions. 21834 Just after function entry and just before function exit, the 21835 following profiling functions are called with the address of the 21836 current function and its call site. (On some platforms, 21837 `__builtin_return_address' does not work beyond the current 21838 function, so the call site information may not be available to the 21839 profiling functions otherwise.) 21840 21841 void __cyg_profile_func_enter (void *this_fn, 21842 void *call_site); 21843 void __cyg_profile_func_exit (void *this_fn, 21844 void *call_site); 21845 21846 The first argument is the address of the start of the current 21847 function, which may be looked up exactly in the symbol table. 21848 21849 This instrumentation is also done for functions expanded inline in 21850 other functions. The profiling calls indicate where, 21851 conceptually, the inline function is entered and exited. This 21852 means that addressable versions of such functions must be 21853 available. If all your uses of a function are expanded inline, 21854 this may mean an additional expansion of code size. If you use 21855 `extern inline' in your C code, an addressable version of such 21856 functions must be provided. (This is normally the case anyway, 21857 but if you get lucky and the optimizer always expands the 21858 functions inline, you might have gotten away without providing 21859 static copies.) 21860 21861 A function may be given the attribute `no_instrument_function', in 21862 which case this instrumentation is not done. This can be used, for 21863 example, for the profiling functions listed above, high-priority 21864 interrupt routines, and any functions from which the profiling 21865 functions cannot safely be called (perhaps signal handlers, if the 21866 profiling routines generate output or allocate memory). 21867 21868`-finstrument-functions-exclude-file-list=FILE,FILE,...' 21869 Set the list of functions that are excluded from instrumentation 21870 (see the description of `-finstrument-functions'). If the file 21871 that contains a function definition matches with one of FILE, then 21872 that function is not instrumented. The match is done on 21873 substrings: if the FILE parameter is a substring of the file name, 21874 it is considered to be a match. 21875 21876 For example: 21877 21878 -finstrument-functions-exclude-file-list=/bits/stl,include/sys 21879 21880 excludes any inline function defined in files whose pathnames 21881 contain `/bits/stl' or `include/sys'. 21882 21883 If, for some reason, you want to include letter `,' in one of SYM, 21884 write `\,'. For example, 21885 `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the 21886 single quote surrounding the option). 21887 21888`-finstrument-functions-exclude-function-list=SYM,SYM,...' 21889 This is similar to `-finstrument-functions-exclude-file-list', but 21890 this option sets the list of function names to be excluded from 21891 instrumentation. The function name to be matched is its 21892 user-visible name, such as `vector<int> blah(const vector<int> 21893 &)', not the internal mangled name (e.g., 21894 `_Z4blahRSt6vectorIiSaIiEE'). The match is done on substrings: if 21895 the SYM parameter is a substring of the function name, it is 21896 considered to be a match. For C99 and C++ extended identifiers, 21897 the function name must be given in UTF-8, not using universal 21898 character names. 21899 21900`-fstack-check' 21901 Generate code to verify that you do not go beyond the boundary of 21902 the stack. You should specify this flag if you are running in an 21903 environment with multiple threads, but you only rarely need to 21904 specify it in a single-threaded environment since stack overflow 21905 is automatically detected on nearly all systems if there is only 21906 one stack. 21907 21908 Note that this switch does not actually cause checking to be done; 21909 the operating system or the language runtime must do that. The 21910 switch causes generation of code to ensure that they see the stack 21911 being extended. 21912 21913 You can additionally specify a string parameter: `no' means no 21914 checking, `generic' means force the use of old-style checking, 21915 `specific' means use the best checking method and is equivalent to 21916 bare `-fstack-check'. 21917 21918 Old-style checking is a generic mechanism that requires no specific 21919 target support in the compiler but comes with the following 21920 drawbacks: 21921 21922 1. Modified allocation strategy for large objects: they are 21923 always allocated dynamically if their size exceeds a fixed 21924 threshold. 21925 21926 2. Fixed limit on the size of the static frame of functions: 21927 when it is topped by a particular function, stack checking is 21928 not reliable and a warning is issued by the compiler. 21929 21930 3. Inefficiency: because of both the modified allocation 21931 strategy and the generic implementation, code performance is 21932 hampered. 21933 21934 Note that old-style stack checking is also the fallback method for 21935 `specific' if no target support has been added in the compiler. 21936 21937`-fstack-limit-register=REG' 21938`-fstack-limit-symbol=SYM' 21939`-fno-stack-limit' 21940 Generate code to ensure that the stack does not grow beyond a 21941 certain value, either the value of a register or the address of a 21942 symbol. If a larger stack is required, a signal is raised at run 21943 time. For most targets, the signal is raised before the stack 21944 overruns the boundary, so it is possible to catch the signal 21945 without taking special precautions. 21946 21947 For instance, if the stack starts at absolute address `0x80000000' 21948 and grows downwards, you can use the flags 21949 `-fstack-limit-symbol=__stack_limit' and 21950 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 21951 of 128KB. Note that this may only work with the GNU linker. 21952 21953`-fsplit-stack' 21954 Generate code to automatically split the stack before it overflows. 21955 The resulting program has a discontiguous stack which can only 21956 overflow if the program is unable to allocate any more memory. 21957 This is most useful when running threaded programs, as it is no 21958 longer necessary to calculate a good stack size to use for each 21959 thread. This is currently only implemented for the x86 targets 21960 running GNU/Linux. 21961 21962 When code compiled with `-fsplit-stack' calls code compiled 21963 without `-fsplit-stack', there may not be much stack space 21964 available for the latter code to run. If compiling all code, 21965 including library code, with `-fsplit-stack' is not an option, 21966 then the linker can fix up these calls so that the code compiled 21967 without `-fsplit-stack' always has a large stack. Support for 21968 this is implemented in the gold linker in GNU binutils release 2.21 21969 and later. 21970 21971`-fleading-underscore' 21972 This option and its counterpart, `-fno-leading-underscore', 21973 forcibly change the way C symbols are represented in the object 21974 file. One use is to help link with legacy assembly code. 21975 21976 *Warning:* the `-fleading-underscore' switch causes GCC to 21977 generate code that is not binary compatible with code generated 21978 without that switch. Use it to conform to a non-default 21979 application binary interface. Not all targets provide complete 21980 support for this switch. 21981 21982`-ftls-model=MODEL' 21983 Alter the thread-local storage model to be used (*note 21984 Thread-Local::). The MODEL argument should be one of 21985 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 21986 Note that the choice is subject to optimization: the compiler may 21987 use a more efficient model for symbols not visible outside of the 21988 translation unit, or if `-fpic' is not given on the command line. 21989 21990 The default without `-fpic' is `initial-exec'; with `-fpic' the 21991 default is `global-dynamic'. 21992 21993`-fvisibility=[default|internal|hidden|protected]' 21994 Set the default ELF image symbol visibility to the specified 21995 option--all symbols are marked with this unless overridden within 21996 the code. Using this feature can very substantially improve 21997 linking and load times of shared object libraries, produce more 21998 optimized code, provide near-perfect API export and prevent symbol 21999 clashes. It is *strongly* recommended that you use this in any 22000 shared objects you distribute. 22001 22002 Despite the nomenclature, `default' always means public; i.e., 22003 available to be linked against from outside the shared object. 22004 `protected' and `internal' are pretty useless in real-world usage 22005 so the only other commonly used option is `hidden'. The default 22006 if `-fvisibility' isn't specified is `default', i.e., make every 22007 symbol public. 22008 22009 A good explanation of the benefits offered by ensuring ELF symbols 22010 have the correct visibility is given by "How To Write Shared 22011 Libraries" by Ulrich Drepper (which can be found at 22012 `http://www.akkadia.org/drepper/')--however a superior solution 22013 made possible by this option to marking things hidden when the 22014 default is public is to make the default hidden and mark things 22015 public. This is the norm with DLLs on Windows and with 22016 `-fvisibility=hidden' and `__attribute__ 22017 ((visibility("default")))' instead of `__declspec(dllexport)' you 22018 get almost identical semantics with identical syntax. This is a 22019 great boon to those working with cross-platform projects. 22020 22021 For those adding visibility support to existing code, you may find 22022 `#pragma GCC visibility' of use. This works by you enclosing the 22023 declarations you wish to set visibility for with (for example) 22024 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility 22025 pop'. Bear in mind that symbol visibility should be viewed *as 22026 part of the API interface contract* and thus all new code should 22027 always specify visibility when it is not the default; i.e., 22028 declarations only for use within the local DSO should *always* be 22029 marked explicitly as hidden as so to avoid PLT indirection 22030 overheads--making this abundantly clear also aids readability and 22031 self-documentation of the code. Note that due to ISO C++ 22032 specification requirements, `operator new' and `operator delete' 22033 must always be of default visibility. 22034 22035 Be aware that headers from outside your project, in particular 22036 system headers and headers from any other library you use, may not 22037 be expecting to be compiled with visibility other than the 22038 default. You may need to explicitly say `#pragma GCC visibility 22039 push(default)' before including any such headers. 22040 22041 `extern' declarations are not affected by `-fvisibility', so a lot 22042 of code can be recompiled with `-fvisibility=hidden' with no 22043 modifications. However, this means that calls to `extern' 22044 functions with no explicit visibility use the PLT, so it is more 22045 effective to use `__attribute ((visibility))' and/or `#pragma GCC 22046 visibility' to tell the compiler which `extern' declarations 22047 should be treated as hidden. 22048 22049 Note that `-fvisibility' does affect C++ vague linkage entities. 22050 This means that, for instance, an exception class that is be 22051 thrown between DSOs must be explicitly marked with default 22052 visibility so that the `type_info' nodes are unified between the 22053 DSOs. 22054 22055 An overview of these techniques, their benefits and how to use them 22056 is at `http://gcc.gnu.org/wiki/Visibility'. 22057 22058`-fstrict-volatile-bitfields' 22059 This option should be used if accesses to volatile bit-fields (or 22060 other structure fields, although the compiler usually honors those 22061 types anyway) should use a single access of the width of the 22062 field's type, aligned to a natural alignment if possible. For 22063 example, targets with memory-mapped peripheral registers might 22064 require all such accesses to be 16 bits wide; with this flag you 22065 can declare all peripheral bit-fields as `unsigned short' 22066 (assuming short is 16 bits on these targets) to force GCC to use 22067 16-bit accesses instead of, perhaps, a more efficient 32-bit 22068 access. 22069 22070 If this option is disabled, the compiler uses the most efficient 22071 instruction. In the previous example, that might be a 32-bit load 22072 instruction, even though that accesses bytes that do not contain 22073 any portion of the bit-field, or memory-mapped registers unrelated 22074 to the one being updated. 22075 22076 In some cases, such as when the `packed' attribute is applied to a 22077 structure field, it may not be possible to access the field with a 22078 single read or write that is correctly aligned for the target 22079 machine. In this case GCC falls back to generating multiple 22080 accesses rather than code that will fault or truncate the result 22081 at run time. 22082 22083 Note: Due to restrictions of the C/C++11 memory model, write 22084 accesses are not allowed to touch non bit-field members. It is 22085 therefore recommended to define all bits of the field's type as 22086 bit-field members. 22087 22088 The default value of this option is determined by the application 22089 binary interface for the target processor. 22090 22091`-fsync-libcalls' 22092 This option controls whether any out-of-line instance of the 22093 `__sync' family of functions may be used to implement the C++11 22094 `__atomic' family of functions. 22095 22096 The default value of this option is enabled, thus the only useful 22097 form of the option is `-fno-sync-libcalls'. This option is used in 22098 the implementation of the `libatomic' runtime library. 22099 22100 22101 22102File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 22103 221043.19 Environment Variables Affecting GCC 22105======================================== 22106 22107This section describes several environment variables that affect how GCC 22108operates. Some of them work by specifying directories or prefixes to 22109use when searching for various kinds of files. Some are used to 22110specify other aspects of the compilation environment. 22111 22112 Note that you can also specify places to search using options such as 22113`-B', `-I' and `-L' (*note Directory Options::). These take precedence 22114over places specified using environment variables, which in turn take 22115precedence over those specified by the configuration of GCC. *Note 22116Controlling the Compilation Driver `gcc': (gccint)Driver. 22117 22118`LANG' 22119`LC_CTYPE' 22120`LC_MESSAGES' 22121`LC_ALL' 22122 These environment variables control the way that GCC uses 22123 localization information which allows GCC to work with different 22124 national conventions. GCC inspects the locale categories 22125 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 22126 These locale categories can be set to any value supported by your 22127 installation. A typical value is `en_GB.UTF-8' for English in the 22128 United Kingdom encoded in UTF-8. 22129 22130 The `LC_CTYPE' environment variable specifies character 22131 classification. GCC uses it to determine the character boundaries 22132 in a string; this is needed for some multibyte encodings that 22133 contain quote and escape characters that are otherwise interpreted 22134 as a string end or escape. 22135 22136 The `LC_MESSAGES' environment variable specifies the language to 22137 use in diagnostic messages. 22138 22139 If the `LC_ALL' environment variable is set, it overrides the value 22140 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 22141 `LC_MESSAGES' default to the value of the `LANG' environment 22142 variable. If none of these variables are set, GCC defaults to 22143 traditional C English behavior. 22144 22145`TMPDIR' 22146 If `TMPDIR' is set, it specifies the directory to use for temporary 22147 files. GCC uses temporary files to hold the output of one stage of 22148 compilation which is to be used as input to the next stage: for 22149 example, the output of the preprocessor, which is the input to the 22150 compiler proper. 22151 22152`GCC_COMPARE_DEBUG' 22153 Setting `GCC_COMPARE_DEBUG' is nearly equivalent to passing 22154 `-fcompare-debug' to the compiler driver. See the documentation 22155 of this option for more details. 22156 22157`GCC_EXEC_PREFIX' 22158 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 22159 names of the subprograms executed by the compiler. No slash is 22160 added when this prefix is combined with the name of a subprogram, 22161 but you can specify a prefix that ends with a slash if you wish. 22162 22163 If `GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an 22164 appropriate prefix to use based on the pathname it is invoked with. 22165 22166 If GCC cannot find the subprogram using the specified prefix, it 22167 tries looking in the usual places for the subprogram. 22168 22169 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 22170 PREFIX is the prefix to the installed compiler. In many cases 22171 PREFIX is the value of `prefix' when you ran the `configure' 22172 script. 22173 22174 Other prefixes specified with `-B' take precedence over this 22175 prefix. 22176 22177 This prefix is also used for finding files such as `crt0.o' that 22178 are used for linking. 22179 22180 In addition, the prefix is used in an unusual way in finding the 22181 directories to search for header files. For each of the standard 22182 directories whose name normally begins with `/usr/local/lib/gcc' 22183 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 22184 replacing that beginning with the specified prefix to produce an 22185 alternate directory name. Thus, with `-Bfoo/', GCC searches 22186 `foo/bar' just before it searches the standard directory 22187 `/usr/local/lib/bar'. If a standard directory begins with the 22188 configured PREFIX then the value of PREFIX is replaced by 22189 `GCC_EXEC_PREFIX' when looking for header files. 22190 22191`COMPILER_PATH' 22192 The value of `COMPILER_PATH' is a colon-separated list of 22193 directories, much like `PATH'. GCC tries the directories thus 22194 specified when searching for subprograms, if it can't find the 22195 subprograms using `GCC_EXEC_PREFIX'. 22196 22197`LIBRARY_PATH' 22198 The value of `LIBRARY_PATH' is a colon-separated list of 22199 directories, much like `PATH'. When configured as a native 22200 compiler, GCC tries the directories thus specified when searching 22201 for special linker files, if it can't find them using 22202 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 22203 when searching for ordinary libraries for the `-l' option (but 22204 directories specified with `-L' come first). 22205 22206`LANG' 22207 This variable is used to pass locale information to the compiler. 22208 One way in which this information is used is to determine the 22209 character set to be used when character literals, string literals 22210 and comments are parsed in C and C++. When the compiler is 22211 configured to allow multibyte characters, the following values for 22212 `LANG' are recognized: 22213 22214 `C-JIS' 22215 Recognize JIS characters. 22216 22217 `C-SJIS' 22218 Recognize SJIS characters. 22219 22220 `C-EUCJP' 22221 Recognize EUCJP characters. 22222 22223 If `LANG' is not defined, or if it has some other value, then the 22224 compiler uses `mblen' and `mbtowc' as defined by the default 22225 locale to recognize and translate multibyte characters. 22226 22227Some additional environment variables affect the behavior of the 22228preprocessor. 22229 22230`CPATH' 22231`C_INCLUDE_PATH' 22232`CPLUS_INCLUDE_PATH' 22233`OBJC_INCLUDE_PATH' 22234 Each variable's value is a list of directories separated by a 22235 special character, much like `PATH', in which to look for header 22236 files. The special character, `PATH_SEPARATOR', is 22237 target-dependent and determined at GCC build time. For Microsoft 22238 Windows-based targets it is a semicolon, and for almost all other 22239 targets it is a colon. 22240 22241 `CPATH' specifies a list of directories to be searched as if 22242 specified with `-I', but after any paths given with `-I' options 22243 on the command line. This environment variable is used regardless 22244 of which language is being preprocessed. 22245 22246 The remaining environment variables apply only when preprocessing 22247 the particular language indicated. Each specifies a list of 22248 directories to be searched as if specified with `-isystem', but 22249 after any paths given with `-isystem' options on the command line. 22250 22251 In all these variables, an empty element instructs the compiler to 22252 search its current working directory. Empty elements can appear 22253 at the beginning or end of a path. For instance, if the value of 22254 `CPATH' is `:/special/include', that has the same effect as 22255 `-I. -I/special/include'. 22256 22257`DEPENDENCIES_OUTPUT' 22258 If this variable is set, its value specifies how to output 22259 dependencies for Make based on the non-system header files 22260 processed by the compiler. System header files are ignored in the 22261 dependency output. 22262 22263 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 22264 which case the Make rules are written to that file, guessing the 22265 target name from the source file name. Or the value can have the 22266 form `FILE TARGET', in which case the rules are written to file 22267 FILE using TARGET as the target name. 22268 22269 In other words, this environment variable is equivalent to 22270 combining the options `-MM' and `-MF' (*note Preprocessor 22271 Options::), with an optional `-MT' switch too. 22272 22273`SUNPRO_DEPENDENCIES' 22274 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 22275 except that system header files are not ignored, so it implies 22276 `-M' rather than `-MM'. However, the dependence on the main input 22277 file is omitted. *Note Preprocessor Options::. 22278 22279 22280File: gcc.info, Node: Precompiled Headers, Prev: Environment Variables, Up: Invoking GCC 22281 222823.20 Using Precompiled Headers 22283============================== 22284 22285Often large projects have many header files that are included in every 22286source file. The time the compiler takes to process these header files 22287over and over again can account for nearly all of the time required to 22288build the project. To make builds faster, GCC allows you to 22289"precompile" a header file. 22290 22291 To create a precompiled header file, simply compile it as you would any 22292other file, if necessary using the `-x' option to make the driver treat 22293it as a C or C++ header file. You may want to use a tool like `make' 22294to keep the precompiled header up-to-date when the headers it contains 22295change. 22296 22297 A precompiled header file is searched for when `#include' is seen in 22298the compilation. As it searches for the included file (*note Search 22299Path: (cpp)Search Path.) the compiler looks for a precompiled header in 22300each directory just before it looks for the include file in that 22301directory. The name searched for is the name specified in the 22302`#include' with `.gch' appended. If the precompiled header file can't 22303be used, it is ignored. 22304 22305 For instance, if you have `#include "all.h"', and you have `all.h.gch' 22306in the same directory as `all.h', then the precompiled header file is 22307used if possible, and the original header is used otherwise. 22308 22309 Alternatively, you might decide to put the precompiled header file in a 22310directory and use `-I' to ensure that directory is searched before (or 22311instead of) the directory containing the original header. Then, if you 22312want to check that the precompiled header file is always used, you can 22313put a file of the same name as the original header in this directory 22314containing an `#error' command. 22315 22316 This also works with `-include'. So yet another way to use 22317precompiled headers, good for projects not designed with precompiled 22318header files in mind, is to simply take most of the header files used by 22319a project, include them from another header file, precompile that header 22320file, and `-include' the precompiled header. If the header files have 22321guards against multiple inclusion, they are skipped because they've 22322already been included (in the precompiled header). 22323 22324 If you need to precompile the same header file for different 22325languages, targets, or compiler options, you can instead make a 22326_directory_ named like `all.h.gch', and put each precompiled header in 22327the directory, perhaps using `-o'. It doesn't matter what you call the 22328files in the directory; every precompiled header in the directory is 22329considered. The first precompiled header encountered in the directory 22330that is valid for this compilation is used; they're searched in no 22331particular order. 22332 22333 There are many other possibilities, limited only by your imagination, 22334good sense, and the constraints of your build system. 22335 22336 A precompiled header file can be used only when these conditions apply: 22337 22338 * Only one precompiled header can be used in a particular 22339 compilation. 22340 22341 * A precompiled header can't be used once the first C token is seen. 22342 You can have preprocessor directives before a precompiled header; 22343 you cannot include a precompiled header from inside another header. 22344 22345 * The precompiled header file must be produced for the same language 22346 as the current compilation. You can't use a C precompiled header 22347 for a C++ compilation. 22348 22349 * The precompiled header file must have been produced by the same 22350 compiler binary as the current compilation is using. 22351 22352 * Any macros defined before the precompiled header is included must 22353 either be defined in the same way as when the precompiled header 22354 was generated, or must not affect the precompiled header, which 22355 usually means that they don't appear in the precompiled header at 22356 all. 22357 22358 The `-D' option is one way to define a macro before a precompiled 22359 header is included; using a `#define' can also do it. There are 22360 also some options that define macros implicitly, like `-O' and 22361 `-Wdeprecated'; the same rule applies to macros defined this way. 22362 22363 * If debugging information is output when using the precompiled 22364 header, using `-g' or similar, the same kind of debugging 22365 information must have been output when building the precompiled 22366 header. However, a precompiled header built using `-g' can be 22367 used in a compilation when no debugging information is being 22368 output. 22369 22370 * The same `-m' options must generally be used when building and 22371 using the precompiled header. *Note Submodel Options::, for any 22372 cases where this rule is relaxed. 22373 22374 * Each of the following options must be the same when building and 22375 using the precompiled header: 22376 22377 -fexceptions 22378 22379 * Some other command-line options starting with `-f', `-p', or `-O' 22380 must be defined in the same way as when the precompiled header was 22381 generated. At present, it's not clear which options are safe to 22382 change and which are not; the safest choice is to use exactly the 22383 same options when generating and using the precompiled header. 22384 The following are known to be safe: 22385 22386 -fmessage-length= -fpreprocessed -fsched-interblock 22387 -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 22388 -fsched-verbose=NUMBER -fschedule-insns -fvisibility= 22389 -pedantic-errors 22390 22391 22392 For all of these except the last, the compiler automatically ignores 22393the precompiled header if the conditions aren't met. If you find an 22394option combination that doesn't work and doesn't cause the precompiled 22395header to be ignored, please consider filing a bug report, see *note 22396Bugs::. 22397 22398 If you do use differing options when generating and using the 22399precompiled header, the actual behavior is a mixture of the behavior 22400for the options. For instance, if you use `-g' to generate the 22401precompiled header but not when using it, you may or may not get 22402debugging information for routines in the precompiled header. 22403 22404 22405File: gcc.info, Node: C Implementation, Next: C++ Implementation, Prev: Invoking GCC, Up: Top 22406 224074 C Implementation-Defined Behavior 22408*********************************** 22409 22410A conforming implementation of ISO C is required to document its choice 22411of behavior in each of the areas that are designated "implementation 22412defined". The following lists all such areas, along with the section 22413numbers from the ISO/IEC 9899:1990, ISO/IEC 9899:1999 and ISO/IEC 224149899:2011 standards. Some areas are only implementation-defined in one 22415version of the standard. 22416 22417 Some choices depend on the externally determined ABI for the platform 22418(including standard character encodings) which GCC follows; these are 22419listed as "determined by ABI" below. *Note Binary Compatibility: 22420Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 22421are documented in the preprocessor manual. *Note 22422Implementation-defined behavior: (cpp)Implementation-defined behavior. 22423Some choices are made by the library and operating system (or other 22424environment when compiling for a freestanding environment); refer to 22425their documentation for details. 22426 22427* Menu: 22428 22429* Translation implementation:: 22430* Environment implementation:: 22431* Identifiers implementation:: 22432* Characters implementation:: 22433* Integers implementation:: 22434* Floating point implementation:: 22435* Arrays and pointers implementation:: 22436* Hints implementation:: 22437* Structures unions enumerations and bit-fields implementation:: 22438* Qualifiers implementation:: 22439* Declarators implementation:: 22440* Statements implementation:: 22441* Preprocessing directives implementation:: 22442* Library functions implementation:: 22443* Architecture implementation:: 22444* Locale-specific behavior implementation:: 22445 22446 22447File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 22448 224494.1 Translation 22450=============== 22451 22452 * `How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90, 22453 C99 and C11 5.1.1.3).' 22454 22455 Diagnostics consist of all the output sent to stderr by GCC. 22456 22457 * `Whether each nonempty sequence of white-space characters other 22458 than new-line is retained or replaced by one space character in 22459 translation phase 3 (C90, C99 and C11 5.1.1.2).' 22460 22461 *Note Implementation-defined behavior: (cpp)Implementation-defined 22462 behavior. 22463 22464 22465 22466File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 22467 224684.2 Environment 22469=============== 22470 22471The behavior of most of these points are dependent on the implementation 22472of the C library, and are not defined by GCC itself. 22473 22474 * `The mapping between physical source file multibyte characters and 22475 the source character set in translation phase 1 (C90, C99 and C11 22476 5.1.1.2).' 22477 22478 *Note Implementation-defined behavior: (cpp)Implementation-defined 22479 behavior. 22480 22481 22482 22483File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 22484 224854.3 Identifiers 22486=============== 22487 22488 * `Which additional multibyte characters may appear in identifiers 22489 and their correspondence to universal character names (C99 and C11 22490 6.4.2).' 22491 22492 *Note Implementation-defined behavior: (cpp)Implementation-defined 22493 behavior. 22494 22495 * `The number of significant initial characters in an identifier 22496 (C90 6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).' 22497 22498 For internal names, all characters are significant. For external 22499 names, the number of significant characters are defined by the 22500 linker; for almost all targets, all characters are significant. 22501 22502 * `Whether case distinctions are significant in an identifier with 22503 external linkage (C90 6.1.2).' 22504 22505 This is a property of the linker. C99 and C11 require that case 22506 distinctions are always significant in identifiers with external 22507 linkage and systems without this property are not supported by GCC. 22508 22509 22510 22511File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 22512 225134.4 Characters 22514============== 22515 22516 * `The number of bits in a byte (C90 3.4, C99 and C11 3.6).' 22517 22518 Determined by ABI. 22519 22520 * `The values of the members of the execution character set (C90, 22521 C99 and C11 5.2.1).' 22522 22523 Determined by ABI. 22524 22525 * `The unique value of the member of the execution character set 22526 produced for each of the standard alphabetic escape sequences 22527 (C90, C99 and C11 5.2.2).' 22528 22529 Determined by ABI. 22530 22531 * `The value of a `char' object into which has been stored any 22532 character other than a member of the basic execution character set 22533 (C90 6.1.2.5, C99 and C11 6.2.5).' 22534 22535 Determined by ABI. 22536 22537 * `Which of `signed char' or `unsigned char' has the same range, 22538 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90 22539 6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).' 22540 22541 Determined by ABI. The options `-funsigned-char' and 22542 `-fsigned-char' change the default. *Note Options Controlling C 22543 Dialect: C Dialect Options. 22544 22545 * `The mapping of members of the source character set (in character 22546 constants and string literals) to members of the execution 22547 character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11 22548 5.1.1.2).' 22549 22550 Determined by ABI. 22551 22552 * `The value of an integer character constant containing more than 22553 one character or containing a character or escape sequence that 22554 does not map to a single-byte execution character (C90 6.1.3.4, 22555 C99 and C11 6.4.4.4).' 22556 22557 *Note Implementation-defined behavior: (cpp)Implementation-defined 22558 behavior. 22559 22560 * `The value of a wide character constant containing more than one 22561 multibyte character or a single multibyte character that maps to 22562 multiple members of the extended execution character set, or 22563 containing a multibyte character or escape sequence not 22564 represented in the extended execution character set (C90 6.1.3.4, 22565 C99 and C11 6.4.4.4).' 22566 22567 *Note Implementation-defined behavior: (cpp)Implementation-defined 22568 behavior. 22569 22570 * `The current locale used to convert a wide character constant 22571 consisting of a single multibyte character that maps to a member 22572 of the extended execution character set into a corresponding wide 22573 character code (C90 6.1.3.4, C99 and C11 6.4.4.4).' 22574 22575 *Note Implementation-defined behavior: (cpp)Implementation-defined 22576 behavior. 22577 22578 * `Whether differently-prefixed wide string literal tokens can be 22579 concatenated and, if so, the treatment of the resulting multibyte 22580 character sequence (C11 6.4.5).' 22581 22582 Such tokens may not be concatenated. 22583 22584 * `The current locale used to convert a wide string literal into 22585 corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).' 22586 22587 *Note Implementation-defined behavior: (cpp)Implementation-defined 22588 behavior. 22589 22590 * `The value of a string literal containing a multibyte character or 22591 escape sequence not represented in the execution character set 22592 (C90 6.1.4, C99 and C11 6.4.5).' 22593 22594 *Note Implementation-defined behavior: (cpp)Implementation-defined 22595 behavior. 22596 22597 * `The encoding of any of `wchar_t', `char16_t', and `char32_t' 22598 where the corresponding standard encoding macro 22599 (`__STDC_ISO_10646__', `__STDC_UTF_16__', or `__STDC_UTF_32__') is 22600 not defined (C11 6.10.8.2).' 22601 22602 *Note Implementation-defined behavior: (cpp)Implementation-defined 22603 behavior. `char16_t' and `char32_t' literals are always encoded 22604 in UTF-16 and UTF-32 respectively. 22605 22606 22607 22608File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 22609 226104.5 Integers 22611============ 22612 22613 * `Any extended integer types that exist in the implementation (C99 22614 and C11 6.2.5).' 22615 22616 GCC does not support any extended integer types. 22617 22618 * `Whether signed integer types are represented using sign and 22619 magnitude, two's complement, or one's complement, and whether the 22620 extraordinary value is a trap representation or an ordinary value 22621 (C99 and C11 6.2.6.2).' 22622 22623 GCC supports only two's complement integer types, and all bit 22624 patterns are ordinary values. 22625 22626 * `The rank of any extended integer type relative to another extended 22627 integer type with the same precision (C99 and C11 6.3.1.1).' 22628 22629 GCC does not support any extended integer types. 22630 22631 * `The result of, or the signal raised by, converting an integer to a 22632 signed integer type when the value cannot be represented in an 22633 object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).' 22634 22635 For conversion to a type of width N, the value is reduced modulo 22636 2^N to be within range of the type; no signal is raised. 22637 22638 * `The results of some bitwise operations on signed integers (C90 22639 6.3, C99 and C11 6.5).' 22640 22641 Bitwise operators act on the representation of the value including 22642 both the sign and value bits, where the sign bit is considered 22643 immediately above the highest-value value bit. Signed `>>' acts 22644 on negative numbers by sign extension. 22645 22646 GCC does not use the latitude given in C99 and C11 only to treat 22647 certain aspects of signed `<<' as undefined, but this is subject to 22648 change. 22649 22650 * `The sign of the remainder on integer division (C90 6.3.5).' 22651 22652 GCC always follows the C99 and C11 requirement that the result of 22653 division is truncated towards zero. 22654 22655 22656 22657File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 22658 226594.6 Floating Point 22660================== 22661 22662 * `The accuracy of the floating-point operations and of the library 22663 functions in `<math.h>' and `<complex.h>' that return 22664 floating-point results (C90, C99 and C11 5.2.4.2.2).' 22665 22666 The accuracy is unknown. 22667 22668 * `The rounding behaviors characterized by non-standard values of 22669 `FLT_ROUNDS' (C90, C99 and C11 5.2.4.2.2).' 22670 22671 GCC does not use such values. 22672 22673 * `The evaluation methods characterized by non-standard negative 22674 values of `FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).' 22675 22676 GCC does not use such values. 22677 22678 * `The direction of rounding when an integer is converted to a 22679 floating-point number that cannot exactly represent the original 22680 value (C90 6.2.1.3, C99 and C11 6.3.1.4).' 22681 22682 C99 Annex F is followed. 22683 22684 * `The direction of rounding when a floating-point number is 22685 converted to a narrower floating-point number (C90 6.2.1.4, C99 22686 and C11 6.3.1.5).' 22687 22688 C99 Annex F is followed. 22689 22690 * `How the nearest representable value or the larger or smaller 22691 representable value immediately adjacent to the nearest 22692 representable value is chosen for certain floating constants (C90 22693 6.1.3.1, C99 and C11 6.4.4.2).' 22694 22695 C99 Annex F is followed. 22696 22697 * `Whether and how floating expressions are contracted when not 22698 disallowed by the `FP_CONTRACT' pragma (C99 and C11 6.5).' 22699 22700 Expressions are currently only contracted if `-ffp-contract=fast', 22701 `-funsafe-math-optimizations' or `-ffast-math' are used. This is 22702 subject to change. 22703 22704 * `The default state for the `FENV_ACCESS' pragma (C99 and C11 22705 7.6.1).' 22706 22707 This pragma is not implemented, but the default is to "off" unless 22708 `-frounding-math' is used in which case it is "on". 22709 22710 * `Additional floating-point exceptions, rounding modes, 22711 environments, and classifications, and their macro names (C99 and 22712 C11 7.6, C99 and C11 7.12).' 22713 22714 This is dependent on the implementation of the C library, and is 22715 not defined by GCC itself. 22716 22717 * `The default state for the `FP_CONTRACT' pragma (C99 and C11 22718 7.12.2).' 22719 22720 This pragma is not implemented. Expressions are currently only 22721 contracted if `-ffp-contract=fast', `-funsafe-math-optimizations' 22722 or `-ffast-math' are used. This is subject to change. 22723 22724 * `Whether the "inexact" floating-point exception can be raised when 22725 the rounded result actually does equal the mathematical result in 22726 an IEC 60559 conformant implementation (C99 F.9).' 22727 22728 This is dependent on the implementation of the C library, and is 22729 not defined by GCC itself. 22730 22731 * `Whether the "underflow" (and "inexact") floating-point exception 22732 can be raised when a result is tiny but not inexact in an IEC 22733 60559 conformant implementation (C99 F.9).' 22734 22735 This is dependent on the implementation of the C library, and is 22736 not defined by GCC itself. 22737 22738 22739 22740File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 22741 227424.7 Arrays and Pointers 22743======================= 22744 22745 * `The result of converting a pointer to an integer or vice versa 22746 (C90 6.3.4, C99 and C11 6.3.2.3).' 22747 22748 A cast from pointer to integer discards most-significant bits if 22749 the pointer representation is larger than the integer type, 22750 sign-extends(1) if the pointer representation is smaller than the 22751 integer type, otherwise the bits are unchanged. 22752 22753 A cast from integer to pointer discards most-significant bits if 22754 the pointer representation is smaller than the integer type, 22755 extends according to the signedness of the integer type if the 22756 pointer representation is larger than the integer type, otherwise 22757 the bits are unchanged. 22758 22759 When casting from pointer to integer and back again, the resulting 22760 pointer must reference the same object as the original pointer, 22761 otherwise the behavior is undefined. That is, one may not use 22762 integer arithmetic to avoid the undefined behavior of pointer 22763 arithmetic as proscribed in C99 and C11 6.5.6/8. 22764 22765 * `The size of the result of subtracting two pointers to elements of 22766 the same array (C90 6.3.6, C99 and C11 6.5.6).' 22767 22768 The value is as specified in the standard and the type is 22769 determined by the ABI. 22770 22771 22772 ---------- Footnotes ---------- 22773 22774 (1) Future versions of GCC may zero-extend, or use a target-defined 22775`ptr_extend' pattern. Do not rely on sign extension. 22776 22777 22778File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 22779 227804.8 Hints 22781========= 22782 22783 * `The extent to which suggestions made by using the `register' 22784 storage-class specifier are effective (C90 6.5.1, C99 and C11 22785 6.7.1).' 22786 22787 The `register' specifier affects code generation only in these 22788 ways: 22789 22790 * When used as part of the register variable extension, see 22791 *note Explicit Reg Vars::. 22792 22793 * When `-O0' is in use, the compiler allocates distinct stack 22794 memory for all variables that do not have the `register' 22795 storage-class specifier; if `register' is specified, the 22796 variable may have a shorter lifespan than the code would 22797 indicate and may never be placed in memory. 22798 22799 * On some rare x86 targets, `setjmp' doesn't save the registers 22800 in all circumstances. In those cases, GCC doesn't allocate 22801 any variables in registers unless they are marked `register'. 22802 22803 22804 * `The extent to which suggestions made by using the inline function 22805 specifier are effective (C99 and C11 6.7.4).' 22806 22807 GCC will not inline any functions if the `-fno-inline' option is 22808 used or if `-O0' is used. Otherwise, GCC may still be unable to 22809 inline a function for many reasons; the `-Winline' option may be 22810 used to determine if a function has not been inlined and why not. 22811 22812 22813 22814File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 22815 228164.9 Structures, Unions, Enumerations, and Bit-Fields 22817==================================================== 22818 22819 * `A member of a union object is accessed using a member of a 22820 different type (C90 6.3.2.3).' 22821 22822 The relevant bytes of the representation of the object are treated 22823 as an object of the type used for the access. *Note 22824 Type-punning::. This may be a trap representation. 22825 22826 * `Whether a "plain" `int' bit-field is treated as a `signed int' 22827 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90 22828 6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).' 22829 22830 By default it is treated as `signed int' but this may be changed 22831 by the `-funsigned-bitfields' option. 22832 22833 * `Allowable bit-field types other than `_Bool', `signed int', and 22834 `unsigned int' (C99 and C11 6.7.2.1).' 22835 22836 Other integer types, such as `long int', and enumerated types are 22837 permitted even in strictly conforming mode. 22838 22839 * `Whether atomic types are permitted for bit-fields (C11 6.7.2.1).' 22840 22841 Atomic types are not permitted for bit-fields. 22842 22843 * `Whether a bit-field can straddle a storage-unit boundary (C90 22844 6.5.2.1, C99 and C11 6.7.2.1).' 22845 22846 Determined by ABI. 22847 22848 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1, 22849 C99 and C11 6.7.2.1).' 22850 22851 Determined by ABI. 22852 22853 * `The alignment of non-bit-field members of structures (C90 22854 6.5.2.1, C99 and C11 6.7.2.1).' 22855 22856 Determined by ABI. 22857 22858 * `The integer type compatible with each enumerated type (C90 22859 6.5.2.2, C99 and C11 6.7.2.2).' 22860 22861 Normally, the type is `unsigned int' if there are no negative 22862 values in the enumeration, otherwise `int'. If `-fshort-enums' is 22863 specified, then if there are negative values it is the first of 22864 `signed char', `short' and `int' that can represent all the 22865 values, otherwise it is the first of `unsigned char', `unsigned 22866 short' and `unsigned int' that can represent all the values. 22867 22868 On some targets, `-fshort-enums' is the default; this is 22869 determined by the ABI. 22870 22871 22872 22873File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 22874 228754.10 Qualifiers 22876=============== 22877 22878 * `What constitutes an access to an object that has 22879 volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).' 22880 22881 Such an object is normally accessed by pointers and used for 22882 accessing hardware. In most expressions, it is intuitively 22883 obvious what is a read and what is a write. For example 22884 22885 volatile int *dst = SOMEVALUE; 22886 volatile int *src = SOMEOTHERVALUE; 22887 *dst = *src; 22888 22889 will cause a read of the volatile object pointed to by SRC and 22890 store the value into the volatile object pointed to by DST. There 22891 is no guarantee that these reads and writes are atomic, especially 22892 for objects larger than `int'. 22893 22894 However, if the volatile storage is not being modified, and the 22895 value of the volatile storage is not used, then the situation is 22896 less obvious. For example 22897 22898 volatile int *src = SOMEVALUE; 22899 *src; 22900 22901 According to the C standard, such an expression is an rvalue whose 22902 type is the unqualified version of its original type, i.e. `int'. 22903 Whether GCC interprets this as a read of the volatile object being 22904 pointed to or only as a request to evaluate the expression for its 22905 side-effects depends on this type. 22906 22907 If it is a scalar type, or on most targets an aggregate type whose 22908 only member object is of a scalar type, or a union type whose 22909 member objects are of scalar types, the expression is interpreted 22910 by GCC as a read of the volatile object; in the other cases, the 22911 expression is only evaluated for its side-effects. 22912 22913 22914 22915File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 22916 229174.11 Declarators 22918================ 22919 22920 * `The maximum number of declarators that may modify an arithmetic, 22921 structure or union type (C90 6.5.4).' 22922 22923 GCC is only limited by available memory. 22924 22925 22926 22927File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 22928 229294.12 Statements 22930=============== 22931 22932 * `The maximum number of `case' values in a `switch' statement (C90 22933 6.6.4.2).' 22934 22935 GCC is only limited by available memory. 22936 22937 22938 22939File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 22940 229414.13 Preprocessing Directives 22942============================= 22943 22944*Note Implementation-defined behavior: (cpp)Implementation-defined 22945behavior, for details of these aspects of implementation-defined 22946behavior. 22947 22948 * `The locations within `#pragma' directives where header name 22949 preprocessing tokens are recognized (C11 6.4, C11 6.4.7).' 22950 22951 * `How sequences in both forms of header names are mapped to headers 22952 or external source file names (C90 6.1.7, C99 and C11 6.4.7).' 22953 22954 * `Whether the value of a character constant in a constant expression 22955 that controls conditional inclusion matches the value of the same 22956 character constant in the execution character set (C90 6.8.1, C99 22957 and C11 6.10.1).' 22958 22959 * `Whether the value of a single-character character constant in a 22960 constant expression that controls conditional inclusion may have a 22961 negative value (C90 6.8.1, C99 and C11 6.10.1).' 22962 22963 * `The places that are searched for an included `<>' delimited 22964 header, and how the places are specified or the header is 22965 identified (C90 6.8.2, C99 and C11 6.10.2).' 22966 22967 * `How the named source file is searched for in an included `""' 22968 delimited header (C90 6.8.2, C99 and C11 6.10.2).' 22969 22970 * `The method by which preprocessing tokens (possibly resulting from 22971 macro expansion) in a `#include' directive are combined into a 22972 header name (C90 6.8.2, C99 and C11 6.10.2).' 22973 22974 * `The nesting limit for `#include' processing (C90 6.8.2, C99 and 22975 C11 6.10.2).' 22976 22977 * `Whether the `#' operator inserts a `\' character before the `\' 22978 character that begins a universal character name in a character 22979 constant or string literal (C99 and C11 6.10.3.2).' 22980 22981 * `The behavior on each recognized non-`STDC #pragma' directive (C90 22982 6.8.6, C99 and C11 6.10.6).' 22983 22984 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by 22985 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 22986 details of target-specific pragmas. 22987 22988 * `The definitions for `__DATE__' and `__TIME__' when respectively, 22989 the date and time of translation are not available (C90 6.8.8, C99 22990 6.10.8, C11 6.10.8.1).' 22991 22992 22993 22994File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 22995 229964.14 Library Functions 22997====================== 22998 22999The behavior of most of these points are dependent on the implementation 23000of the C library, and are not defined by GCC itself. 23001 23002 * `The null pointer constant to which the macro `NULL' expands (C90 23003 7.1.6, C99 7.17, C11 7.19).' 23004 23005 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not 23006 provide the other headers which define `NULL' and some library 23007 implementations may use other definitions in those headers. 23008 23009 23010 23011File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 23012 230134.15 Architecture 23014================= 23015 23016 * `The values or expressions assigned to the macros specified in the 23017 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90, C99 and 23018 C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).' 23019 23020 Determined by ABI. 23021 23022 * `The result of attempting to indirectly access an object with 23023 automatic or thread storage duration from a thread other than the 23024 one with which it is associated (C11 6.2.4).' 23025 23026 Such accesses are supported, subject to the same requirements for 23027 synchronization for concurrent accesses as for concurrent accesses 23028 to any object. 23029 23030 * `The number, order, and encoding of bytes in any object (when not 23031 explicitly specified in this International Standard) (C99 and C11 23032 6.2.6.1).' 23033 23034 Determined by ABI. 23035 23036 * `Whether any extended alignments are supported and the contexts in 23037 which they are supported (C11 6.2.8).' 23038 23039 Extended alignments up to 2^28 (bytes) are supported for objects 23040 of automatic storage duration. Alignments supported for objects 23041 of static and thread storage duration are determined by the ABI. 23042 23043 * `Valid alignment values other than those returned by an _Alignof 23044 expression for fundamental types, if any (C11 6.2.8).' 23045 23046 Valid alignments are powers of 2 up to and including 2^28. 23047 23048 * `The value of the result of the `sizeof' and `_Alignof' operators 23049 (C90 6.3.3.4, C99 and C11 6.5.3.4).' 23050 23051 Determined by ABI. 23052 23053 23054 23055File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 23056 230574.16 Locale-Specific Behavior 23058============================= 23059 23060The behavior of these points are dependent on the implementation of the 23061C library, and are not defined by GCC itself. 23062 23063 23064File: gcc.info, Node: C++ Implementation, Next: C Extensions, Prev: C Implementation, Up: Top 23065 230665 C++ Implementation-Defined Behavior 23067************************************* 23068 23069A conforming implementation of ISO C++ is required to document its 23070choice of behavior in each of the areas that are designated 23071"implementation defined". The following lists all such areas, along 23072with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC 2307314882:2003 standards. Some areas are only implementation-defined in 23074one version of the standard. 23075 23076 Some choices depend on the externally determined ABI for the platform 23077(including standard character encodings) which GCC follows; these are 23078listed as "determined by ABI" below. *Note Binary Compatibility: 23079Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 23080are documented in the preprocessor manual. *Note 23081Implementation-defined behavior: (cpp)Implementation-defined behavior. 23082Some choices are documented in the corresponding document for the C 23083language. *Note C Implementation::. Some choices are made by the 23084library and operating system (or other environment when compiling for a 23085freestanding environment); refer to their documentation for details. 23086 23087* Menu: 23088 23089* Conditionally-supported behavior:: 23090* Exception handling:: 23091 23092 23093File: gcc.info, Node: Conditionally-supported behavior, Next: Exception handling, Up: C++ Implementation 23094 230955.1 Conditionally-Supported Behavior 23096==================================== 23097 23098`Each implementation shall include documentation that identifies all 23099conditionally-supported constructs that it does not support (C++0x 231001.4).' 23101 23102 * `Whether an argument of class type with a non-trivial copy 23103 constructor or destructor can be passed to ... (C++0x 5.2.2).' 23104 23105 Such argument passing is supported, using the same 23106 pass-by-invisible-reference approach used for normal function 23107 arguments of such types. 23108 23109 23110 23111File: gcc.info, Node: Exception handling, Prev: Conditionally-supported behavior, Up: C++ Implementation 23112 231135.2 Exception Handling 23114====================== 23115 23116 * `In the situation where no matching handler is found, it is 23117 implementation-defined whether or not the stack is unwound before 23118 std::terminate() is called (C++98 15.5.1).' 23119 23120 The stack is not unwound before std::terminate is called. 23121 23122 23123 23124File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C++ Implementation, Up: Top 23125 231266 Extensions to the C Language Family 23127************************************* 23128 23129GNU C provides several language features not found in ISO standard C. 23130(The `-pedantic' option directs GCC to print a warning message if any 23131of these features is used.) To test for the availability of these 23132features in conditional compilation, check for a predefined macro 23133`__GNUC__', which is always defined under GCC. 23134 23135 These extensions are available in C and Objective-C. Most of them are 23136also available in C++. *Note Extensions to the C++ Language: C++ 23137Extensions, for extensions that apply _only_ to C++. 23138 23139 Some features that are in ISO C99 but not C90 or C++ are also, as 23140extensions, accepted by GCC in C90 mode and in C++. 23141 23142* Menu: 23143 23144* Statement Exprs:: Putting statements and declarations inside expressions. 23145* Local Labels:: Labels local to a block. 23146* Labels as Values:: Getting pointers to labels, and computed gotos. 23147* Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 23148* Constructing Calls:: Dispatching a call to another function. 23149* Typeof:: `typeof': referring to the type of an expression. 23150* Conditionals:: Omitting the middle operand of a `?:' expression. 23151* __int128:: 128-bit integers---`__int128'. 23152* Long Long:: Double-word integers---`long long int'. 23153* Complex:: Data types for complex numbers. 23154* Floating Types:: Additional Floating Types. 23155* Half-Precision:: Half-Precision Floating Point. 23156* Decimal Float:: Decimal Floating Types. 23157* Hex Floats:: Hexadecimal floating-point constants. 23158* Fixed-Point:: Fixed-Point Types. 23159* Named Address Spaces::Named address spaces. 23160* Zero Length:: Zero-length arrays. 23161* Empty Structures:: Structures with no members. 23162* Variable Length:: Arrays whose length is computed at run time. 23163* Variadic Macros:: Macros with a variable number of arguments. 23164* Escaped Newlines:: Slightly looser rules for escaped newlines. 23165* Subscripting:: Any array can be subscripted, even if not an lvalue. 23166* Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 23167* Pointers to Arrays:: Pointers to arrays with qualifiers work as expected. 23168* Initializers:: Non-constant initializers. 23169* Compound Literals:: Compound literals give structures, unions 23170 or arrays as values. 23171* Designated Inits:: Labeling elements of initializers. 23172* Case Ranges:: `case 1 ... 9' and such. 23173* Cast to Union:: Casting to union type from any member of the union. 23174* Mixed Declarations:: Mixing declarations and code. 23175* Function Attributes:: Declaring that functions have no side effects, 23176 or that they can never return. 23177* Label Attributes:: Specifying attributes on labels. 23178* Attribute Syntax:: Formal syntax for attributes. 23179* Function Prototypes:: Prototype declarations and old-style definitions. 23180* C++ Comments:: C++ comments are recognized. 23181* Dollar Signs:: Dollar sign is allowed in identifiers. 23182* Character Escapes:: `\e' stands for the character <ESC>. 23183* Variable Attributes:: Specifying attributes of variables. 23184* Type Attributes:: Specifying attributes of types. 23185* Alignment:: Inquiring about the alignment of a type or variable. 23186* Inline:: Defining inline functions (as fast as macros). 23187* Volatiles:: What constitutes an access to a volatile object. 23188* Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler. 23189* Alternate Keywords:: `__const__', `__asm__', etc., for header files. 23190* Incomplete Enums:: `enum foo;', with details to follow. 23191* Function Names:: Printable strings which are the name of the current 23192 function. 23193* Return Address:: Getting the return or frame address of a function. 23194* Vector Extensions:: Using vector instructions through built-in functions. 23195* Offsetof:: Special syntax for implementing `offsetof'. 23196* __sync Builtins:: Legacy built-in functions for atomic memory access. 23197* __atomic Builtins:: Atomic built-in functions with memory model. 23198* Integer Overflow Builtins:: Built-in functions to perform arithmetics and 23199 arithmetic overflow checking. 23200* x86 specific memory model extensions for transactional memory:: x86 memory models. 23201* Object Size Checking:: Built-in functions for limited buffer overflow 23202 checking. 23203* Pointer Bounds Checker builtins:: Built-in functions for Pointer Bounds Checker. 23204* Cilk Plus Builtins:: Built-in functions for the Cilk Plus language extension. 23205* Other Builtins:: Other built-in functions. 23206* Target Builtins:: Built-in functions specific to particular targets. 23207* Target Format Checks:: Format checks specific to particular targets. 23208* Pragmas:: Pragmas accepted by GCC. 23209* Unnamed Fields:: Unnamed struct/union fields within structs/unions. 23210* Thread-Local:: Per-thread variables. 23211* Binary constants:: Binary constants using the `0b' prefix. 23212 23213 23214File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 23215 232166.1 Statements and Declarations in Expressions 23217============================================== 23218 23219A compound statement enclosed in parentheses may appear as an expression 23220in GNU C. This allows you to use loops, switches, and local variables 23221within an expression. 23222 23223 Recall that a compound statement is a sequence of statements surrounded 23224by braces; in this construct, parentheses go around the braces. For 23225example: 23226 23227 ({ int y = foo (); int z; 23228 if (y > 0) z = y; 23229 else z = - y; 23230 z; }) 23231 23232is a valid (though slightly more complex than necessary) expression for 23233the absolute value of `foo ()'. 23234 23235 The last thing in the compound statement should be an expression 23236followed by a semicolon; the value of this subexpression serves as the 23237value of the entire construct. (If you use some other kind of statement 23238last within the braces, the construct has type `void', and thus 23239effectively no value.) 23240 23241 This feature is especially useful in making macro definitions "safe" 23242(so that they evaluate each operand exactly once). For example, the 23243"maximum" function is commonly defined as a macro in standard C as 23244follows: 23245 23246 #define max(a,b) ((a) > (b) ? (a) : (b)) 23247 23248But this definition computes either A or B twice, with bad results if 23249the operand has side effects. In GNU C, if you know the type of the 23250operands (here taken as `int'), you can define the macro safely as 23251follows: 23252 23253 #define maxint(a,b) \ 23254 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 23255 23256 Embedded statements are not allowed in constant expressions, such as 23257the value of an enumeration constant, the width of a bit-field, or the 23258initial value of a static variable. 23259 23260 If you don't know the type of the operand, you can still do this, but 23261you must use `typeof' or `__auto_type' (*note Typeof::). 23262 23263 In G++, the result value of a statement expression undergoes array and 23264function pointer decay, and is returned by value to the enclosing 23265expression. For instance, if `A' is a class, then 23266 23267 A a; 23268 23269 ({a;}).Foo () 23270 23271constructs a temporary `A' object to hold the result of the statement 23272expression, and that is used to invoke `Foo'. Therefore the `this' 23273pointer observed by `Foo' is not the address of `a'. 23274 23275 In a statement expression, any temporaries created within a statement 23276are destroyed at that statement's end. This makes statement 23277expressions inside macros slightly different from function calls. In 23278the latter case temporaries introduced during argument evaluation are 23279destroyed at the end of the statement that includes the function call. 23280In the statement expression case they are destroyed during the 23281statement expression. For instance, 23282 23283 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 23284 template<typename T> T function(T a) { T b = a; return b + 3; } 23285 23286 void foo () 23287 { 23288 macro (X ()); 23289 function (X ()); 23290 } 23291 23292has different places where temporaries are destroyed. For the `macro' 23293case, the temporary `X' is destroyed just after the initialization of 23294`b'. In the `function' case that temporary is destroyed when the 23295function returns. 23296 23297 These considerations mean that it is probably a bad idea to use 23298statement expressions of this form in header files that are designed to 23299work with C++. (Note that some versions of the GNU C Library contained 23300header files using statement expressions that lead to precisely this 23301bug.) 23302 23303 Jumping into a statement expression with `goto' or using a `switch' 23304statement outside the statement expression with a `case' or `default' 23305label inside the statement expression is not permitted. Jumping into a 23306statement expression with a computed `goto' (*note Labels as Values::) 23307has undefined behavior. Jumping out of a statement expression is 23308permitted, but if the statement expression is part of a larger 23309expression then it is unspecified which other subexpressions of that 23310expression have been evaluated except where the language definition 23311requires certain subexpressions to be evaluated before or after the 23312statement expression. In any case, as with a function call, the 23313evaluation of a statement expression is not interleaved with the 23314evaluation of other parts of the containing expression. For example, 23315 23316 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 23317 23318calls `foo' and `bar1' and does not call `baz' but may or may not call 23319`bar2'. If `bar2' is called, it is called after `foo' and before 23320`bar1'. 23321 23322 23323File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 23324 233256.2 Locally Declared Labels 23326=========================== 23327 23328GCC allows you to declare "local labels" in any nested block scope. A 23329local label is just like an ordinary label, but you can only reference 23330it (with a `goto' statement, or by taking its address) within the block 23331in which it is declared. 23332 23333 A local label declaration looks like this: 23334 23335 __label__ LABEL; 23336 23337or 23338 23339 __label__ LABEL1, LABEL2, /* ... */; 23340 23341 Local label declarations must come at the beginning of the block, 23342before any ordinary declarations or statements. 23343 23344 The label declaration defines the label _name_, but does not define 23345the label itself. You must do this in the usual way, with `LABEL:', 23346within the statements of the statement expression. 23347 23348 The local label feature is useful for complex macros. If a macro 23349contains nested loops, a `goto' can be useful for breaking out of them. 23350However, an ordinary label whose scope is the whole function cannot be 23351used: if the macro can be expanded several times in one function, the 23352label is multiply defined in that function. A local label avoids this 23353problem. For example: 23354 23355 #define SEARCH(value, array, target) \ 23356 do { \ 23357 __label__ found; \ 23358 typeof (target) _SEARCH_target = (target); \ 23359 typeof (*(array)) *_SEARCH_array = (array); \ 23360 int i, j; \ 23361 int value; \ 23362 for (i = 0; i < max; i++) \ 23363 for (j = 0; j < max; j++) \ 23364 if (_SEARCH_array[i][j] == _SEARCH_target) \ 23365 { (value) = i; goto found; } \ 23366 (value) = -1; \ 23367 found:; \ 23368 } while (0) 23369 23370 This could also be written using a statement expression: 23371 23372 #define SEARCH(array, target) \ 23373 ({ \ 23374 __label__ found; \ 23375 typeof (target) _SEARCH_target = (target); \ 23376 typeof (*(array)) *_SEARCH_array = (array); \ 23377 int i, j; \ 23378 int value; \ 23379 for (i = 0; i < max; i++) \ 23380 for (j = 0; j < max; j++) \ 23381 if (_SEARCH_array[i][j] == _SEARCH_target) \ 23382 { value = i; goto found; } \ 23383 value = -1; \ 23384 found: \ 23385 value; \ 23386 }) 23387 23388 Local label declarations also make the labels they declare visible to 23389nested functions, if there are any. *Note Nested Functions::, for 23390details. 23391 23392 23393File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 23394 233956.3 Labels as Values 23396==================== 23397 23398You can get the address of a label defined in the current function (or 23399a containing function) with the unary operator `&&'. The value has 23400type `void *'. This value is a constant and can be used wherever a 23401constant of that type is valid. For example: 23402 23403 void *ptr; 23404 /* ... */ 23405 ptr = &&foo; 23406 23407 To use these values, you need to be able to jump to one. This is done 23408with the computed goto statement(1), `goto *EXP;'. For example, 23409 23410 goto *ptr; 23411 23412Any expression of type `void *' is allowed. 23413 23414 One way of using these constants is in initializing a static array that 23415serves as a jump table: 23416 23417 static void *array[] = { &&foo, &&bar, &&hack }; 23418 23419Then you can select a label with indexing, like this: 23420 23421 goto *array[i]; 23422 23423Note that this does not check whether the subscript is in bounds--array 23424indexing in C never does that. 23425 23426 Such an array of label values serves a purpose much like that of the 23427`switch' statement. The `switch' statement is cleaner, so use that 23428rather than an array unless the problem does not fit a `switch' 23429statement very well. 23430 23431 Another use of label values is in an interpreter for threaded code. 23432The labels within the interpreter function can be stored in the 23433threaded code for super-fast dispatching. 23434 23435 You may not use this mechanism to jump to code in a different function. 23436If you do that, totally unpredictable things happen. The best way to 23437avoid this is to store the label address only in automatic variables and 23438never pass it as an argument. 23439 23440 An alternate way to write the above example is 23441 23442 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 23443 &&hack - &&foo }; 23444 goto *(&&foo + array[i]); 23445 23446This is more friendly to code living in shared libraries, as it reduces 23447the number of dynamic relocations that are needed, and by consequence, 23448allows the data to be read-only. This alternative with label 23449differences is not supported for the AVR target, please use the first 23450approach for AVR programs. 23451 23452 The `&&foo' expressions for the same label might have different values 23453if the containing function is inlined or cloned. If a program relies 23454on them being always the same, 23455`__attribute__((__noinline__,__noclone__))' should be used to prevent 23456inlining and cloning. If `&&foo' is used in a static variable 23457initializer, inlining and cloning is forbidden. 23458 23459 ---------- Footnotes ---------- 23460 23461 (1) The analogous feature in Fortran is called an assigned goto, but 23462that name seems inappropriate in C, where one can do more than simply 23463store label addresses in label variables. 23464 23465 23466File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 23467 234686.4 Nested Functions 23469==================== 23470 23471A "nested function" is a function defined inside another function. 23472Nested functions are supported as an extension in GNU C, but are not 23473supported by GNU C++. 23474 23475 The nested function's name is local to the block where it is defined. 23476For example, here we define a nested function named `square', and call 23477it twice: 23478 23479 foo (double a, double b) 23480 { 23481 double square (double z) { return z * z; } 23482 23483 return square (a) + square (b); 23484 } 23485 23486 The nested function can access all the variables of the containing 23487function that are visible at the point of its definition. This is 23488called "lexical scoping". For example, here we show a nested function 23489which uses an inherited variable named `offset': 23490 23491 bar (int *array, int offset, int size) 23492 { 23493 int access (int *array, int index) 23494 { return array[index + offset]; } 23495 int i; 23496 /* ... */ 23497 for (i = 0; i < size; i++) 23498 /* ... */ access (array, i) /* ... */ 23499 } 23500 23501 Nested function definitions are permitted within functions in the 23502places where variable definitions are allowed; that is, in any block, 23503mixed with the other declarations and statements in the block. 23504 23505 It is possible to call the nested function from outside the scope of 23506its name by storing its address or passing the address to another 23507function: 23508 23509 hack (int *array, int size) 23510 { 23511 void store (int index, int value) 23512 { array[index] = value; } 23513 23514 intermediate (store, size); 23515 } 23516 23517 Here, the function `intermediate' receives the address of `store' as 23518an argument. If `intermediate' calls `store', the arguments given to 23519`store' are used to store into `array'. But this technique works only 23520so long as the containing function (`hack', in this example) does not 23521exit. 23522 23523 If you try to call the nested function through its address after the 23524containing function exits, all hell breaks loose. If you try to call 23525it after a containing scope level exits, and if it refers to some of 23526the variables that are no longer in scope, you may be lucky, but it's 23527not wise to take the risk. If, however, the nested function does not 23528refer to anything that has gone out of scope, you should be safe. 23529 23530 GCC implements taking the address of a nested function using a 23531technique called "trampolines". This technique was described in 23532`Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference 23533Proceedings, October 17-21, 1988). 23534 23535 A nested function can jump to a label inherited from a containing 23536function, provided the label is explicitly declared in the containing 23537function (*note Local Labels::). Such a jump returns instantly to the 23538containing function, exiting the nested function that did the `goto' 23539and any intermediate functions as well. Here is an example: 23540 23541 bar (int *array, int offset, int size) 23542 { 23543 __label__ failure; 23544 int access (int *array, int index) 23545 { 23546 if (index > size) 23547 goto failure; 23548 return array[index + offset]; 23549 } 23550 int i; 23551 /* ... */ 23552 for (i = 0; i < size; i++) 23553 /* ... */ access (array, i) /* ... */ 23554 /* ... */ 23555 return 0; 23556 23557 /* Control comes here from `access' 23558 if it detects an error. */ 23559 failure: 23560 return -1; 23561 } 23562 23563 A nested function always has no linkage. Declaring one with `extern' 23564or `static' is erroneous. If you need to declare the nested function 23565before its definition, use `auto' (which is otherwise meaningless for 23566function declarations). 23567 23568 bar (int *array, int offset, int size) 23569 { 23570 __label__ failure; 23571 auto int access (int *, int); 23572 /* ... */ 23573 int access (int *array, int index) 23574 { 23575 if (index > size) 23576 goto failure; 23577 return array[index + offset]; 23578 } 23579 /* ... */ 23580 } 23581 23582 23583File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 23584 235856.5 Constructing Function Calls 23586=============================== 23587 23588Using the built-in functions described below, you can record the 23589arguments a function received, and call another function with the same 23590arguments, without knowing the number or types of the arguments. 23591 23592 You can also record the return value of that function call, and later 23593return that value, without knowing what data type the function tried to 23594return (as long as your caller expects that data type). 23595 23596 However, these built-in functions may interact badly with some 23597sophisticated features or other extensions of the language. It is, 23598therefore, not recommended to use them outside very simple functions 23599acting as mere forwarders for their arguments. 23600 23601 -- Built-in Function: void * __builtin_apply_args () 23602 This built-in function returns a pointer to data describing how to 23603 perform a call with the same arguments as are passed to the 23604 current function. 23605 23606 The function saves the arg pointer register, structure value 23607 address, and all registers that might be used to pass arguments to 23608 a function into a block of memory allocated on the stack. Then it 23609 returns the address of that block. 23610 23611 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 23612 *ARGUMENTS, size_t SIZE) 23613 This built-in function invokes FUNCTION with a copy of the 23614 parameters described by ARGUMENTS and SIZE. 23615 23616 The value of ARGUMENTS should be the value returned by 23617 `__builtin_apply_args'. The argument SIZE specifies the size of 23618 the stack argument data, in bytes. 23619 23620 This function returns a pointer to data describing how to return 23621 whatever value is returned by FUNCTION. The data is saved in a 23622 block of memory allocated on the stack. 23623 23624 It is not always simple to compute the proper value for SIZE. The 23625 value is used by `__builtin_apply' to compute the amount of data 23626 that should be pushed on the stack and copied from the incoming 23627 argument area. 23628 23629 -- Built-in Function: void __builtin_return (void *RESULT) 23630 This built-in function returns the value described by RESULT from 23631 the containing function. You should specify, for RESULT, a value 23632 returned by `__builtin_apply'. 23633 23634 -- Built-in Function: __builtin_va_arg_pack () 23635 This built-in function represents all anonymous arguments of an 23636 inline function. It can be used only in inline functions that are 23637 always inlined, never compiled as a separate function, such as 23638 those using `__attribute__ ((__always_inline__))' or 23639 `__attribute__ ((__gnu_inline__))' extern inline functions. It 23640 must be only passed as last argument to some other function with 23641 variable arguments. This is useful for writing small wrapper 23642 inlines for variable argument functions, when using preprocessor 23643 macros is undesirable. For example: 23644 extern int myprintf (FILE *f, const char *format, ...); 23645 extern inline __attribute__ ((__gnu_inline__)) int 23646 myprintf (FILE *f, const char *format, ...) 23647 { 23648 int r = fprintf (f, "myprintf: "); 23649 if (r < 0) 23650 return r; 23651 int s = fprintf (f, format, __builtin_va_arg_pack ()); 23652 if (s < 0) 23653 return s; 23654 return r + s; 23655 } 23656 23657 -- Built-in Function: size_t __builtin_va_arg_pack_len () 23658 This built-in function returns the number of anonymous arguments of 23659 an inline function. It can be used only in inline functions that 23660 are always inlined, never compiled as a separate function, such as 23661 those using `__attribute__ ((__always_inline__))' or 23662 `__attribute__ ((__gnu_inline__))' extern inline functions. For 23663 example following does link- or run-time checking of open 23664 arguments for optimized code: 23665 #ifdef __OPTIMIZE__ 23666 extern inline __attribute__((__gnu_inline__)) int 23667 myopen (const char *path, int oflag, ...) 23668 { 23669 if (__builtin_va_arg_pack_len () > 1) 23670 warn_open_too_many_arguments (); 23671 23672 if (__builtin_constant_p (oflag)) 23673 { 23674 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1) 23675 { 23676 warn_open_missing_mode (); 23677 return __open_2 (path, oflag); 23678 } 23679 return open (path, oflag, __builtin_va_arg_pack ()); 23680 } 23681 23682 if (__builtin_va_arg_pack_len () < 1) 23683 return __open_2 (path, oflag); 23684 23685 return open (path, oflag, __builtin_va_arg_pack ()); 23686 } 23687 #endif 23688 23689 23690File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 23691 236926.6 Referring to a Type with `typeof' 23693===================================== 23694 23695Another way to refer to the type of an expression is with `typeof'. 23696The syntax of using of this keyword looks like `sizeof', but the 23697construct acts semantically like a type name defined with `typedef'. 23698 23699 There are two ways of writing the argument to `typeof': with an 23700expression or with a type. Here is an example with an expression: 23701 23702 typeof (x[0](1)) 23703 23704This assumes that `x' is an array of pointers to functions; the type 23705described is that of the values of the functions. 23706 23707 Here is an example with a typename as the argument: 23708 23709 typeof (int *) 23710 23711Here the type described is that of pointers to `int'. 23712 23713 If you are writing a header file that must work when included in ISO C 23714programs, write `__typeof__' instead of `typeof'. *Note Alternate 23715Keywords::. 23716 23717 A `typeof' construct can be used anywhere a typedef name can be used. 23718For example, you can use it in a declaration, in a cast, or inside of 23719`sizeof' or `typeof'. 23720 23721 The operand of `typeof' is evaluated for its side effects if and only 23722if it is an expression of variably modified type or the name of such a 23723type. 23724 23725 `typeof' is often useful in conjunction with statement expressions 23726(*note Statement Exprs::). Here is how the two together can be used to 23727define a safe "maximum" macro which operates on any arithmetic type and 23728evaluates each of its arguments exactly once: 23729 23730 #define max(a,b) \ 23731 ({ typeof (a) _a = (a); \ 23732 typeof (b) _b = (b); \ 23733 _a > _b ? _a : _b; }) 23734 23735 The reason for using names that start with underscores for the local 23736variables is to avoid conflicts with variable names that occur within 23737the expressions that are substituted for `a' and `b'. Eventually we 23738hope to design a new form of declaration syntax that allows you to 23739declare variables whose scopes start only after their initializers; 23740this will be a more reliable way to prevent such conflicts. 23741 23742Some more examples of the use of `typeof': 23743 23744 * This declares `y' with the type of what `x' points to. 23745 23746 typeof (*x) y; 23747 23748 * This declares `y' as an array of such values. 23749 23750 typeof (*x) y[4]; 23751 23752 * This declares `y' as an array of pointers to characters: 23753 23754 typeof (typeof (char *)[4]) y; 23755 23756 It is equivalent to the following traditional C declaration: 23757 23758 char *y[4]; 23759 23760 To see the meaning of the declaration using `typeof', and why it 23761 might be a useful way to write, rewrite it with these macros: 23762 23763 #define pointer(T) typeof(T *) 23764 #define array(T, N) typeof(T [N]) 23765 23766 Now the declaration can be rewritten this way: 23767 23768 array (pointer (char), 4) y; 23769 23770 Thus, `array (pointer (char), 4)' is the type of arrays of 4 23771 pointers to `char'. 23772 23773 In GNU C, but not GNU C++, you may also declare the type of a variable 23774as `__auto_type'. In that case, the declaration must declare only one 23775variable, whose declarator must just be an identifier, the declaration 23776must be initialized, and the type of the variable is determined by the 23777initializer; the name of the variable is not in scope until after the 23778initializer. (In C++, you should use C++11 `auto' for this purpose.) 23779Using `__auto_type', the "maximum" macro above could be written as: 23780 23781 #define max(a,b) \ 23782 ({ __auto_type _a = (a); \ 23783 __auto_type _b = (b); \ 23784 _a > _b ? _a : _b; }) 23785 23786 Using `__auto_type' instead of `typeof' has two advantages: 23787 23788 * Each argument to the macro appears only once in the expansion of 23789 the macro. This prevents the size of the macro expansion growing 23790 exponentially when calls to such macros are nested inside 23791 arguments of such macros. 23792 23793 * If the argument to the macro has variably modified type, it is 23794 evaluated only once when using `__auto_type', but twice if 23795 `typeof' is used. 23796 23797 23798File: gcc.info, Node: Conditionals, Next: __int128, Prev: Typeof, Up: C Extensions 23799 238006.7 Conditionals with Omitted Operands 23801====================================== 23802 23803The middle operand in a conditional expression may be omitted. Then if 23804the first operand is nonzero, its value is the value of the conditional 23805expression. 23806 23807 Therefore, the expression 23808 23809 x ? : y 23810 23811has the value of `x' if that is nonzero; otherwise, the value of `y'. 23812 23813 This example is perfectly equivalent to 23814 23815 x ? x : y 23816 23817In this simple case, the ability to omit the middle operand is not 23818especially useful. When it becomes useful is when the first operand 23819does, or may (if it is a macro argument), contain a side effect. Then 23820repeating the operand in the middle would perform the side effect 23821twice. Omitting the middle operand uses the value already computed 23822without the undesirable effects of recomputing it. 23823 23824 23825File: gcc.info, Node: __int128, Next: Long Long, Prev: Conditionals, Up: C Extensions 23826 238276.8 128-bit Integers 23828==================== 23829 23830As an extension the integer scalar type `__int128' is supported for 23831targets which have an integer mode wide enough to hold 128 bits. 23832Simply write `__int128' for a signed 128-bit integer, or `unsigned 23833__int128' for an unsigned 128-bit integer. There is no support in GCC 23834for expressing an integer constant of type `__int128' for targets with 23835`long long' integer less than 128 bits wide. 23836 23837 23838File: gcc.info, Node: Long Long, Next: Complex, Prev: __int128, Up: C Extensions 23839 238406.9 Double-Word Integers 23841======================== 23842 23843ISO C99 supports data types for integers that are at least 64 bits wide, 23844and as an extension GCC supports them in C90 mode and in C++. Simply 23845write `long long int' for a signed integer, or `unsigned long long int' 23846for an unsigned integer. To make an integer constant of type `long 23847long int', add the suffix `LL' to the integer. To make an integer 23848constant of type `unsigned long long int', add the suffix `ULL' to the 23849integer. 23850 23851 You can use these types in arithmetic like any other integer types. 23852Addition, subtraction, and bitwise boolean operations on these types 23853are open-coded on all types of machines. Multiplication is open-coded 23854if the machine supports a fullword-to-doubleword widening multiply 23855instruction. Division and shifts are open-coded only on machines that 23856provide special support. The operations that are not open-coded use 23857special library routines that come with GCC. 23858 23859 There may be pitfalls when you use `long long' types for function 23860arguments without function prototypes. If a function expects type 23861`int' for its argument, and you pass a value of type `long long int', 23862confusion results because the caller and the subroutine disagree about 23863the number of bytes for the argument. Likewise, if the function 23864expects `long long int' and you pass `int'. The best way to avoid such 23865problems is to use prototypes. 23866 23867 23868File: gcc.info, Node: Complex, Next: Floating Types, Prev: Long Long, Up: C Extensions 23869 238706.10 Complex Numbers 23871==================== 23872 23873ISO C99 supports complex floating data types, and as an extension GCC 23874supports them in C90 mode and in C++. GCC also supports complex 23875integer data types which are not part of ISO C99. You can declare 23876complex types using the keyword `_Complex'. As an extension, the older 23877GNU keyword `__complex__' is also supported. 23878 23879 For example, `_Complex double x;' declares `x' as a variable whose 23880real part and imaginary part are both of type `double'. `_Complex 23881short int y;' declares `y' to have real and imaginary parts of type 23882`short int'; this is not likely to be useful, but it shows that the set 23883of complex types is complete. 23884 23885 To write a constant with a complex data type, use the suffix `i' or 23886`j' (either one; they are equivalent). For example, `2.5fi' has type 23887`_Complex float' and `3i' has type `_Complex int'. Such a constant 23888always has a pure imaginary value, but you can form any complex value 23889you like by adding one to a real constant. This is a GNU extension; if 23890you have an ISO C99 conforming C library (such as the GNU C Library), 23891and want to construct complex constants of floating type, you should 23892include `<complex.h>' and use the macros `I' or `_Complex_I' instead. 23893 23894 To extract the real part of a complex-valued expression EXP, write 23895`__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 23896part. This is a GNU extension; for values of floating type, you should 23897use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 23898`cimag' and `cimagl', declared in `<complex.h>' and also provided as 23899built-in functions by GCC. 23900 23901 The operator `~' performs complex conjugation when used on a value 23902with a complex type. This is a GNU extension; for values of floating 23903type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 23904declared in `<complex.h>' and also provided as built-in functions by 23905GCC. 23906 23907 GCC can allocate complex automatic variables in a noncontiguous 23908fashion; it's even possible for the real part to be in a register while 23909the imaginary part is on the stack (or vice versa). Only the DWARF 2 23910debug info format can represent this, so use of DWARF 2 is recommended. 23911If you are using the stabs debug info format, GCC describes a 23912noncontiguous complex variable as if it were two separate variables of 23913noncomplex type. If the variable's actual name is `foo', the two 23914fictitious variables are named `foo$real' and `foo$imag'. You can 23915examine and set these two fictitious variables with your debugger. 23916 23917 23918File: gcc.info, Node: Floating Types, Next: Half-Precision, Prev: Complex, Up: C Extensions 23919 239206.11 Additional Floating Types 23921============================== 23922 23923As an extension, GNU C supports additional floating types, `__float80' 23924and `__float128' to support 80-bit (`XFmode') and 128-bit (`TFmode') 23925floating types. Support for additional types includes the arithmetic 23926operators: add, subtract, multiply, divide; unary arithmetic operators; 23927relational operators; equality operators; and conversions to and from 23928integer and other floating types. Use a suffix `w' or `W' in a literal 23929constant of type `__float80' and `q' or `Q' for `_float128'. You can 23930declare complex types using the corresponding internal complex type, 23931`XCmode' for `__float80' type and `TCmode' for `__float128' type: 23932 23933 typedef _Complex float __attribute__((mode(TC))) _Complex128; 23934 typedef _Complex float __attribute__((mode(XC))) _Complex80; 23935 23936 Not all targets support additional floating-point types. `__float80' 23937and `__float128' types are supported on x86 and IA-64 targets. The 23938`__float128' type is supported on hppa HP-UX targets. 23939 23940 23941File: gcc.info, Node: Half-Precision, Next: Decimal Float, Prev: Floating Types, Up: C Extensions 23942 239436.12 Half-Precision Floating Point 23944================================== 23945 23946On ARM targets, GCC supports half-precision (16-bit) floating point via 23947the `__fp16' type. You must enable this type explicitly with the 23948`-mfp16-format' command-line option in order to use it. 23949 23950 ARM supports two incompatible representations for half-precision 23951floating-point values. You must choose one of the representations and 23952use it consistently in your program. 23953 23954 Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format. 23955This format can represent normalized values in the range of 2^-14 to 2395665504. There are 11 bits of significand precision, approximately 3 23957decimal digits. 23958 23959 Specifying `-mfp16-format=alternative' selects the ARM alternative 23960format. This representation is similar to the IEEE format, but does 23961not support infinities or NaNs. Instead, the range of exponents is 23962extended, so that this format can represent normalized values in the 23963range of 2^-14 to 131008. 23964 23965 The `__fp16' type is a storage format only. For purposes of 23966arithmetic and other operations, `__fp16' values in C or C++ 23967expressions are automatically promoted to `float'. In addition, you 23968cannot declare a function with a return value or parameters of type 23969`__fp16'. 23970 23971 Note that conversions from `double' to `__fp16' involve an 23972intermediate conversion to `float'. Because of rounding, this can 23973sometimes produce a different result than a direct conversion. 23974 23975 ARM provides hardware support for conversions between `__fp16' and 23976`float' values as an extension to VFP and NEON (Advanced SIMD). GCC 23977generates code using these hardware instructions if you compile with 23978options to select an FPU that provides them; for example, 23979`-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the 23980`-mfp16-format' option to select a half-precision format. 23981 23982 Language-level support for the `__fp16' data type is independent of 23983whether GCC generates code using hardware floating-point instructions. 23984In cases where hardware support is not specified, GCC implements 23985conversions between `__fp16' and `float' values as library calls. 23986 23987 23988File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Half-Precision, Up: C Extensions 23989 239906.13 Decimal Floating Types 23991=========================== 23992 23993As an extension, GNU C supports decimal floating types as defined in 23994the N1312 draft of ISO/IEC WDTR24732. Support for decimal floating 23995types in GCC will evolve as the draft technical report changes. 23996Calling conventions for any target might also change. Not all targets 23997support decimal floating types. 23998 23999 The decimal floating types are `_Decimal32', `_Decimal64', and 24000`_Decimal128'. They use a radix of ten, unlike the floating types 24001`float', `double', and `long double' whose radix is not specified by 24002the C standard but is usually two. 24003 24004 Support for decimal floating types includes the arithmetic operators 24005add, subtract, multiply, divide; unary arithmetic operators; relational 24006operators; equality operators; and conversions to and from integer and 24007other floating types. Use a suffix `df' or `DF' in a literal constant 24008of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL' 24009for `_Decimal128'. 24010 24011 GCC support of decimal float as specified by the draft technical report 24012is incomplete: 24013 24014 * When the value of a decimal floating type cannot be represented in 24015 the integer type to which it is being converted, the result is 24016 undefined rather than the result value specified by the draft 24017 technical report. 24018 24019 * GCC does not provide the C library functionality associated with 24020 `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which 24021 must come from a separate C library implementation. Because of 24022 this the GNU C compiler does not define macro `__STDC_DEC_FP__' to 24023 indicate that the implementation conforms to the technical report. 24024 24025 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by 24026the DWARF 2 debug information format. 24027 24028 24029File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions 24030 240316.14 Hex Floats 24032=============== 24033 24034ISO C99 supports floating-point numbers written not only in the usual 24035decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 24036written in hexadecimal format. As a GNU extension, GCC supports this 24037in C90 mode (except in some cases when strictly conforming) and in C++. 24038In that format the `0x' hex introducer and the `p' or `P' exponent 24039field are mandatory. The exponent is a decimal number that indicates 24040the power of 2 by which the significant part is multiplied. Thus 24041`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 24042is the same as `1.55e1'. 24043 24044 Unlike for floating-point numbers in the decimal notation the exponent 24045is always required in the hexadecimal notation. Otherwise the compiler 24046would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 24047could mean `1.0f' or `1.9375' since `f' is also the extension for 24048floating-point constants of type `float'. 24049 24050 24051File: gcc.info, Node: Fixed-Point, Next: Named Address Spaces, Prev: Hex Floats, Up: C Extensions 24052 240536.15 Fixed-Point Types 24054====================== 24055 24056As an extension, GNU C supports fixed-point types as defined in the 24057N1169 draft of ISO/IEC DTR 18037. Support for fixed-point types in GCC 24058will evolve as the draft technical report changes. Calling conventions 24059for any target might also change. Not all targets support fixed-point 24060types. 24061 24062 The fixed-point types are `short _Fract', `_Fract', `long _Fract', 24063`long long _Fract', `unsigned short _Fract', `unsigned _Fract', 24064`unsigned long _Fract', `unsigned long long _Fract', `_Sat short 24065_Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract', 24066`_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned 24067long _Fract', `_Sat unsigned long long _Fract', `short _Accum', 24068`_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum', 24069`unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum', 24070`_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long 24071_Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat 24072unsigned long _Accum', `_Sat unsigned long long _Accum'. 24073 24074 Fixed-point data values contain fractional and optional integral parts. 24075The format of fixed-point data varies and depends on the target machine. 24076 24077 Support for fixed-point types includes: 24078 * prefix and postfix increment and decrement operators (`++', `--') 24079 24080 * unary arithmetic operators (`+', `-', `!') 24081 24082 * binary arithmetic operators (`+', `-', `*', `/') 24083 24084 * binary shift operators (`<<', `>>') 24085 24086 * relational operators (`<', `<=', `>=', `>') 24087 24088 * equality operators (`==', `!=') 24089 24090 * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=') 24091 24092 * conversions to and from integer, floating-point, or fixed-point 24093 types 24094 24095 Use a suffix in a fixed-point literal constant: 24096 * `hr' or `HR' for `short _Fract' and `_Sat short _Fract' 24097 24098 * `r' or `R' for `_Fract' and `_Sat _Fract' 24099 24100 * `lr' or `LR' for `long _Fract' and `_Sat long _Fract' 24101 24102 * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract' 24103 24104 * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned 24105 short _Fract' 24106 24107 * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract' 24108 24109 * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long 24110 _Fract' 24111 24112 * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat 24113 unsigned long long _Fract' 24114 24115 * `hk' or `HK' for `short _Accum' and `_Sat short _Accum' 24116 24117 * `k' or `K' for `_Accum' and `_Sat _Accum' 24118 24119 * `lk' or `LK' for `long _Accum' and `_Sat long _Accum' 24120 24121 * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum' 24122 24123 * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned 24124 short _Accum' 24125 24126 * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum' 24127 24128 * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long 24129 _Accum' 24130 24131 * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat 24132 unsigned long long _Accum' 24133 24134 GCC support of fixed-point types as specified by the draft technical 24135report is incomplete: 24136 24137 * Pragmas to control overflow and rounding behaviors are not 24138 implemented. 24139 24140 Fixed-point types are supported by the DWARF 2 debug information 24141format. 24142 24143 24144File: gcc.info, Node: Named Address Spaces, Next: Zero Length, Prev: Fixed-Point, Up: C Extensions 24145 241466.16 Named Address Spaces 24147========================= 24148 24149As an extension, GNU C supports named address spaces as defined in the 24150N1275 draft of ISO/IEC DTR 18037. Support for named address spaces in 24151GCC will evolve as the draft technical report changes. Calling 24152conventions for any target might also change. At present, only the 24153AVR, SPU, M32C, and RL78 targets support address spaces other than the 24154generic address space. 24155 24156 Address space identifiers may be used exactly like any other C type 24157qualifier (e.g., `const' or `volatile'). See the N1275 document for 24158more details. 24159 241606.16.1 AVR Named Address Spaces 24161------------------------------- 24162 24163On the AVR target, there are several address spaces that can be used in 24164order to put read-only data into the flash memory and access that data 24165by means of the special instructions `LPM' or `ELPM' needed to read 24166from flash. 24167 24168 Per default, any data including read-only data is located in RAM (the 24169generic address space) so that non-generic address spaces are needed to 24170locate read-only data in flash memory _and_ to generate the right 24171instructions to access this data without using (inline) assembler code. 24172 24173`__flash' 24174 The `__flash' qualifier locates data in the `.progmem.data' 24175 section. Data is read using the `LPM' instruction. Pointers to 24176 this address space are 16 bits wide. 24177 24178`__flash1' 24179`__flash2' 24180`__flash3' 24181`__flash4' 24182`__flash5' 24183 These are 16-bit address spaces locating data in section 24184 `.progmemN.data' where N refers to address space `__flashN'. The 24185 compiler sets the `RAMPZ' segment register appropriately before 24186 reading data by means of the `ELPM' instruction. 24187 24188`__memx' 24189 This is a 24-bit address space that linearizes flash and RAM: If 24190 the high bit of the address is set, data is read from RAM using 24191 the lower two bytes as RAM address. If the high bit of the 24192 address is clear, data is read from flash with `RAMPZ' set 24193 according to the high byte of the address. *Note 24194 `__builtin_avr_flash_segment': AVR Built-in Functions. 24195 24196 Objects in this address space are located in `.progmemx.data'. 24197 24198 Example 24199 24200 char my_read (const __flash char ** p) 24201 { 24202 /* p is a pointer to RAM that points to a pointer to flash. 24203 The first indirection of p reads that flash pointer 24204 from RAM and the second indirection reads a char from this 24205 flash address. */ 24206 24207 return **p; 24208 } 24209 24210 /* Locate array[] in flash memory */ 24211 const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 }; 24212 24213 int i = 1; 24214 24215 int main (void) 24216 { 24217 /* Return 17 by reading from flash memory */ 24218 return array[array[i]]; 24219 } 24220 24221For each named address space supported by avr-gcc there is an equally 24222named but uppercase built-in macro defined. The purpose is to 24223facilitate testing if respective address space support is available or 24224not: 24225 24226 #ifdef __FLASH 24227 const __flash int var = 1; 24228 24229 int read_var (void) 24230 { 24231 return var; 24232 } 24233 #else 24234 #include <avr/pgmspace.h> /* From AVR-LibC */ 24235 24236 const int var PROGMEM = 1; 24237 24238 int read_var (void) 24239 { 24240 return (int) pgm_read_word (&var); 24241 } 24242 #endif /* __FLASH */ 24243 24244Notice that attribute *note `progmem': AVR Variable Attributes. 24245locates data in flash but accesses to these data read from generic 24246address space, i.e. from RAM, so that you need special accessors like 24247`pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) 24248together with attribute `progmem'. 24249 24250Limitations and caveats 24251 24252 * Reading across the 64 KiB section boundary of the `__flash' or 24253 `__flashN' address spaces shows undefined behavior. The only 24254 address space that supports reading across the 64 KiB flash 24255 segment boundaries is `__memx'. 24256 24257 * If you use one of the `__flashN' address spaces you must arrange 24258 your linker script to locate the `.progmemN.data' sections 24259 according to your needs. 24260 24261 * Any data or pointers to the non-generic address spaces must be 24262 qualified as `const', i.e. as read-only data. This still applies 24263 if the data in one of these address spaces like software version 24264 number or calibration lookup table are intended to be changed 24265 after load time by, say, a boot loader. In this case the right 24266 qualification is `const' `volatile' so that the compiler must not 24267 optimize away known values or insert them as immediates into 24268 operands of instructions. 24269 24270 * The following code initializes a variable `pfoo' located in static 24271 storage with a 24-bit address: 24272 extern const __memx char foo; 24273 const __memx void *pfoo = &foo; 24274 24275 Such code requires at least binutils 2.23, see 24276 PR13503 (http://sourceware.org/PR13503). 24277 24278 242796.16.2 M32C Named Address Spaces 24280-------------------------------- 24281 24282On the M32C target, with the R8C and M16C CPU variants, variables 24283qualified with `__far' are accessed using 32-bit addresses in order to 24284access memory beyond the first 64 Ki bytes. If `__far' is used with 24285the M32CM or M32C CPU variants, it has no effect. 24286 242876.16.3 RL78 Named Address Spaces 24288-------------------------------- 24289 24290On the RL78 target, variables qualified with `__far' are accessed with 2429132-bit pointers (20-bit addresses) rather than the default 16-bit 24292addresses. Non-far variables are assumed to appear in the topmost 2429364 KiB of the address space. 24294 242956.16.4 SPU Named Address Spaces 24296------------------------------- 24297 24298On the SPU target variables may be declared as belonging to another 24299address space by qualifying the type with the `__ea' address space 24300identifier: 24301 24302 extern int __ea i; 24303 24304The compiler generates special code to access the variable `i'. It may 24305use runtime library support, or generate special machine instructions 24306to access that address space. 24307 24308 24309File: gcc.info, Node: Zero Length, Next: Empty Structures, Prev: Named Address Spaces, Up: C Extensions 24310 243116.17 Arrays of Length Zero 24312========================== 24313 24314Zero-length arrays are allowed in GNU C. They are very useful as the 24315last element of a structure that is really a header for a 24316variable-length object: 24317 24318 struct line { 24319 int length; 24320 char contents[0]; 24321 }; 24322 24323 struct line *thisline = (struct line *) 24324 malloc (sizeof (struct line) + this_length); 24325 thisline->length = this_length; 24326 24327 In ISO C90, you would have to give `contents' a length of 1, which 24328means either you waste space or complicate the argument to `malloc'. 24329 24330 In ISO C99, you would use a "flexible array member", which is slightly 24331different in syntax and semantics: 24332 24333 * Flexible array members are written as `contents[]' without the `0'. 24334 24335 * Flexible array members have incomplete type, and so the `sizeof' 24336 operator may not be applied. As a quirk of the original 24337 implementation of zero-length arrays, `sizeof' evaluates to zero. 24338 24339 * Flexible array members may only appear as the last member of a 24340 `struct' that is otherwise non-empty. 24341 24342 * A structure containing a flexible array member, or a union 24343 containing such a structure (possibly recursively), may not be a 24344 member of a structure or an element of an array. (However, these 24345 uses are permitted by GCC as extensions.) 24346 24347 Non-empty initialization of zero-length arrays is treated like any 24348case where there are more initializer elements than the array holds, in 24349that a suitable warning about "excess elements in array" is given, and 24350the excess elements (all of them, in this case) are ignored. 24351 24352 GCC allows static initialization of flexible array members. This is 24353equivalent to defining a new structure containing the original 24354structure followed by an array of sufficient size to contain the data. 24355E.g. in the following, `f1' is constructed as if it were declared like 24356`f2'. 24357 24358 struct f1 { 24359 int x; int y[]; 24360 } f1 = { 1, { 2, 3, 4 } }; 24361 24362 struct f2 { 24363 struct f1 f1; int data[3]; 24364 } f2 = { { 1 }, { 2, 3, 4 } }; 24365 24366The convenience of this extension is that `f1' has the desired type, 24367eliminating the need to consistently refer to `f2.f1'. 24368 24369 This has symmetry with normal static arrays, in that an array of 24370unknown size is also written with `[]'. 24371 24372 Of course, this extension only makes sense if the extra data comes at 24373the end of a top-level object, as otherwise we would be overwriting 24374data at subsequent offsets. To avoid undue complication and confusion 24375with initialization of deeply nested arrays, we simply disallow any 24376non-empty initialization except when the structure is the top-level 24377object. For example: 24378 24379 struct foo { int x; int y[]; }; 24380 struct bar { struct foo z; }; 24381 24382 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 24383 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 24384 struct bar c = { { 1, { } } }; // Valid. 24385 struct foo d[1] = { { 1, { 2, 3, 4 } } }; // Invalid. 24386 24387 24388File: gcc.info, Node: Empty Structures, Next: Variable Length, Prev: Zero Length, Up: C Extensions 24389 243906.18 Structures with No Members 24391=============================== 24392 24393GCC permits a C structure to have no members: 24394 24395 struct empty { 24396 }; 24397 24398 The structure has size zero. In C++, empty structures are part of the 24399language. G++ treats empty structures as if they had a single member 24400of type `char'. 24401 24402 24403File: gcc.info, Node: Variable Length, Next: Variadic Macros, Prev: Empty Structures, Up: C Extensions 24404 244056.19 Arrays of Variable Length 24406============================== 24407 24408Variable-length automatic arrays are allowed in ISO C99, and as an 24409extension GCC accepts them in C90 mode and in C++. These arrays are 24410declared like any other automatic arrays, but with a length that is not 24411a constant expression. The storage is allocated at the point of 24412declaration and deallocated when the block scope containing the 24413declaration exits. For example: 24414 24415 FILE * 24416 concat_fopen (char *s1, char *s2, char *mode) 24417 { 24418 char str[strlen (s1) + strlen (s2) + 1]; 24419 strcpy (str, s1); 24420 strcat (str, s2); 24421 return fopen (str, mode); 24422 } 24423 24424 Jumping or breaking out of the scope of the array name deallocates the 24425storage. Jumping into the scope is not allowed; you get an error 24426message for it. 24427 24428 As an extension, GCC accepts variable-length arrays as a member of a 24429structure or a union. For example: 24430 24431 void 24432 foo (int n) 24433 { 24434 struct S { int x[n]; }; 24435 } 24436 24437 You can use the function `alloca' to get an effect much like 24438variable-length arrays. The function `alloca' is available in many 24439other C implementations (but not in all). On the other hand, 24440variable-length arrays are more elegant. 24441 24442 There are other differences between these two methods. Space allocated 24443with `alloca' exists until the containing _function_ returns. The 24444space for a variable-length array is deallocated as soon as the array 24445name's scope ends. (If you use both variable-length arrays and 24446`alloca' in the same function, deallocation of a variable-length array 24447also deallocates anything more recently allocated with `alloca'.) 24448 24449 You can also use variable-length arrays as arguments to functions: 24450 24451 struct entry 24452 tester (int len, char data[len][len]) 24453 { 24454 /* ... */ 24455 } 24456 24457 The length of an array is computed once when the storage is allocated 24458and is remembered for the scope of the array in case you access it with 24459`sizeof'. 24460 24461 If you want to pass the array first and the length afterward, you can 24462use a forward declaration in the parameter list--another GNU extension. 24463 24464 struct entry 24465 tester (int len; char data[len][len], int len) 24466 { 24467 /* ... */ 24468 } 24469 24470 The `int len' before the semicolon is a "parameter forward 24471declaration", and it serves the purpose of making the name `len' known 24472when the declaration of `data' is parsed. 24473 24474 You can write any number of such parameter forward declarations in the 24475parameter list. They can be separated by commas or semicolons, but the 24476last one must end with a semicolon, which is followed by the "real" 24477parameter declarations. Each forward declaration must match a "real" 24478declaration in parameter name and data type. ISO C99 does not support 24479parameter forward declarations. 24480 24481 24482File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Variable Length, Up: C Extensions 24483 244846.20 Macros with a Variable Number of Arguments. 24485================================================ 24486 24487In the ISO C standard of 1999, a macro can be declared to accept a 24488variable number of arguments much as a function can. The syntax for 24489defining the macro is similar to that of a function. Here is an 24490example: 24491 24492 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 24493 24494Here `...' is a "variable argument". In the invocation of such a 24495macro, it represents the zero or more tokens until the closing 24496parenthesis that ends the invocation, including any commas. This set of 24497tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 24498it appears. See the CPP manual for more information. 24499 24500 GCC has long supported variadic macros, and used a different syntax 24501that allowed you to give a name to the variable arguments just like any 24502other argument. Here is an example: 24503 24504 #define debug(format, args...) fprintf (stderr, format, args) 24505 24506This is in all ways equivalent to the ISO C example above, but arguably 24507more readable and descriptive. 24508 24509 GNU CPP has two further variadic macro extensions, and permits them to 24510be used with either of the above forms of macro definition. 24511 24512 In standard C, you are not allowed to leave the variable argument out 24513entirely; but you are allowed to pass an empty argument. For example, 24514this invocation is invalid in ISO C, because there is no comma after 24515the string: 24516 24517 debug ("A message") 24518 24519 GNU CPP permits you to completely omit the variable arguments in this 24520way. In the above examples, the compiler would complain, though since 24521the expansion of the macro still has the extra comma after the format 24522string. 24523 24524 To help solve this problem, CPP behaves specially for variable 24525arguments used with the token paste operator, `##'. If instead you 24526write 24527 24528 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 24529 24530and if the variable arguments are omitted or empty, the `##' operator 24531causes the preprocessor to remove the comma before it. If you do 24532provide some variable arguments in your macro invocation, GNU CPP does 24533not complain about the paste operation and instead places the variable 24534arguments after the comma. Just like any other pasted macro argument, 24535these arguments are not macro expanded. 24536 24537 24538File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 24539 245406.21 Slightly Looser Rules for Escaped Newlines 24541=============================================== 24542 24543The preprocessor treatment of escaped newlines is more relaxed than 24544that specified by the C90 standard, which requires the newline to 24545immediately follow a backslash. GCC's implementation allows whitespace 24546in the form of spaces, horizontal and vertical tabs, and form feeds 24547between the backslash and the subsequent newline. The preprocessor 24548issues a warning, but treats it as a valid escaped newline and combines 24549the two lines to form a single logical line. This works within 24550comments and tokens, as well as between tokens. Comments are _not_ 24551treated as whitespace for the purposes of this relaxation, since they 24552have not yet been replaced with spaces. 24553 24554 24555File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 24556 245576.22 Non-Lvalue Arrays May Have Subscripts 24558========================================== 24559 24560In ISO C99, arrays that are not lvalues still decay to pointers, and 24561may be subscripted, although they may not be modified or used after the 24562next sequence point and the unary `&' operator may not be applied to 24563them. As an extension, GNU C allows such arrays to be subscripted in 24564C90 mode, though otherwise they do not decay to pointers outside C99 24565mode. For example, this is valid in GNU C though not valid in C90: 24566 24567 struct foo {int a[4];}; 24568 24569 struct foo f(); 24570 24571 bar (int index) 24572 { 24573 return f().a[index]; 24574 } 24575 24576 24577File: gcc.info, Node: Pointer Arith, Next: Pointers to Arrays, Prev: Subscripting, Up: C Extensions 24578 245796.23 Arithmetic on `void'- and Function-Pointers 24580================================================ 24581 24582In GNU C, addition and subtraction operations are supported on pointers 24583to `void' and on pointers to functions. This is done by treating the 24584size of a `void' or of a function as 1. 24585 24586 A consequence of this is that `sizeof' is also allowed on `void' and 24587on function types, and returns 1. 24588 24589 The option `-Wpointer-arith' requests a warning if these extensions 24590are used. 24591 24592 24593File: gcc.info, Node: Pointers to Arrays, Next: Initializers, Prev: Pointer Arith, Up: C Extensions 24594 245956.24 Pointers to Arrays with Qualifiers Work as Expected 24596======================================================== 24597 24598In GNU C, pointers to arrays with qualifiers work similar to pointers 24599to other qualified types. For example, a value of type `int (*)[5]' can 24600be used to initialize a variable of type `const int (*)[5]'. These 24601types are incompatible in ISO C because the `const' qualifier is 24602formally attached to the element type of the array and not the array 24603itself. 24604 24605 extern void 24606 transpose (int N, int M, double out[M][N], const double in[N][M]); 24607 double x[3][2]; 24608 double y[2][3]; 24609 ... 24610 transpose(3, 2, y, x); 24611 24612 24613File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointers to Arrays, Up: C Extensions 24614 246156.25 Non-Constant Initializers 24616============================== 24617 24618As in standard C++ and ISO C99, the elements of an aggregate 24619initializer for an automatic variable are not required to be constant 24620expressions in GNU C. Here is an example of an initializer with 24621run-time varying elements: 24622 24623 foo (float f, float g) 24624 { 24625 float beat_freqs[2] = { f-g, f+g }; 24626 /* ... */ 24627 } 24628 24629 24630File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 24631 246326.26 Compound Literals 24633====================== 24634 24635ISO C99 supports compound literals. A compound literal looks like a 24636cast containing an initializer. Its value is an object of the type 24637specified in the cast, containing the elements specified in the 24638initializer; it is an lvalue. As an extension, GCC supports compound 24639literals in C90 mode and in C++, though the semantics are somewhat 24640different in C++. 24641 24642 Usually, the specified type is a structure. Assume that `struct foo' 24643and `structure' are declared as shown: 24644 24645 struct foo {int a; char b[2];} structure; 24646 24647Here is an example of constructing a `struct foo' with a compound 24648literal: 24649 24650 structure = ((struct foo) {x + y, 'a', 0}); 24651 24652This is equivalent to writing the following: 24653 24654 { 24655 struct foo temp = {x + y, 'a', 0}; 24656 structure = temp; 24657 } 24658 24659 You can also construct an array, though this is dangerous in C++, as 24660explained below. If all the elements of the compound literal are (made 24661up of) simple constant expressions, suitable for use in initializers of 24662objects of static storage duration, then the compound literal can be 24663coerced to a pointer to its first element and used in such an 24664initializer, as shown here: 24665 24666 char **foo = (char *[]) { "x", "y", "z" }; 24667 24668 Compound literals for scalar types and union types are also allowed, 24669but then the compound literal is equivalent to a cast. 24670 24671 As a GNU extension, GCC allows initialization of objects with static 24672storage duration by compound literals (which is not possible in ISO 24673C99, because the initializer is not a constant). It is handled as if 24674the object is initialized only with the bracket enclosed list if the 24675types of the compound literal and the object match. The initializer 24676list of the compound literal must be constant. If the object being 24677initialized has array type of unknown size, the size is determined by 24678compound literal size. 24679 24680 static struct foo x = (struct foo) {1, 'a', 'b'}; 24681 static int y[] = (int []) {1, 2, 3}; 24682 static int z[] = (int [3]) {1}; 24683 24684The above lines are equivalent to the following: 24685 static struct foo x = {1, 'a', 'b'}; 24686 static int y[] = {1, 2, 3}; 24687 static int z[] = {1, 0, 0}; 24688 24689 In C, a compound literal designates an unnamed object with static or 24690automatic storage duration. In C++, a compound literal designates a 24691temporary object, which only lives until the end of its 24692full-expression. As a result, well-defined C code that takes the 24693address of a subobject of a compound literal can be undefined in C++, 24694so the C++ compiler rejects the conversion of a temporary array to a 24695pointer. For instance, if the array compound literal example above 24696appeared inside a function, any subsequent use of `foo' in C++ has 24697undefined behavior because the lifetime of the array ends after the 24698declaration of `foo'. 24699 24700 As an optimization, the C++ compiler sometimes gives array compound 24701literals longer lifetimes: when the array either appears outside a 24702function or has const-qualified type. If `foo' and its initializer had 24703elements of `char *const' type rather than `char *', or if `foo' were a 24704global variable, the array would have static storage duration. But it 24705is probably safest just to avoid the use of array compound literals in 24706code compiled as C++. 24707 24708 24709File: gcc.info, Node: Designated Inits, Next: Case Ranges, Prev: Compound Literals, Up: C Extensions 24710 247116.27 Designated Initializers 24712============================ 24713 24714Standard C90 requires the elements of an initializer to appear in a 24715fixed order, the same as the order of the elements in the array or 24716structure being initialized. 24717 24718 In ISO C99 you can give the elements in any order, specifying the array 24719indices or structure field names they apply to, and GNU C allows this as 24720an extension in C90 mode as well. This extension is not implemented in 24721GNU C++. 24722 24723 To specify an array index, write `[INDEX] =' before the element value. 24724For example, 24725 24726 int a[6] = { [4] = 29, [2] = 15 }; 24727 24728is equivalent to 24729 24730 int a[6] = { 0, 0, 15, 0, 29, 0 }; 24731 24732The index values must be constant expressions, even if the array being 24733initialized is automatic. 24734 24735 An alternative syntax for this that has been obsolete since GCC 2.5 but 24736GCC still accepts is to write `[INDEX]' before the element value, with 24737no `='. 24738 24739 To initialize a range of elements to the same value, write `[FIRST ... 24740LAST] = VALUE'. This is a GNU extension. For example, 24741 24742 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 24743 24744If the value in it has side-effects, the side-effects happen only once, 24745not for each initialized field by the range initializer. 24746 24747Note that the length of the array is the highest value specified plus 24748one. 24749 24750 In a structure initializer, specify the name of a field to initialize 24751with `.FIELDNAME =' before the element value. For example, given the 24752following structure, 24753 24754 struct point { int x, y; }; 24755 24756the following initialization 24757 24758 struct point p = { .y = yvalue, .x = xvalue }; 24759 24760is equivalent to 24761 24762 struct point p = { xvalue, yvalue }; 24763 24764 Another syntax that has the same meaning, obsolete since GCC 2.5, is 24765`FIELDNAME:', as shown here: 24766 24767 struct point p = { y: yvalue, x: xvalue }; 24768 24769 Omitted field members are implicitly initialized the same as objects 24770that have static storage duration. 24771 24772 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 24773also use a designator (or the obsolete colon syntax) when initializing 24774a union, to specify which element of the union should be used. For 24775example, 24776 24777 union foo { int i; double d; }; 24778 24779 union foo f = { .d = 4 }; 24780 24781converts 4 to a `double' to store it in the union using the second 24782element. By contrast, casting 4 to type `union foo' stores it into the 24783union as the integer `i', since it is an integer. (*Note Cast to 24784Union::.) 24785 24786 You can combine this technique of naming elements with ordinary C 24787initialization of successive elements. Each initializer element that 24788does not have a designator applies to the next consecutive element of 24789the array or structure. For example, 24790 24791 int a[6] = { [1] = v1, v2, [4] = v4 }; 24792 24793is equivalent to 24794 24795 int a[6] = { 0, v1, v2, 0, v4, 0 }; 24796 24797 Labeling the elements of an array initializer is especially useful 24798when the indices are characters or belong to an `enum' type. For 24799example: 24800 24801 int whitespace[256] 24802 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 24803 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 24804 24805 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 24806before an `=' to specify a nested subobject to initialize; the list is 24807taken relative to the subobject corresponding to the closest 24808surrounding brace pair. For example, with the `struct point' 24809declaration above: 24810 24811 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 24812 24813If the same field is initialized multiple times, it has the value from 24814the last initialization. If any such overridden initialization has 24815side-effect, it is unspecified whether the side-effect happens or not. 24816Currently, GCC discards them and issues a warning. 24817 24818 24819File: gcc.info, Node: Case Ranges, Next: Cast to Union, Prev: Designated Inits, Up: C Extensions 24820 248216.28 Case Ranges 24822================ 24823 24824You can specify a range of consecutive values in a single `case' label, 24825like this: 24826 24827 case LOW ... HIGH: 24828 24829This has the same effect as the proper number of individual `case' 24830labels, one for each integer value from LOW to HIGH, inclusive. 24831 24832 This feature is especially useful for ranges of ASCII character codes: 24833 24834 case 'A' ... 'Z': 24835 24836 *Be careful:* Write spaces around the `...', for otherwise it may be 24837parsed wrong when you use it with integer values. For example, write 24838this: 24839 24840 case 1 ... 5: 24841 24842rather than this: 24843 24844 case 1...5: 24845 24846 24847File: gcc.info, Node: Cast to Union, Next: Mixed Declarations, Prev: Case Ranges, Up: C Extensions 24848 248496.29 Cast to a Union Type 24850========================= 24851 24852A cast to union type is similar to other casts, except that the type 24853specified is a union type. You can specify the type either with `union 24854TAG' or with a typedef name. A cast to union is actually a 24855constructor, not a cast, and hence does not yield an lvalue like normal 24856casts. (*Note Compound Literals::.) 24857 24858 The types that may be cast to the union type are those of the members 24859of the union. Thus, given the following union and variables: 24860 24861 union foo { int i; double d; }; 24862 int x; 24863 double y; 24864 24865both `x' and `y' can be cast to type `union foo'. 24866 24867 Using the cast as the right-hand side of an assignment to a variable of 24868union type is equivalent to storing in a member of the union: 24869 24870 union foo u; 24871 /* ... */ 24872 u = (union foo) x == u.i = x 24873 u = (union foo) y == u.d = y 24874 24875 You can also use the union cast as a function argument: 24876 24877 void hack (union foo); 24878 /* ... */ 24879 hack ((union foo) x); 24880 24881 24882File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Cast to Union, Up: C Extensions 24883 248846.30 Mixed Declarations and Code 24885================================ 24886 24887ISO C99 and ISO C++ allow declarations and code to be freely mixed 24888within compound statements. As an extension, GNU C also allows this in 24889C90 mode. For example, you could do: 24890 24891 int i; 24892 /* ... */ 24893 i++; 24894 int j = i + 2; 24895 24896 Each identifier is visible from where it is declared until the end of 24897the enclosing block. 24898 24899 24900File: gcc.info, Node: Function Attributes, Next: Label Attributes, Prev: Mixed Declarations, Up: C Extensions 24901 249026.31 Declaring Attributes of Functions 24903====================================== 24904 24905In GNU C, you declare certain things about functions called in your 24906program which help the compiler optimize function calls and check your 24907code more carefully. 24908 24909 The keyword `__attribute__' allows you to specify special attributes 24910when making a declaration. This keyword is followed by an attribute 24911specification inside double parentheses. The following attributes are 24912currently defined for functions on all targets: `aligned', 24913`alloc_size', `alloc_align', `assume_aligned', `noreturn', 24914`returns_twice', `noinline', `noclone', `no_icf', `always_inline', 24915`flatten', `pure', `const', `nothrow', `sentinel', `format', 24916`format_arg', `no_instrument_function', `no_split_stack', `section', 24917`constructor', `destructor', `used', `unused', `deprecated', `weak', 24918`malloc', `alias', `ifunc', `warn_unused_result', `nonnull', 24919`returns_nonnull', `gnu_inline', `externally_visible', `hot', `cold', 24920`artificial', `no_sanitize_address', `no_address_safety_analysis', 24921`no_sanitize_thread', `no_sanitize_undefined', `no_reorder', 24922`bnd_legacy', `bnd_instrument', `stack_protect', `error' and `warning'. 24923Several other attributes are defined for functions on particular target 24924systems. Other attributes, including `section' are supported for 24925variables declarations (*note Variable Attributes::), labels (*note 24926Label Attributes::) and for types (*note Type Attributes::). 24927 24928 GCC plugins may provide their own attributes. 24929 24930 You may also specify attributes with `__' preceding and following each 24931keyword. This allows you to use them in header files without being 24932concerned about a possible macro of the same name. For example, you 24933may use `__noreturn__' instead of `noreturn'. 24934 24935 *Note Attribute Syntax::, for details of the exact syntax for using 24936attributes. 24937 24938`alias ("TARGET")' 24939 The `alias' attribute causes the declaration to be emitted as an 24940 alias for another symbol, which must be specified. For instance, 24941 24942 void __f () { /* Do something. */; } 24943 void f () __attribute__ ((weak, alias ("__f"))); 24944 24945 defines `f' to be a weak alias for `__f'. In C++, the mangled 24946 name for the target must be used. It is an error if `__f' is not 24947 defined in the same translation unit. 24948 24949 Not all target machines support this attribute. 24950 24951`aligned (ALIGNMENT)' 24952 This attribute specifies a minimum alignment for the function, 24953 measured in bytes. 24954 24955 You cannot use this attribute to decrease the alignment of a 24956 function, only to increase it. However, when you explicitly 24957 specify a function alignment this overrides the effect of the 24958 `-falign-functions' (*note Optimize Options::) option for this 24959 function. 24960 24961 Note that the effectiveness of `aligned' attributes may be limited 24962 by inherent limitations in your linker. On many systems, the 24963 linker is only able to arrange for functions to be aligned up to a 24964 certain maximum alignment. (For some linkers, the maximum 24965 supported alignment may be very very small.) See your linker 24966 documentation for further information. 24967 24968 The `aligned' attribute can also be used for variables and fields 24969 (*note Variable Attributes::.) 24970 24971`alloc_size' 24972 The `alloc_size' attribute is used to tell the compiler that the 24973 function return value points to memory, where the size is given by 24974 one or two of the functions parameters. GCC uses this information 24975 to improve the correctness of `__builtin_object_size'. 24976 24977 The function parameter(s) denoting the allocated size are 24978 specified by one or two integer arguments supplied to the 24979 attribute. The allocated size is either the value of the single 24980 function argument specified or the product of the two function 24981 arguments specified. Argument numbering starts at one. 24982 24983 For instance, 24984 24985 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2))) 24986 void* my_realloc(void*, size_t) __attribute__((alloc_size(2))) 24987 24988 declares that `my_calloc' returns memory of the size given by the 24989 product of parameter 1 and 2 and that `my_realloc' returns memory 24990 of the size given by parameter 2. 24991 24992`alloc_align' 24993 The `alloc_align' attribute is used to tell the compiler that the 24994 function return value points to memory, where the returned pointer 24995 minimum alignment is given by one of the functions parameters. 24996 GCC uses this information to improve pointer alignment analysis. 24997 24998 The function parameter denoting the allocated alignment is 24999 specified by one integer argument, whose number is the argument of 25000 the attribute. Argument numbering starts at one. 25001 25002 For instance, 25003 25004 void* my_memalign(size_t, size_t) __attribute__((alloc_align(1))) 25005 25006 declares that `my_memalign' returns memory with minimum alignment 25007 given by parameter 1. 25008 25009`assume_aligned' 25010 The `assume_aligned' attribute is used to tell the compiler that 25011 the function return value points to memory, where the returned 25012 pointer minimum alignment is given by the first argument. If the 25013 attribute has two arguments, the second argument is misalignment 25014 offset. 25015 25016 For instance 25017 25018 void* my_alloc1(size_t) __attribute__((assume_aligned(16))) 25019 void* my_alloc2(size_t) __attribute__((assume_aligned(32, 8))) 25020 25021 declares that `my_alloc1' returns 16-byte aligned pointer and that 25022 `my_alloc2' returns a pointer whose value modulo 32 is equal to 8. 25023 25024`always_inline' 25025 Generally, functions are not inlined unless optimization is 25026 specified. For functions declared inline, this attribute inlines 25027 the function independent of any restrictions that otherwise apply 25028 to inlining. Failure to inline such a function is diagnosed as an 25029 error. Note that if such a function is called indirectly the 25030 compiler may or may not inline it depending on optimization level 25031 and a failure to inline an indirect call may or may not be 25032 diagnosed. 25033 25034`gnu_inline' 25035 This attribute should be used with a function that is also declared 25036 with the `inline' keyword. It directs GCC to treat the function 25037 as if it were defined in gnu90 mode even when compiling in C99 or 25038 gnu99 mode. 25039 25040 If the function is declared `extern', then this definition of the 25041 function is used only for inlining. In no case is the function 25042 compiled as a standalone function, not even if you take its address 25043 explicitly. Such an address becomes an external reference, as if 25044 you had only declared the function, and had not defined it. This 25045 has almost the effect of a macro. The way to use this is to put a 25046 function definition in a header file with this attribute, and put 25047 another copy of the function, without `extern', in a library file. 25048 The definition in the header file causes most calls to the 25049 function to be inlined. If any uses of the function remain, they 25050 refer to the single copy in the library. Note that the two 25051 definitions of the functions need not be precisely the same, 25052 although if they do not have the same effect your program may 25053 behave oddly. 25054 25055 In C, if the function is neither `extern' nor `static', then the 25056 function is compiled as a standalone function, as well as being 25057 inlined where possible. 25058 25059 This is how GCC traditionally handled functions declared `inline'. 25060 Since ISO C99 specifies a different semantics for `inline', this 25061 function attribute is provided as a transition measure and as a 25062 useful feature in its own right. This attribute is available in 25063 GCC 4.1.3 and later. It is available if either of the 25064 preprocessor macros `__GNUC_GNU_INLINE__' or 25065 `__GNUC_STDC_INLINE__' are defined. *Note An Inline Function is 25066 As Fast As a Macro: Inline. 25067 25068 In C++, this attribute does not depend on `extern' in any way, but 25069 it still requires the `inline' keyword to enable its special 25070 behavior. 25071 25072`artificial' 25073 This attribute is useful for small inline wrappers that if possible 25074 should appear during debugging as a unit. Depending on the debug 25075 info format it either means marking the function as artificial or 25076 using the caller location for all instructions within the inlined 25077 body. 25078 25079`bank_switch' 25080 When added to an interrupt handler with the M32C port, causes the 25081 prologue and epilogue to use bank switching to preserve the 25082 registers rather than saving them on the stack. 25083 25084`flatten' 25085 Generally, inlining into a function is limited. For a function 25086 marked with this attribute, every call inside this function is 25087 inlined, if possible. Whether the function itself is considered 25088 for inlining depends on its size and the current inlining 25089 parameters. 25090 25091`error ("MESSAGE")' 25092 If this attribute is used on a function declaration and a call to 25093 such a function is not eliminated through dead code elimination or 25094 other optimizations, an error that includes MESSAGE is diagnosed. 25095 This is useful for compile-time checking, especially together with 25096 `__builtin_constant_p' and inline functions where checking the 25097 inline function arguments is not possible through `extern char 25098 [(condition) ? 1 : -1];' tricks. While it is possible to leave 25099 the function undefined and thus invoke a link failure, when using 25100 this attribute the problem is diagnosed earlier and with exact 25101 location of the call even in presence of inline functions or when 25102 not emitting debugging information. 25103 25104`warning ("MESSAGE")' 25105 If this attribute is used on a function declaration and a call to 25106 such a function is not eliminated through dead code elimination or 25107 other optimizations, a warning that includes MESSAGE is diagnosed. 25108 This is useful for compile-time checking, especially together with 25109 `__builtin_constant_p' and inline functions. While it is possible 25110 to define the function with a message in `.gnu.warning*' section, 25111 when using this attribute the problem is diagnosed earlier and 25112 with exact location of the call even in presence of inline 25113 functions or when not emitting debugging information. 25114 25115`cdecl' 25116 On the x86-32 targets, the `cdecl' attribute causes the compiler to 25117 assume that the calling function pops off the stack space used to 25118 pass arguments. This is useful to override the effects of the 25119 `-mrtd' switch. 25120 25121`const' 25122 Many functions do not examine any values except their arguments, 25123 and have no effects except the return value. Basically this is 25124 just slightly more strict class than the `pure' attribute below, 25125 since function is not allowed to read global memory. 25126 25127 Note that a function that has pointer arguments and examines the 25128 data pointed to must _not_ be declared `const'. Likewise, a 25129 function that calls a non-`const' function usually must not be 25130 `const'. It does not make sense for a `const' function to return 25131 `void'. 25132 25133`constructor' 25134`destructor' 25135`constructor (PRIORITY)' 25136`destructor (PRIORITY)' 25137 The `constructor' attribute causes the function to be called 25138 automatically before execution enters `main ()'. Similarly, the 25139 `destructor' attribute causes the function to be called 25140 automatically after `main ()' completes or `exit ()' is called. 25141 Functions with these attributes are useful for initializing data 25142 that is used implicitly during the execution of the program. 25143 25144 You may provide an optional integer priority to control the order 25145 in which constructor and destructor functions are run. A 25146 constructor with a smaller priority number runs before a 25147 constructor with a larger priority number; the opposite 25148 relationship holds for destructors. So, if you have a constructor 25149 that allocates a resource and a destructor that deallocates the 25150 same resource, both functions typically have the same priority. 25151 The priorities for constructor and destructor functions are the 25152 same as those specified for namespace-scope C++ objects (*note C++ 25153 Attributes::). 25154 25155 These attributes are not currently implemented for Objective-C. 25156 25157`deprecated' 25158`deprecated (MSG)' 25159 The `deprecated' attribute results in a warning if the function is 25160 used anywhere in the source file. This is useful when identifying 25161 functions that are expected to be removed in a future version of a 25162 program. The warning also includes the location of the declaration 25163 of the deprecated function, to enable users to easily find further 25164 information about why the function is deprecated, or what they 25165 should do instead. Note that the warnings only occurs for uses: 25166 25167 int old_fn () __attribute__ ((deprecated)); 25168 int old_fn (); 25169 int (*fn_ptr)() = old_fn; 25170 25171 results in a warning on line 3 but not line 2. The optional MSG 25172 argument, which must be a string, is printed in the warning if 25173 present. 25174 25175 The `deprecated' attribute can also be used for variables and 25176 types (*note Variable Attributes::, *note Type Attributes::.) 25177 25178`disinterrupt' 25179 On Epiphany and MeP targets, this attribute causes the compiler to 25180 emit instructions to disable interrupts for the duration of the 25181 given function. 25182 25183`dllexport' 25184 On Microsoft Windows targets and Symbian OS targets the 25185 `dllexport' attribute causes the compiler to provide a global 25186 pointer to a pointer in a DLL, so that it can be referenced with 25187 the `dllimport' attribute. On Microsoft Windows targets, the 25188 pointer name is formed by combining `_imp__' and the function or 25189 variable name. 25190 25191 You can use `__declspec(dllexport)' as a synonym for 25192 `__attribute__ ((dllexport))' for compatibility with other 25193 compilers. 25194 25195 On systems that support the `visibility' attribute, this attribute 25196 also implies "default" visibility. It is an error to explicitly 25197 specify any other visibility. 25198 25199 GCC's default behavior is to emit all inline functions with the 25200 `dllexport' attribute. Since this can cause object file-size 25201 bloat, you can use `-fno-keep-inline-dllexport', which tells GCC to 25202 ignore the attribute for inlined functions unless the 25203 `-fkeep-inline-functions' flag is used instead. 25204 25205 The attribute is ignored for undefined symbols. 25206 25207 When applied to C++ classes, the attribute marks defined 25208 non-inlined member functions and static data members as exports. 25209 Static consts initialized in-class are not marked unless they are 25210 also defined out-of-class. 25211 25212 For Microsoft Windows targets there are alternative methods for 25213 including the symbol in the DLL's export table such as using a 25214 `.def' file with an `EXPORTS' section or, with GNU ld, using the 25215 `--export-all' linker flag. 25216 25217`dllimport' 25218 On Microsoft Windows and Symbian OS targets, the `dllimport' 25219 attribute causes the compiler to reference a function or variable 25220 via a global pointer to a pointer that is set up by the DLL 25221 exporting the symbol. The attribute implies `extern'. On 25222 Microsoft Windows targets, the pointer name is formed by combining 25223 `_imp__' and the function or variable name. 25224 25225 You can use `__declspec(dllimport)' as a synonym for 25226 `__attribute__ ((dllimport))' for compatibility with other 25227 compilers. 25228 25229 On systems that support the `visibility' attribute, this attribute 25230 also implies "default" visibility. It is an error to explicitly 25231 specify any other visibility. 25232 25233 Currently, the attribute is ignored for inlined functions. If the 25234 attribute is applied to a symbol _definition_, an error is 25235 reported. If a symbol previously declared `dllimport' is later 25236 defined, the attribute is ignored in subsequent references, and a 25237 warning is emitted. The attribute is also overridden by a 25238 subsequent declaration as `dllexport'. 25239 25240 When applied to C++ classes, the attribute marks non-inlined 25241 member functions and static data members as imports. However, the 25242 attribute is ignored for virtual methods to allow creation of 25243 vtables using thunks. 25244 25245 On the SH Symbian OS target the `dllimport' attribute also has 25246 another affect--it can cause the vtable and run-time type 25247 information for a class to be exported. This happens when the 25248 class has a dllimported constructor or a non-inline, non-pure 25249 virtual function and, for either of those two conditions, the 25250 class also has an inline constructor or destructor and has a key 25251 function that is defined in the current translation unit. 25252 25253 For Microsoft Windows targets the use of the `dllimport' attribute 25254 on functions is not necessary, but provides a small performance 25255 benefit by eliminating a thunk in the DLL. The use of the 25256 `dllimport' attribute on imported variables can be avoided by 25257 passing the `--enable-auto-import' switch to the GNU linker. As 25258 with functions, using the attribute for a variable eliminates a 25259 thunk in the DLL. 25260 25261 One drawback to using this attribute is that a pointer to a 25262 _variable_ marked as `dllimport' cannot be used as a constant 25263 address. However, a pointer to a _function_ with the `dllimport' 25264 attribute can be used as a constant initializer; in this case, the 25265 address of a stub function in the import lib is referenced. On 25266 Microsoft Windows targets, the attribute can be disabled for 25267 functions by setting the `-mnop-fun-dllimport' flag. 25268 25269`exception' 25270 Use this attribute on the NDS32 target to indicate that the 25271 specified function is an exception handler. The compiler will 25272 generate corresponding sections for use in an exception handler. 25273 25274`exception_handler' 25275 Use this attribute on the Blackfin to indicate that the specified 25276 function is an exception handler. The compiler generates function 25277 entry and exit sequences suitable for use in an exception handler 25278 when this attribute is present. 25279 25280`externally_visible' 25281 This attribute, attached to a global variable or function, 25282 nullifies the effect of the `-fwhole-program' command-line option, 25283 so the object remains visible outside the current compilation unit. 25284 25285 If `-fwhole-program' is used together with `-flto' and `gold' is 25286 used as the linker plugin, `externally_visible' attributes are 25287 automatically added to functions (not variable yet due to a 25288 current `gold' issue) that are accessed outside of LTO objects 25289 according to resolution file produced by `gold'. For other 25290 linkers that cannot generate resolution file, explicit 25291 `externally_visible' attributes are still necessary. 25292 25293`far' 25294 On MeP targets this causes the compiler to use a calling convention 25295 that assumes the called function is too far away for the built-in 25296 addressing modes. 25297 25298`fast_interrupt' 25299 Use this attribute on the M32C and RX ports to indicate that the 25300 specified function is a fast interrupt handler. This is just like 25301 the `interrupt' attribute, except that `freit' is used to return 25302 instead of `reit'. 25303 25304`fastcall' 25305 On x86-32 targets, the `fastcall' attribute causes the compiler to 25306 pass the first argument (if of integral type) in the register ECX 25307 and the second argument (if of integral type) in the register EDX. 25308 Subsequent and other typed arguments are passed on the stack. The 25309 called function pops the arguments off the stack. If the number 25310 of arguments is variable all arguments are pushed on the stack. 25311 25312`thiscall' 25313 On x86-32 targets, the `thiscall' attribute causes the compiler to 25314 pass the first argument (if of integral type) in the register ECX. 25315 Subsequent and other typed arguments are passed on the stack. The 25316 called function pops the arguments off the stack. If the number 25317 of arguments is variable all arguments are pushed on the stack. 25318 The `thiscall' attribute is intended for C++ non-static member 25319 functions. As a GCC extension, this calling convention can be 25320 used for C functions and for static member methods. 25321 25322`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 25323 The `format' attribute specifies that a function takes `printf', 25324 `scanf', `strftime' or `strfmon' style arguments that should be 25325 type-checked against a format string. For example, the 25326 declaration: 25327 25328 extern int 25329 my_printf (void *my_object, const char *my_format, ...) 25330 __attribute__ ((format (printf, 2, 3))); 25331 25332 causes the compiler to check the arguments in calls to `my_printf' 25333 for consistency with the `printf' style format string argument 25334 `my_format'. 25335 25336 The parameter ARCHETYPE determines how the format string is 25337 interpreted, and should be `printf', `scanf', `strftime', 25338 `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'. (You can 25339 also use `__printf__', `__scanf__', `__strftime__' or 25340 `__strfmon__'.) On MinGW targets, `ms_printf', `ms_scanf', and 25341 `ms_strftime' are also present. ARCHETYPE values such as `printf' 25342 refer to the formats accepted by the system's C runtime library, 25343 while values prefixed with `gnu_' always refer to the formats 25344 accepted by the GNU C Library. On Microsoft Windows targets, 25345 values prefixed with `ms_' refer to the formats accepted by the 25346 `msvcrt.dll' library. The parameter STRING-INDEX specifies which 25347 argument is the format string argument (starting from 1), while 25348 FIRST-TO-CHECK is the number of the first argument to check 25349 against the format string. For functions where the arguments are 25350 not available to be checked (such as `vprintf'), specify the third 25351 parameter as zero. In this case the compiler only checks the 25352 format string for consistency. For `strftime' formats, the third 25353 parameter is required to be zero. Since non-static C++ methods 25354 have an implicit `this' argument, the arguments of such methods 25355 should be counted from two, not one, when giving values for 25356 STRING-INDEX and FIRST-TO-CHECK. 25357 25358 In the example above, the format string (`my_format') is the second 25359 argument of the function `my_print', and the arguments to check 25360 start with the third argument, so the correct parameters for the 25361 format attribute are 2 and 3. 25362 25363 The `format' attribute allows you to identify your own functions 25364 that take format strings as arguments, so that GCC can check the 25365 calls to these functions for errors. The compiler always (unless 25366 `-ffreestanding' or `-fno-builtin' is used) checks formats for the 25367 standard library functions `printf', `fprintf', `sprintf', 25368 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and 25369 `vsprintf' whenever such warnings are requested (using 25370 `-Wformat'), so there is no need to modify the header file 25371 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf', 25372 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in 25373 strictly conforming C standard modes, the X/Open function 25374 `strfmon' is also checked as are `printf_unlocked' and 25375 `fprintf_unlocked'. *Note Options Controlling C Dialect: C 25376 Dialect Options. 25377 25378 For Objective-C dialects, `NSString' (or `__NSString__') is 25379 recognized in the same context. Declarations including these 25380 format attributes are parsed for correct syntax, however the 25381 result of checking of such format strings is not yet defined, and 25382 is not carried out by this version of the compiler. 25383 25384 The target may also provide additional types of format checks. 25385 *Note Format Checks Specific to Particular Target Machines: Target 25386 Format Checks. 25387 25388`format_arg (STRING-INDEX)' 25389 The `format_arg' attribute specifies that a function takes a format 25390 string for a `printf', `scanf', `strftime' or `strfmon' style 25391 function and modifies it (for example, to translate it into 25392 another language), so the result can be passed to a `printf', 25393 `scanf', `strftime' or `strfmon' style function (with the 25394 remaining arguments to the format function the same as they would 25395 have been for the unmodified string). For example, the 25396 declaration: 25397 25398 extern char * 25399 my_dgettext (char *my_domain, const char *my_format) 25400 __attribute__ ((format_arg (2))); 25401 25402 causes the compiler to check the arguments in calls to a `printf', 25403 `scanf', `strftime' or `strfmon' type function, whose format 25404 string argument is a call to the `my_dgettext' function, for 25405 consistency with the format string argument `my_format'. If the 25406 `format_arg' attribute had not been specified, all the compiler 25407 could tell in such calls to format functions would be that the 25408 format string argument is not constant; this would generate a 25409 warning when `-Wformat-nonliteral' is used, but the calls could 25410 not be checked without the attribute. 25411 25412 The parameter STRING-INDEX specifies which argument is the format 25413 string argument (starting from one). Since non-static C++ methods 25414 have an implicit `this' argument, the arguments of such methods 25415 should be counted from two. 25416 25417 The `format_arg' attribute allows you to identify your own 25418 functions that modify format strings, so that GCC can check the 25419 calls to `printf', `scanf', `strftime' or `strfmon' type function 25420 whose operands are a call to one of your own function. The 25421 compiler always treats `gettext', `dgettext', and `dcgettext' in 25422 this manner except when strict ISO C support is requested by 25423 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or 25424 `-fno-builtin' is used. *Note Options Controlling C Dialect: C 25425 Dialect Options. 25426 25427 For Objective-C dialects, the `format-arg' attribute may refer to 25428 an `NSString' reference for compatibility with the `format' 25429 attribute above. 25430 25431 The target may also allow additional types in `format-arg' 25432 attributes. *Note Format Checks Specific to Particular Target 25433 Machines: Target Format Checks. 25434 25435`function_vector' 25436 Use this attribute on the H8/300, H8/300H, and H8S to indicate 25437 that the specified function should be called through the function 25438 vector. Calling a function through the function vector reduces 25439 code size, however; the function vector has a limited size 25440 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 25441 and H8S) and shares space with the interrupt vector. 25442 25443 On SH2A targets, this attribute declares a function to be called 25444 using the TBR relative addressing mode. The argument to this 25445 attribute is the entry number of the same function in a vector 25446 table containing all the TBR relative addressable functions. For 25447 correct operation the TBR must be setup accordingly to point to 25448 the start of the vector table before any functions with this 25449 attribute are invoked. Usually a good place to do the 25450 initialization is the startup routine. The TBR relative vector 25451 table can have at max 256 function entries. The jumps to these 25452 functions are generated using a SH2A specific, non delayed branch 25453 instruction JSR/N @(disp8,TBR). You must use GAS and GLD from GNU 25454 binutils version 2.7 or later for this attribute to work correctly. 25455 25456 Please refer the example of M16C target, to see the use of this 25457 attribute while declaring a function, 25458 25459 In an application, for a function being called once, this attribute 25460 saves at least 8 bytes of code; and if other successive calls are 25461 being made to the same function, it saves 2 bytes of code per each 25462 of these calls. 25463 25464 On M16C/M32C targets, the `function_vector' attribute declares a 25465 special page subroutine call function. Use of this attribute 25466 reduces the code size by 2 bytes for each call generated to the 25467 subroutine. The argument to the attribute is the vector number 25468 entry from the special page vector table which contains the 16 25469 low-order bits of the subroutine's entry address. Each vector 25470 table has special page number (18 to 255) that is used in `jsrs' 25471 instructions. Jump addresses of the routines are generated by 25472 adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of 25473 M32C targets), to the 2-byte addresses set in the vector table. 25474 Therefore you need to ensure that all the special page vector 25475 routines should get mapped within the address range 0x0F0000 to 25476 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C). 25477 25478 In the following example 2 bytes are saved for each call to 25479 function `foo'. 25480 25481 void foo (void) __attribute__((function_vector(0x18))); 25482 void foo (void) 25483 { 25484 } 25485 25486 void bar (void) 25487 { 25488 foo(); 25489 } 25490 25491 If functions are defined in one file and are called in another 25492 file, then be sure to write this declaration in both files. 25493 25494 This attribute is ignored for R8C target. 25495 25496`ifunc ("RESOLVER")' 25497 The `ifunc' attribute is used to mark a function as an indirect 25498 function using the STT_GNU_IFUNC symbol type extension to the ELF 25499 standard. This allows the resolution of the symbol value to be 25500 determined dynamically at load time, and an optimized version of 25501 the routine can be selected for the particular processor or other 25502 system characteristics determined then. To use this attribute, 25503 first define the implementation functions available, and a 25504 resolver function that returns a pointer to the selected 25505 implementation function. The implementation functions' 25506 declarations must match the API of the function being implemented, 25507 the resolver's declaration is be a function returning pointer to 25508 void function returning void: 25509 25510 void *my_memcpy (void *dst, const void *src, size_t len) 25511 { 25512 ... 25513 } 25514 25515 static void (*resolve_memcpy (void)) (void) 25516 { 25517 return my_memcpy; // we'll just always select this routine 25518 } 25519 25520 The exported header file declaring the function the user calls 25521 would contain: 25522 25523 extern void *memcpy (void *, const void *, size_t); 25524 25525 allowing the user to call this as a regular function, unaware of 25526 the implementation. Finally, the indirect function needs to be 25527 defined in the same translation unit as the resolver function: 25528 25529 void *memcpy (void *, const void *, size_t) 25530 __attribute__ ((ifunc ("resolve_memcpy"))); 25531 25532 Indirect functions cannot be weak. Binutils version 2.20.1 or 25533 higher and GNU C Library version 2.11.1 are required to use this 25534 feature. 25535 25536`interrupt' 25537 Use this attribute on the ARC, ARM, AVR, CR16, Epiphany, M32C, 25538 M32R/D, m68k, MeP, MIPS, MSP430, NDS32, RL78, RX, Visium and 25539 Xstormy16 ports to indicate that the specified function is an 25540 interrupt handler. The compiler generates function entry and exit 25541 sequences suitable for use in an interrupt handler when this 25542 attribute is present. With Epiphany targets it may also generate 25543 a special section with code to initialize the interrupt vector 25544 table. 25545 25546 Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, 25547 MicroBlaze, and SH processors can be specified via the 25548 `interrupt_handler' attribute. 25549 25550 Note, on the ARC, you must specify the kind of interrupt to be 25551 handled in a parameter to the interrupt attribute like this: 25552 25553 void f () __attribute__ ((interrupt ("ilink1"))); 25554 25555 Permissible values for this parameter are: `ilink1' and `ilink2'. 25556 25557 Note, on the AVR, the hardware globally disables interrupts when an 25558 interrupt is executed. The first instruction of an interrupt 25559 handler declared with this attribute is a `SEI' instruction to 25560 re-enable interrupts. See also the `signal' function attribute 25561 that does not insert a `SEI' instruction. If both `signal' and 25562 `interrupt' are specified for the same function, `signal' is 25563 silently ignored. 25564 25565 Note, for the ARM, you can specify the kind of interrupt to be 25566 handled by adding an optional parameter to the interrupt attribute 25567 like this: 25568 25569 void f () __attribute__ ((interrupt ("IRQ"))); 25570 25571 Permissible values for this parameter are: `IRQ', `FIQ', `SWI', 25572 `ABORT' and `UNDEF'. 25573 25574 On ARMv7-M the interrupt type is ignored, and the attribute means 25575 the function may be called with a word-aligned stack pointer. 25576 25577 Note, for the MSP430 you can provide an argument to the interrupt 25578 attribute which specifies a name or number. If the argument is a 25579 number it indicates the slot in the interrupt vector table (0 - 25580 31) to which this handler should be assigned. If the argument is 25581 a name it is treated as a symbolic name for the vector slot. 25582 These names should match up with appropriate entries in the linker 25583 script. By default the names `watchdog' for vector 26, `nmi' for 25584 vector 30 and `reset' for vector 31 are recognized. 25585 25586 You can also use the following function attributes to modify how 25587 normal functions interact with interrupt functions: 25588 25589 `critical' 25590 Critical functions disable interrupts upon entry and restore 25591 the previous interrupt state upon exit. Critical functions 25592 cannot also have the `naked' or `reentrant' attributes. They 25593 can have the `interrupt' attribute. 25594 25595 `reentrant' 25596 Reentrant functions disable interrupts upon entry and enable 25597 them upon exit. Reentrant functions cannot also have the 25598 `naked' or `critical' attributes. They can have the 25599 `interrupt' attribute. 25600 25601 `wakeup' 25602 This attribute only applies to interrupt functions. It is 25603 silently ignored if applied to a non-interrupt function. A 25604 wakeup interrupt function will rouse the processor from any 25605 low-power state that it might be in when the function exits. 25606 25607 25608 On Epiphany targets one or more optional parameters can be added 25609 like this: 25610 25611 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); 25612 25613 Permissible values for these parameters are: `reset', 25614 `software_exception', `page_miss', `timer0', `timer1', `message', 25615 `dma0', `dma1', `wand' and `swi'. Multiple parameters indicate 25616 that multiple entries in the interrupt vector table should be 25617 initialized for this function, i.e. for each parameter NAME, a 25618 jump to the function is emitted in the section ivt_entry_NAME. 25619 The parameter(s) may be omitted entirely, in which case no 25620 interrupt vector table entry is provided. 25621 25622 Note, on Epiphany targets, interrupts are enabled inside the 25623 function unless the `disinterrupt' attribute is also specified. 25624 25625 On Epiphany targets, you can also use the following attribute to 25626 modify the behavior of an interrupt handler: 25627 `forwarder_section' 25628 The interrupt handler may be in external memory which cannot 25629 be reached by a branch instruction, so generate a local 25630 memory trampoline to transfer control. The single parameter 25631 identifies the section where the trampoline is placed. 25632 25633 The following examples are all valid uses of these attributes on 25634 Epiphany targets: 25635 void __attribute__ ((interrupt)) universal_handler (); 25636 void __attribute__ ((interrupt ("dma1"))) dma1_handler (); 25637 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); 25638 void __attribute__ ((interrupt ("timer0"), disinterrupt)) 25639 fast_timer_handler (); 25640 void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp"))) 25641 external_dma_handler (); 25642 25643 On MIPS targets, you can use the following attributes to modify 25644 the behavior of an interrupt handler: 25645 `use_shadow_register_set' 25646 Assume that the handler uses a shadow register set, instead of 25647 the main general-purpose registers. 25648 25649 `keep_interrupts_masked' 25650 Keep interrupts masked for the whole function. Without this 25651 attribute, GCC tries to reenable interrupts for as much of 25652 the function as it can. 25653 25654 `use_debug_exception_return' 25655 Return using the `deret' instruction. Interrupt handlers 25656 that don't have this attribute return using `eret' instead. 25657 25658 You can use any combination of these attributes, as shown below: 25659 void __attribute__ ((interrupt)) v0 (); 25660 void __attribute__ ((interrupt, use_shadow_register_set)) v1 (); 25661 void __attribute__ ((interrupt, keep_interrupts_masked)) v2 (); 25662 void __attribute__ ((interrupt, use_debug_exception_return)) v3 (); 25663 void __attribute__ ((interrupt, use_shadow_register_set, 25664 keep_interrupts_masked)) v4 (); 25665 void __attribute__ ((interrupt, use_shadow_register_set, 25666 use_debug_exception_return)) v5 (); 25667 void __attribute__ ((interrupt, keep_interrupts_masked, 25668 use_debug_exception_return)) v6 (); 25669 void __attribute__ ((interrupt, use_shadow_register_set, 25670 keep_interrupts_masked, 25671 use_debug_exception_return)) v7 (); 25672 25673 On NDS32 target, this attribute indicates that the specified 25674 function is an interrupt handler. The compiler generates 25675 corresponding sections for use in an interrupt handler. You can 25676 use the following attributes to modify the behavior: 25677 `nested' 25678 This interrupt service routine is interruptible. 25679 25680 `not_nested' 25681 This interrupt service routine is not interruptible. 25682 25683 `nested_ready' 25684 This interrupt service routine is interruptible after 25685 `PSW.GIE' (global interrupt enable) is set. This allows 25686 interrupt service routine to finish some short critical code 25687 before enabling interrupts. 25688 25689 `save_all' 25690 The system will help save all registers into stack before 25691 entering interrupt handler. 25692 25693 `partial_save' 25694 The system will help save caller registers into stack before 25695 entering interrupt handler. 25696 25697 On RL78, use `brk_interrupt' instead of `interrupt' for handlers 25698 intended to be used with the `BRK' opcode (i.e. those that must 25699 end with `RETB' instead of `RETI'). 25700 25701 On RX targets, you may specify one or more vector numbers as 25702 arguments to the attribute, as well as naming an alternate table 25703 name. Parameters are handled sequentially, so one handler can be 25704 assigned to multiple entries in multiple tables. One may also 25705 pass the magic string `"$default"' which causes the function to be 25706 used for any unfilled slots in the current table. 25707 25708 This example shows a simple assignment of a function to one vector 25709 in the default table (note that preprocessor macros may be used for 25710 chip-specific symbolic vector names): 25711 void __attribute__ ((interrupt (5))) txd1_handler (); 25712 25713 This example assigns a function to two slots in the default table 25714 (using preprocessor macros defined elsewhere) and makes it the 25715 default for the `dct' table: 25716 void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default"))) 25717 txd1_handler (); 25718 25719`interrupt_handler' 25720 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, 25721 and SH to indicate that the specified function is an interrupt 25722 handler. The compiler generates function entry and exit sequences 25723 suitable for use in an interrupt handler when this attribute is 25724 present. 25725 25726`interrupt_thread' 25727 Use this attribute on fido, a subarchitecture of the m68k, to 25728 indicate that the specified function is an interrupt handler that 25729 is designed to run as a thread. The compiler omits generate 25730 prologue/epilogue sequences and replaces the return instruction 25731 with a `sleep' instruction. This attribute is available only on 25732 fido. 25733 25734`isr' 25735 Use this attribute on ARM to write Interrupt Service Routines. 25736 This is an alias to the `interrupt' attribute above. 25737 25738`kspisusp' 25739 When used together with `interrupt_handler', `exception_handler' 25740 or `nmi_handler', code is generated to load the stack pointer from 25741 the USP register in the function prologue. 25742 25743`l1_text' 25744 This attribute specifies a function to be placed into L1 25745 Instruction SRAM. The function is put into a specific section 25746 named `.l1.text'. With `-mfdpic', function calls with a such 25747 function as the callee or caller uses inlined PLT. 25748 25749`l2' 25750 On the Blackfin, this attribute specifies a function to be placed 25751 into L2 SRAM. The function is put into a specific section named 25752 `.l1.text'. With `-mfdpic', callers of such functions use an 25753 inlined PLT. 25754 25755`leaf' 25756 Calls to external functions with this attribute must return to the 25757 current compilation unit only by return or by exception handling. 25758 In particular, leaf functions are not allowed to call callback 25759 function passed to it from the current compilation unit or 25760 directly call functions exported by the unit or longjmp into the 25761 unit. Leaf function might still call functions from other 25762 compilation units and thus they are not necessarily leaf in the 25763 sense that they contain no function calls at all. 25764 25765 The attribute is intended for library functions to improve 25766 dataflow analysis. The compiler takes the hint that any data not 25767 escaping the current compilation unit can not be used or modified 25768 by the leaf function. For example, the `sin' function is a leaf 25769 function, but `qsort' is not. 25770 25771 Note that leaf functions might invoke signals and signal handlers 25772 might be defined in the current compilation unit and use static 25773 variables. The only compliant way to write such a signal handler 25774 is to declare such variables `volatile'. 25775 25776 The attribute has no effect on functions defined within the 25777 current compilation unit. This is to allow easy merging of 25778 multiple compilation units into one, for example, by using the 25779 link-time optimization. For this reason the attribute is not 25780 allowed on types to annotate indirect calls. 25781 25782`long_call' 25783`medium_call' 25784`short_call' 25785 These attributes specify how a particular function is called on 25786 ARC, ARM and Epiphany - with `medium_call' being specific to ARC. 25787 These attributes override the `-mlong-calls' (*note ARM Options:: 25788 and *note ARC Options::) and `-mmedium-calls' (*note ARC Options::) 25789 command-line switches and `#pragma long_calls' settings. For ARM, 25790 the `long_call' attribute indicates that the function might be far 25791 away from the call site and require a different (more expensive) 25792 calling sequence. The `short_call' attribute always places the 25793 offset to the function from the call site into the `BL' 25794 instruction directly. 25795 25796 For ARC, a function marked with the `long_call' attribute is 25797 always called using register-indirect jump-and-link instructions, 25798 thereby enabling the called function to be placed anywhere within 25799 the 32-bit address space. A function marked with the `medium_call' 25800 attribute will always be close enough to be called with an 25801 unconditional branch-and-link instruction, which has a 25-bit 25802 offset from the call site. A function marked with the `short_call' 25803 attribute will always be close enough to be called with a 25804 conditional branch-and-link instruction, which has a 21-bit offset 25805 from the call site. 25806 25807`longcall' 25808`shortcall' 25809 On Blackfin and PowerPC, the `longcall' attribute indicates that 25810 the function might be far away from the call site and require a 25811 different (more expensive) calling sequence. The `shortcall' 25812 attribute indicates that the function is always close enough for 25813 the shorter calling sequence to be used. These attributes 25814 override both the `-mlongcall' switch and, on the RS/6000 and 25815 PowerPC, the `#pragma longcall' setting. 25816 25817 *Note RS/6000 and PowerPC Options::, for more information on 25818 whether long calls are necessary. 25819 25820`long_call' 25821`near' 25822`far' 25823 These attributes specify how a particular function is called on 25824 MIPS. The attributes override the `-mlong-calls' (*note MIPS 25825 Options::) command-line switch. The `long_call' and `far' 25826 attributes are synonyms, and cause the compiler to always call the 25827 function by first loading its address into a register, and then 25828 using the contents of that register. The `near' attribute has the 25829 opposite effect; it specifies that non-PIC calls should be made 25830 using the more efficient `jal' instruction. 25831 25832`malloc' 25833 This tells the compiler that a function is `malloc'-like, i.e., 25834 that the pointer P returned by the function cannot alias any other 25835 pointer valid when the function returns, and moreover no pointers 25836 to valid objects occur in any storage addressed by P. 25837 25838 Using this attribute can improve optimization. Functions like 25839 `malloc' and `calloc' have this property because they return a 25840 pointer to uninitialized or zeroed-out storage. However, functions 25841 like `realloc' do not have this property, as they can return a 25842 pointer to storage containing pointers. 25843 25844`mips16' 25845`nomips16' 25846 On MIPS targets, you can use the `mips16' and `nomips16' function 25847 attributes to locally select or turn off MIPS16 code generation. 25848 A function with the `mips16' attribute is emitted as MIPS16 code, 25849 while MIPS16 code generation is disabled for functions with the 25850 `nomips16' attribute. These attributes override the `-mips16' and 25851 `-mno-mips16' options on the command line (*note MIPS Options::). 25852 25853 When compiling files containing mixed MIPS16 and non-MIPS16 code, 25854 the preprocessor symbol `__mips16' reflects the setting on the 25855 command line, not that within individual functions. Mixed MIPS16 25856 and non-MIPS16 code may interact badly with some GCC extensions 25857 such as `__builtin_apply' (*note Constructing Calls::). 25858 25859`micromips, MIPS' 25860`nomicromips, MIPS' 25861 On MIPS targets, you can use the `micromips' and `nomicromips' 25862 function attributes to locally select or turn off microMIPS code 25863 generation. A function with the `micromips' attribute is emitted 25864 as microMIPS code, while microMIPS code generation is disabled for 25865 functions with the `nomicromips' attribute. These attributes 25866 override the `-mmicromips' and `-mno-micromips' options on the 25867 command line (*note MIPS Options::). 25868 25869 When compiling files containing mixed microMIPS and non-microMIPS 25870 code, the preprocessor symbol `__mips_micromips' reflects the 25871 setting on the command line, not that within individual functions. 25872 Mixed microMIPS and non-microMIPS code may interact badly with 25873 some GCC extensions such as `__builtin_apply' (*note Constructing 25874 Calls::). 25875 25876`model (MODEL-NAME)' 25877 On the M32R/D, use this attribute to set the addressability of an 25878 object, and of the code generated for a function. The identifier 25879 MODEL-NAME is one of `small', `medium', or `large', representing 25880 each of the code models. 25881 25882 Small model objects live in the lower 16MB of memory (so that their 25883 addresses can be loaded with the `ld24' instruction), and are 25884 callable with the `bl' instruction. 25885 25886 Medium model objects may live anywhere in the 32-bit address space 25887 (the compiler generates `seth/add3' instructions to load their 25888 addresses), and are callable with the `bl' instruction. 25889 25890 Large model objects may live anywhere in the 32-bit address space 25891 (the compiler generates `seth/add3' instructions to load their 25892 addresses), and may not be reachable with the `bl' instruction 25893 (the compiler generates the much slower `seth/add3/jl' instruction 25894 sequence). 25895 25896`ms_abi' 25897`sysv_abi' 25898 On 32-bit and 64-bit x86 targets, you can use an ABI attribute to 25899 indicate which calling convention should be used for a function. 25900 The `ms_abi' attribute tells the compiler to use the Microsoft ABI, 25901 while the `sysv_abi' attribute tells the compiler to use the ABI 25902 used on GNU/Linux and other systems. The default is to use the 25903 Microsoft ABI when targeting Windows. On all other systems, the 25904 default is the x86/AMD ABI. 25905 25906 Note, the `ms_abi' attribute for Microsoft Windows 64-bit targets 25907 currently requires the `-maccumulate-outgoing-args' option. 25908 25909`callee_pop_aggregate_return (NUMBER)' 25910 On x86-32 targets, you can use this attribute to control how 25911 aggregates are returned in memory. If the caller is responsible 25912 for popping the hidden pointer together with the rest of the 25913 arguments, specify NUMBER equal to zero. If callee is responsible 25914 for popping the hidden pointer, specify NUMBER equal to one. 25915 25916 The default x86-32 ABI assumes that the callee pops the stack for 25917 hidden pointer. However, on x86-32 Microsoft Windows targets, the 25918 compiler assumes that the caller pops the stack for hidden pointer. 25919 25920`ms_hook_prologue' 25921 On 32-bit and 64-bit x86 targets, you can use this function 25922 attribute to make GCC generate the "hot-patching" function 25923 prologue used in Win32 API functions in Microsoft Windows XP 25924 Service Pack 2 and newer. 25925 25926`hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)' 25927 On S/390 System z targets, you can use this function attribute to 25928 make GCC generate a "hot-patching" function prologue. If the 25929 `-mhotpatch=' command-line option is used at the same time, the 25930 `hotpatch' attribute takes precedence. The first of the two 25931 arguments specifies the number of halfwords to be added before the 25932 function label. A second argument can be used to specify the 25933 number of halfwords to be added after the function label. For 25934 both arguments the maximum allowed value is 1000000. 25935 25936 If both arguments are zero, hotpatching is disabled. 25937 25938`naked' 25939 This attribute is available on the ARM, AVR, MCORE, MSP430, NDS32, 25940 RL78, RX and SPU ports. It allows the compiler to construct the 25941 requisite function declaration, while allowing the body of the 25942 function to be assembly code. The specified function will not have 25943 prologue/epilogue sequences generated by the compiler. Only basic 25944 `asm' statements can safely be included in naked functions (*note 25945 Basic Asm::). While using extended `asm' or a mixture of basic 25946 `asm' and C code may appear to work, they cannot be depended upon 25947 to work reliably and are not supported. 25948 25949`near' 25950 On MeP targets this attribute causes the compiler to assume the 25951 called function is close enough to use the normal calling 25952 convention, overriding the `-mtf' command-line option. 25953 25954`nesting' 25955 Use this attribute together with `interrupt_handler', 25956 `exception_handler' or `nmi_handler' to indicate that the function 25957 entry code should enable nested interrupts or exceptions. 25958 25959`nmi_handler' 25960 Use this attribute on the Blackfin to indicate that the specified 25961 function is an NMI handler. The compiler generates function entry 25962 and exit sequences suitable for use in an NMI handler when this 25963 attribute is present. 25964 25965`nocompression' 25966 On MIPS targets, you can use the `nocompression' function attribute 25967 to locally turn off MIPS16 and microMIPS code generation. This 25968 attribute overrides the `-mips16' and `-mmicromips' options on the 25969 command line (*note MIPS Options::). 25970 25971`no_instrument_function' 25972 If `-finstrument-functions' is given, profiling function calls are 25973 generated at entry and exit of most user-compiled functions. 25974 Functions with this attribute are not so instrumented. 25975 25976`no_split_stack' 25977 If `-fsplit-stack' is given, functions have a small prologue which 25978 decides whether to split the stack. Functions with the 25979 `no_split_stack' attribute do not have that prologue, and thus may 25980 run with only a small amount of stack space available. 25981 25982`stack_protect' 25983 This function attribute make a stack protection of the function if 25984 flags `fstack-protector' or `fstack-protector-strong' or 25985 `fstack-protector-explicit' are set. 25986 25987`noinline' 25988 This function attribute prevents a function from being considered 25989 for inlining. If the function does not have side-effects, there 25990 are optimizations other than inlining that cause function calls to 25991 be optimized away, although the function call is live. To keep 25992 such calls from being optimized away, put 25993 asm (""); 25994 25995 (*note Extended Asm::) in the called function, to serve as a 25996 special side-effect. 25997 25998`noclone' 25999 This function attribute prevents a function from being considered 26000 for cloning--a mechanism that produces specialized copies of 26001 functions and which is (currently) performed by interprocedural 26002 constant propagation. 26003 26004`no_icf' 26005 This function attribute prevents a functions from being merged 26006 with another semantically equivalent function. 26007 26008`nonnull (ARG-INDEX, ...)' 26009 The `nonnull' attribute specifies that some function parameters 26010 should be non-null pointers. For instance, the declaration: 26011 26012 extern void * 26013 my_memcpy (void *dest, const void *src, size_t len) 26014 __attribute__((nonnull (1, 2))); 26015 26016 causes the compiler to check that, in calls to `my_memcpy', 26017 arguments DEST and SRC are non-null. If the compiler determines 26018 that a null pointer is passed in an argument slot marked as 26019 non-null, and the `-Wnonnull' option is enabled, a warning is 26020 issued. The compiler may also choose to make optimizations based 26021 on the knowledge that certain function arguments will never be 26022 null. 26023 26024 If no argument index list is given to the `nonnull' attribute, all 26025 pointer arguments are marked as non-null. To illustrate, the 26026 following declaration is equivalent to the previous example: 26027 26028 extern void * 26029 my_memcpy (void *dest, const void *src, size_t len) 26030 __attribute__((nonnull)); 26031 26032`no_reorder' 26033 Do not reorder functions or variables marked `no_reorder' against 26034 each other or top level assembler statements the executable. The 26035 actual order in the program will depend on the linker command 26036 line. Static variables marked like this are also not removed. 26037 This has a similar effect as the `-fno-toplevel-reorder' option, 26038 but only applies to the marked symbols. 26039 26040`returns_nonnull' 26041 The `returns_nonnull' attribute specifies that the function return 26042 value should be a non-null pointer. For instance, the declaration: 26043 26044 extern void * 26045 mymalloc (size_t len) __attribute__((returns_nonnull)); 26046 26047 lets the compiler optimize callers based on the knowledge that the 26048 return value will never be null. 26049 26050`noreturn' 26051 A few standard library functions, such as `abort' and `exit', 26052 cannot return. GCC knows this automatically. Some programs define 26053 their own functions that never return. You can declare them 26054 `noreturn' to tell the compiler this fact. For example, 26055 26056 void fatal () __attribute__ ((noreturn)); 26057 26058 void 26059 fatal (/* ... */) 26060 { 26061 /* ... */ /* Print error message. */ /* ... */ 26062 exit (1); 26063 } 26064 26065 The `noreturn' keyword tells the compiler to assume that `fatal' 26066 cannot return. It can then optimize without regard to what would 26067 happen if `fatal' ever did return. This makes slightly better 26068 code. More importantly, it helps avoid spurious warnings of 26069 uninitialized variables. 26070 26071 The `noreturn' keyword does not affect the exceptional path when 26072 that applies: a `noreturn'-marked function may still return to the 26073 caller by throwing an exception or calling `longjmp'. 26074 26075 Do not assume that registers saved by the calling function are 26076 restored before calling the `noreturn' function. 26077 26078 It does not make sense for a `noreturn' function to have a return 26079 type other than `void'. 26080 26081`nothrow' 26082 The `nothrow' attribute is used to inform the compiler that a 26083 function cannot throw an exception. For example, most functions in 26084 the standard C library can be guaranteed not to throw an exception 26085 with the notable exceptions of `qsort' and `bsearch' that take 26086 function pointer arguments. 26087 26088`nosave_low_regs' 26089 Use this attribute on SH targets to indicate that an 26090 `interrupt_handler' function should not save and restore registers 26091 R0..R7. This can be used on SH3* and SH4* targets that have a 26092 second R0..R7 register bank for non-reentrant interrupt handlers. 26093 26094`optimize' 26095 The `optimize' attribute is used to specify that a function is to 26096 be compiled with different optimization options than specified on 26097 the command line. Arguments can either be numbers or strings. 26098 Numbers are assumed to be an optimization level. Strings that 26099 begin with `O' are assumed to be an optimization option, while 26100 other options are assumed to be used with a `-f' prefix. You can 26101 also use the `#pragma GCC optimize' pragma to set the optimization 26102 options that affect more than one function. *Note Function 26103 Specific Option Pragmas::, for details about the `#pragma GCC 26104 optimize' pragma. 26105 26106 This can be used for instance to have frequently-executed functions 26107 compiled with more aggressive optimization options that produce 26108 faster and larger code, while other functions can be compiled with 26109 less aggressive options. 26110 26111`OS_main' 26112`OS_task' 26113 On AVR, functions with the `OS_main' or `OS_task' attribute do not 26114 save/restore any call-saved register in their prologue/epilogue. 26115 26116 The `OS_main' attribute can be used when there _is guarantee_ that 26117 interrupts are disabled at the time when the function is entered. 26118 This saves resources when the stack pointer has to be changed to 26119 set up a frame for local variables. 26120 26121 The `OS_task' attribute can be used when there is _no guarantee_ 26122 that interrupts are disabled at that time when the function is 26123 entered like for, e.g. task functions in a multi-threading 26124 operating system. In that case, changing the stack pointer 26125 register is guarded by save/clear/restore of the global interrupt 26126 enable flag. 26127 26128 The differences to the `naked' function attribute are: 26129 * `naked' functions do not have a return instruction whereas 26130 `OS_main' and `OS_task' functions have a `RET' or `RETI' 26131 return instruction. 26132 26133 * `naked' functions do not set up a frame for local variables 26134 or a frame pointer whereas `OS_main' and `OS_task' do this as 26135 needed. 26136 26137`pcs' 26138 The `pcs' attribute can be used to control the calling convention 26139 used for a function on ARM. The attribute takes an argument that 26140 specifies the calling convention to use. 26141 26142 When compiling using the AAPCS ABI (or a variant of it) then valid 26143 values for the argument are `"aapcs"' and `"aapcs-vfp"'. In order 26144 to use a variant other than `"aapcs"' then the compiler must be 26145 permitted to use the appropriate co-processor registers (i.e., the 26146 VFP registers must be available in order to use `"aapcs-vfp"'). 26147 For example, 26148 26149 /* Argument passed in r0, and result returned in r0+r1. */ 26150 double f2d (float) __attribute__((pcs("aapcs"))); 26151 26152 Variadic functions always use the `"aapcs"' calling convention and 26153 the compiler rejects attempts to specify an alternative. 26154 26155`pure' 26156 Many functions have no effects except the return value and their 26157 return value depends only on the parameters and/or global 26158 variables. Such a function can be subject to common subexpression 26159 elimination and loop optimization just as an arithmetic operator 26160 would be. These functions should be declared with the attribute 26161 `pure'. For example, 26162 26163 int square (int) __attribute__ ((pure)); 26164 26165 says that the hypothetical function `square' is safe to call fewer 26166 times than the program says. 26167 26168 Some of common examples of pure functions are `strlen' or `memcmp'. 26169 Interesting non-pure functions are functions with infinite loops 26170 or those depending on volatile memory or other system resource, 26171 that may change between two consecutive calls (such as `feof' in a 26172 multithreading environment). 26173 26174`hot' 26175 The `hot' attribute on a function is used to inform the compiler 26176 that the function is a hot spot of the compiled program. The 26177 function is optimized more aggressively and on many targets it is 26178 placed into a special subsection of the text section so all hot 26179 functions appear close together, improving locality. 26180 26181 When profile feedback is available, via `-fprofile-use', hot 26182 functions are automatically detected and this attribute is ignored. 26183 26184`cold' 26185 The `cold' attribute on functions is used to inform the compiler 26186 that the function is unlikely to be executed. The function is 26187 optimized for size rather than speed and on many targets it is 26188 placed into a special subsection of the text section so all cold 26189 functions appear close together, improving code locality of 26190 non-cold parts of program. The paths leading to calls of cold 26191 functions within code are marked as unlikely by the branch 26192 prediction mechanism. It is thus useful to mark functions used to 26193 handle unlikely conditions, such as `perror', as cold to improve 26194 optimization of hot functions that do call marked functions in 26195 rare occasions. 26196 26197 When profile feedback is available, via `-fprofile-use', cold 26198 functions are automatically detected and this attribute is ignored. 26199 26200`no_sanitize_address' 26201`no_address_safety_analysis' 26202 The `no_sanitize_address' attribute on functions is used to inform 26203 the compiler that it should not instrument memory accesses in the 26204 function when compiling with the `-fsanitize=address' option. The 26205 `no_address_safety_analysis' is a deprecated alias of the 26206 `no_sanitize_address' attribute, new code should use 26207 `no_sanitize_address'. 26208 26209`no_sanitize_thread' 26210 The `no_sanitize_thread' attribute on functions is used to inform 26211 the compiler that it should not instrument memory accesses in the 26212 function when compiling with the `-fsanitize=thread' option. 26213 26214`no_sanitize_undefined' 26215 The `no_sanitize_undefined' attribute on functions is used to 26216 inform the compiler that it should not check for undefined behavior 26217 in the function when compiling with the `-fsanitize=undefined' 26218 option. 26219 26220`bnd_legacy' 26221 The `bnd_legacy' attribute on functions is used to inform the 26222 compiler that the function should not be instrumented when compiled 26223 with the `-fcheck-pointer-bounds' option. 26224 26225`bnd_instrument' 26226 The `bnd_instrument' attribute on functions is used to inform the 26227 compiler that the function should be instrumented when compiled 26228 with the `-fchkp-instrument-marked-only' option. 26229 26230`regparm (NUMBER)' 26231 On x86-32 targets, the `regparm' attribute causes the compiler to 26232 pass arguments number one to NUMBER if they are of integral type 26233 in registers EAX, EDX, and ECX instead of on the stack. Functions 26234 that take a variable number of arguments continue to be passed all 26235 of their arguments on the stack. 26236 26237 Beware that on some ELF systems this attribute is unsuitable for 26238 global functions in shared libraries with lazy binding (which is 26239 the default). Lazy binding sends the first call via resolving 26240 code in the loader, which might assume EAX, EDX and ECX can be 26241 clobbered, as per the standard calling conventions. Solaris 8 is 26242 affected by this. Systems with the GNU C Library version 2.1 or 26243 higher and FreeBSD are believed to be safe since the loaders there 26244 save EAX, EDX and ECX. (Lazy binding can be disabled with the 26245 linker or the loader if desired, to avoid the problem.) 26246 26247`reset' 26248 Use this attribute on the NDS32 target to indicate that the 26249 specified function is a reset handler. The compiler will generate 26250 corresponding sections for use in a reset handler. You can use 26251 the following attributes to provide extra exception handling: 26252 `nmi' 26253 Provide a user-defined function to handle NMI exception. 26254 26255 `warm' 26256 Provide a user-defined function to handle warm reset 26257 exception. 26258 26259`sseregparm' 26260 On x86-32 targets with SSE support, the `sseregparm' attribute 26261 causes the compiler to pass up to 3 floating-point arguments in 26262 SSE registers instead of on the stack. Functions that take a 26263 variable number of arguments continue to pass all of their 26264 floating-point arguments on the stack. 26265 26266`force_align_arg_pointer' 26267 On x86 targets, the `force_align_arg_pointer' attribute may be 26268 applied to individual function definitions, generating an alternate 26269 prologue and epilogue that realigns the run-time stack if 26270 necessary. This supports mixing legacy codes that run with a 26271 4-byte aligned stack with modern codes that keep a 16-byte stack 26272 for SSE compatibility. 26273 26274`renesas' 26275 On SH targets this attribute specifies that the function or struct 26276 follows the Renesas ABI. 26277 26278`resbank' 26279 On the SH2A target, this attribute enables the high-speed register 26280 saving and restoration using a register bank for 26281 `interrupt_handler' routines. Saving to the bank is performed 26282 automatically after the CPU accepts an interrupt that uses a 26283 register bank. 26284 26285 The nineteen 32-bit registers comprising general register R0 to 26286 R14, control register GBR, and system registers MACH, MACL, and PR 26287 and the vector table address offset are saved into a register 26288 bank. Register banks are stacked in first-in last-out (FILO) 26289 sequence. Restoration from the bank is executed by issuing a 26290 RESBANK instruction. 26291 26292`returns_twice' 26293 The `returns_twice' attribute tells the compiler that a function 26294 may return more than one time. The compiler ensures that all 26295 registers are dead before calling such a function and emits a 26296 warning about the variables that may be clobbered after the second 26297 return from the function. Examples of such functions are `setjmp' 26298 and `vfork'. The `longjmp'-like counterpart of such function, if 26299 any, might need to be marked with the `noreturn' attribute. 26300 26301`saveall' 26302 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 26303 indicate that all registers except the stack pointer should be 26304 saved in the prologue regardless of whether they are used or not. 26305 26306`save_volatiles' 26307 Use this attribute on the MicroBlaze to indicate that the function 26308 is an interrupt handler. All volatile registers (in addition to 26309 non-volatile registers) are saved in the function prologue. If 26310 the function is a leaf function, only volatiles used by the 26311 function are saved. A normal function return is generated instead 26312 of a return from interrupt. 26313 26314`break_handler' 26315 Use this attribute on the MicroBlaze ports to indicate that the 26316 specified function is a break handler. The compiler generates 26317 function entry and exit sequences suitable for use in an break 26318 handler when this attribute is present. The return from 26319 `break_handler' is done through the `rtbd' instead of `rtsd'. 26320 26321 void f () __attribute__ ((break_handler)); 26322 26323`section ("SECTION-NAME")' 26324 Normally, the compiler places the code it generates in the `text' 26325 section. Sometimes, however, you need additional sections, or you 26326 need certain particular functions to appear in special sections. 26327 The `section' attribute specifies that a function lives in a 26328 particular section. For example, the declaration: 26329 26330 extern void foobar (void) __attribute__ ((section ("bar"))); 26331 26332 puts the function `foobar' in the `bar' section. 26333 26334 Some file formats do not support arbitrary sections so the 26335 `section' attribute is not available on all platforms. If you 26336 need to map the entire contents of a module to a particular 26337 section, consider using the facilities of the linker instead. 26338 26339`sentinel' 26340 This function attribute ensures that a parameter in a function 26341 call is an explicit `NULL'. The attribute is only valid on 26342 variadic functions. By default, the sentinel is located at 26343 position zero, the last parameter of the function call. If an 26344 optional integer position argument P is supplied to the attribute, 26345 the sentinel must be located at position P counting backwards from 26346 the end of the argument list. 26347 26348 __attribute__ ((sentinel)) 26349 is equivalent to 26350 __attribute__ ((sentinel(0))) 26351 26352 The attribute is automatically set with a position of 0 for the 26353 built-in functions `execl' and `execlp'. The built-in function 26354 `execle' has the attribute set with a position of 1. 26355 26356 A valid `NULL' in this context is defined as zero with any pointer 26357 type. If your system defines the `NULL' macro with an integer type 26358 then you need to add an explicit cast. GCC replaces `stddef.h' 26359 with a copy that redefines NULL appropriately. 26360 26361 The warnings for missing or incorrect sentinels are enabled with 26362 `-Wformat'. 26363 26364`short_call' 26365 See `long_call'. 26366 26367`shortcall' 26368 See `longcall'. 26369 26370`signal' 26371 Use this attribute on the AVR to indicate that the specified 26372 function is an interrupt handler. The compiler generates function 26373 entry and exit sequences suitable for use in an interrupt handler 26374 when this attribute is present. 26375 26376 See also the `interrupt' function attribute. 26377 26378 The AVR hardware globally disables interrupts when an interrupt is 26379 executed. Interrupt handler functions defined with the `signal' 26380 attribute do not re-enable interrupts. It is save to enable 26381 interrupts in a `signal' handler. This "save" only applies to the 26382 code generated by the compiler and not to the IRQ layout of the 26383 application which is responsibility of the application. 26384 26385 If both `signal' and `interrupt' are specified for the same 26386 function, `signal' is silently ignored. 26387 26388`sp_switch' 26389 Use this attribute on the SH to indicate an `interrupt_handler' 26390 function should switch to an alternate stack. It expects a string 26391 argument that names a global variable holding the address of the 26392 alternate stack. 26393 26394 void *alt_stack; 26395 void f () __attribute__ ((interrupt_handler, 26396 sp_switch ("alt_stack"))); 26397 26398`stdcall' 26399 On x86-32 targets, the `stdcall' attribute causes the compiler to 26400 assume that the called function pops off the stack space used to 26401 pass arguments, unless it takes a variable number of arguments. 26402 26403`syscall_linkage' 26404 This attribute is used to modify the IA-64 calling convention by 26405 marking all input registers as live at all function exits. This 26406 makes it possible to restart a system call after an interrupt 26407 without having to save/restore the input registers. This also 26408 prevents kernel data from leaking into application code. 26409 26410`target' 26411 The `target' attribute is used to specify that a function is to be 26412 compiled with different target options than specified on the 26413 command line. This can be used for instance to have functions 26414 compiled with a different ISA (instruction set architecture) than 26415 the default. You can also use the `#pragma GCC target' pragma to 26416 set more than one function to be compiled with specific target 26417 options. *Note Function Specific Option Pragmas::, for details 26418 about the `#pragma GCC target' pragma. 26419 26420 For instance on an x86, you could compile one function with 26421 `target("sse4.1,arch=core2")' and another with 26422 `target("sse4a,arch=amdfam10")'. This is equivalent to compiling 26423 the first function with `-msse4.1' and `-march=core2' options, and 26424 the second function with `-msse4a' and `-march=amdfam10' options. 26425 It is up to the user to make sure that a function is only invoked 26426 on a machine that supports the particular ISA it is compiled for 26427 (for example by using `cpuid' on x86 to determine what feature 26428 bits and architecture family are used). 26429 26430 int core2_func (void) __attribute__ ((__target__ ("arch=core2"))); 26431 int sse3_func (void) __attribute__ ((__target__ ("sse3"))); 26432 26433 You can either use multiple strings to specify multiple options, 26434 or separate the options with a comma (`,'). 26435 26436 The `target' attribute is presently implemented for x86, PowerPC, 26437 and Nios II targets only. The options supported are specific to 26438 each target. 26439 26440 On the x86, the following options are allowed: 26441 26442 `abm' 26443 `no-abm' 26444 Enable/disable the generation of the advanced bit 26445 instructions. 26446 26447 `aes' 26448 `no-aes' 26449 Enable/disable the generation of the AES instructions. 26450 26451 `default' 26452 *Note Function Multiversioning::, where it is used to specify 26453 the default function version. 26454 26455 `mmx' 26456 `no-mmx' 26457 Enable/disable the generation of the MMX instructions. 26458 26459 `pclmul' 26460 `no-pclmul' 26461 Enable/disable the generation of the PCLMUL instructions. 26462 26463 `popcnt' 26464 `no-popcnt' 26465 Enable/disable the generation of the POPCNT instruction. 26466 26467 `sse' 26468 `no-sse' 26469 Enable/disable the generation of the SSE instructions. 26470 26471 `sse2' 26472 `no-sse2' 26473 Enable/disable the generation of the SSE2 instructions. 26474 26475 `sse3' 26476 `no-sse3' 26477 Enable/disable the generation of the SSE3 instructions. 26478 26479 `sse4' 26480 `no-sse4' 26481 Enable/disable the generation of the SSE4 instructions (both 26482 SSE4.1 and SSE4.2). 26483 26484 `sse4.1' 26485 `no-sse4.1' 26486 Enable/disable the generation of the sse4.1 instructions. 26487 26488 `sse4.2' 26489 `no-sse4.2' 26490 Enable/disable the generation of the sse4.2 instructions. 26491 26492 `sse4a' 26493 `no-sse4a' 26494 Enable/disable the generation of the SSE4A instructions. 26495 26496 `fma4' 26497 `no-fma4' 26498 Enable/disable the generation of the FMA4 instructions. 26499 26500 `xop' 26501 `no-xop' 26502 Enable/disable the generation of the XOP instructions. 26503 26504 `lwp' 26505 `no-lwp' 26506 Enable/disable the generation of the LWP instructions. 26507 26508 `ssse3' 26509 `no-ssse3' 26510 Enable/disable the generation of the SSSE3 instructions. 26511 26512 `cld' 26513 `no-cld' 26514 Enable/disable the generation of the CLD before string moves. 26515 26516 `fancy-math-387' 26517 `no-fancy-math-387' 26518 Enable/disable the generation of the `sin', `cos', and `sqrt' 26519 instructions on the 387 floating-point unit. 26520 26521 `fused-madd' 26522 `no-fused-madd' 26523 Enable/disable the generation of the fused multiply/add 26524 instructions. 26525 26526 `ieee-fp' 26527 `no-ieee-fp' 26528 Enable/disable the generation of floating point that depends 26529 on IEEE arithmetic. 26530 26531 `inline-all-stringops' 26532 `no-inline-all-stringops' 26533 Enable/disable inlining of string operations. 26534 26535 `inline-stringops-dynamically' 26536 `no-inline-stringops-dynamically' 26537 Enable/disable the generation of the inline code to do small 26538 string operations and calling the library routines for large 26539 operations. 26540 26541 `align-stringops' 26542 `no-align-stringops' 26543 Do/do not align destination of inlined string operations. 26544 26545 `recip' 26546 `no-recip' 26547 Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and 26548 RSQRTPS instructions followed an additional Newton-Raphson 26549 step instead of doing a floating-point division. 26550 26551 `arch=ARCH' 26552 Specify the architecture to generate code for in compiling 26553 the function. 26554 26555 `tune=TUNE' 26556 Specify the architecture to tune for in compiling the 26557 function. 26558 26559 `fpmath=FPMATH' 26560 Specify which floating-point unit to use. The 26561 `target("fpmath=sse,387")' option must be specified as 26562 `target("fpmath=sse+387")' because the comma would separate 26563 different options. 26564 26565 On the PowerPC, the following options are allowed: 26566 26567 `altivec' 26568 `no-altivec' 26569 Generate code that uses (does not use) AltiVec instructions. 26570 In 32-bit code, you cannot enable AltiVec instructions unless 26571 `-mabi=altivec' is used on the command line. 26572 26573 `cmpb' 26574 `no-cmpb' 26575 Generate code that uses (does not use) the compare bytes 26576 instruction implemented on the POWER6 processor and other 26577 processors that support the PowerPC V2.05 architecture. 26578 26579 `dlmzb' 26580 `no-dlmzb' 26581 Generate code that uses (does not use) the string-search 26582 `dlmzb' instruction on the IBM 405, 440, 464 and 476 26583 processors. This instruction is generated by default when 26584 targeting those processors. 26585 26586 `fprnd' 26587 `no-fprnd' 26588 Generate code that uses (does not use) the FP round to integer 26589 instructions implemented on the POWER5+ processor and other 26590 processors that support the PowerPC V2.03 architecture. 26591 26592 `hard-dfp' 26593 `no-hard-dfp' 26594 Generate code that uses (does not use) the decimal 26595 floating-point instructions implemented on some POWER 26596 processors. 26597 26598 `isel' 26599 `no-isel' 26600 Generate code that uses (does not use) ISEL instruction. 26601 26602 `mfcrf' 26603 `no-mfcrf' 26604 Generate code that uses (does not use) the move from condition 26605 register field instruction implemented on the POWER4 26606 processor and other processors that support the PowerPC V2.01 26607 architecture. 26608 26609 `mfpgpr' 26610 `no-mfpgpr' 26611 Generate code that uses (does not use) the FP move to/from 26612 general purpose register instructions implemented on the 26613 POWER6X processor and other processors that support the 26614 extended PowerPC V2.05 architecture. 26615 26616 `mulhw' 26617 `no-mulhw' 26618 Generate code that uses (does not use) the half-word multiply 26619 and multiply-accumulate instructions on the IBM 405, 440, 464 26620 and 476 processors. These instructions are generated by 26621 default when targeting those processors. 26622 26623 `multiple' 26624 `no-multiple' 26625 Generate code that uses (does not use) the load multiple word 26626 instructions and the store multiple word instructions. 26627 26628 `update' 26629 `no-update' 26630 Generate code that uses (does not use) the load or store 26631 instructions that update the base register to the address of 26632 the calculated memory location. 26633 26634 `popcntb' 26635 `no-popcntb' 26636 Generate code that uses (does not use) the popcount and 26637 double-precision FP reciprocal estimate instruction 26638 implemented on the POWER5 processor and other processors that 26639 support the PowerPC V2.02 architecture. 26640 26641 `popcntd' 26642 `no-popcntd' 26643 Generate code that uses (does not use) the popcount 26644 instruction implemented on the POWER7 processor and other 26645 processors that support the PowerPC V2.06 architecture. 26646 26647 `powerpc-gfxopt' 26648 `no-powerpc-gfxopt' 26649 Generate code that uses (does not use) the optional PowerPC 26650 architecture instructions in the Graphics group, including 26651 floating-point select. 26652 26653 `powerpc-gpopt' 26654 `no-powerpc-gpopt' 26655 Generate code that uses (does not use) the optional PowerPC 26656 architecture instructions in the General Purpose group, 26657 including floating-point square root. 26658 26659 `recip-precision' 26660 `no-recip-precision' 26661 Assume (do not assume) that the reciprocal estimate 26662 instructions provide higher-precision estimates than is 26663 mandated by the PowerPC ABI. 26664 26665 `string' 26666 `no-string' 26667 Generate code that uses (does not use) the load string 26668 instructions and the store string word instructions to save 26669 multiple registers and do small block moves. 26670 26671 `vsx' 26672 `no-vsx' 26673 Generate code that uses (does not use) vector/scalar (VSX) 26674 instructions, and also enable the use of built-in functions 26675 that allow more direct access to the VSX instruction set. In 26676 32-bit code, you cannot enable VSX or AltiVec instructions 26677 unless `-mabi=altivec' is used on the command line. 26678 26679 `friz' 26680 `no-friz' 26681 Generate (do not generate) the `friz' instruction when the 26682 `-funsafe-math-optimizations' option is used to optimize 26683 rounding a floating-point value to 64-bit integer and back to 26684 floating point. The `friz' instruction does not return the 26685 same value if the floating-point number is too large to fit 26686 in an integer. 26687 26688 `avoid-indexed-addresses' 26689 `no-avoid-indexed-addresses' 26690 Generate code that tries to avoid (not avoid) the use of 26691 indexed load or store instructions. 26692 26693 `paired' 26694 `no-paired' 26695 Generate code that uses (does not use) the generation of 26696 PAIRED simd instructions. 26697 26698 `longcall' 26699 `no-longcall' 26700 Generate code that assumes (does not assume) that all calls 26701 are far away so that a longer more expensive calling sequence 26702 is required. 26703 26704 `cpu=CPU' 26705 Specify the architecture to generate code for when compiling 26706 the function. If you select the `target("cpu=power7")' 26707 attribute when generating 32-bit code, VSX and AltiVec 26708 instructions are not generated unless you use the 26709 `-mabi=altivec' option on the command line. 26710 26711 `tune=TUNE' 26712 Specify the architecture to tune for when compiling the 26713 function. If you do not specify the `target("tune=TUNE")' 26714 attribute and you do specify the `target("cpu=CPU")' 26715 attribute, compilation tunes for the CPU architecture, and 26716 not the default tuning specified on the command line. 26717 26718 When compiling for Nios II, the following options are allowed: 26719 26720 `custom-INSN=N' 26721 `no-custom-INSN' 26722 Each `custom-INSN=N' attribute locally enables use of a 26723 custom instruction with encoding N when generating code that 26724 uses INSN. Similarly, `no-custom-INSN' locally inhibits use 26725 of the custom instruction INSN. These target attributes 26726 correspond to the `-mcustom-INSN=N' and `-mno-custom-INSN' 26727 command-line options, and support the same set of INSN 26728 keywords. *Note Nios II Options::, for more information. 26729 26730 `custom-fpu-cfg=NAME' 26731 This attribute corresponds to the `-mcustom-fpu-cfg=NAME' 26732 command-line option, to select a predefined set of custom 26733 instructions named NAME. *Note Nios II Options::, for more 26734 information. 26735 26736 On the x86 and PowerPC back ends, the inliner does not inline a 26737 function that has different target options than the caller, unless 26738 the callee has a subset of the target options of the caller. For 26739 example a function declared with `target("sse3")' can inline a 26740 function with `target("sse2")', since `-msse3' implies `-msse2'. 26741 26742`trap_exit' 26743 Use this attribute on the SH for an `interrupt_handler' to return 26744 using `trapa' instead of `rte'. This attribute expects an integer 26745 argument specifying the trap number to be used. 26746 26747`trapa_handler' 26748 On SH targets this function attribute is similar to 26749 `interrupt_handler' but it does not save and restore all registers. 26750 26751`unused' 26752 This attribute, attached to a function, means that the function is 26753 meant to be possibly unused. GCC does not produce a warning for 26754 this function. 26755 26756`used' 26757 This attribute, attached to a function, means that code must be 26758 emitted for the function even if it appears that the function is 26759 not referenced. This is useful, for example, when the function is 26760 referenced only in inline assembly. 26761 26762 When applied to a member function of a C++ class template, the 26763 attribute also means that the function is instantiated if the 26764 class itself is instantiated. 26765 26766`vector' 26767 This RX attribute is similar to the `interrupt' attribute, 26768 including its parameters, but does not make the function an 26769 interrupt-handler type function (i.e. it retains the normal C 26770 function calling ABI). See the `interrupt' attribute for a 26771 description of its arguments. 26772 26773`version_id' 26774 This IA-64 HP-UX attribute, attached to a global variable or 26775 function, renames a symbol to contain a version string, thus 26776 allowing for function level versioning. HP-UX system header files 26777 may use function level versioning for some system calls. 26778 26779 extern int foo () __attribute__((version_id ("20040821"))); 26780 26781 Calls to FOO are mapped to calls to FOO{20040821}. 26782 26783`visibility ("VISIBILITY_TYPE")' 26784 This attribute affects the linkage of the declaration to which it 26785 is attached. There are four supported VISIBILITY_TYPE values: 26786 default, hidden, protected or internal visibility. 26787 26788 void __attribute__ ((visibility ("protected"))) 26789 f () { /* Do something. */; } 26790 int i __attribute__ ((visibility ("hidden"))); 26791 26792 The possible values of VISIBILITY_TYPE correspond to the 26793 visibility settings in the ELF gABI. 26794 26795 "default" 26796 Default visibility is the normal case for the object file 26797 format. This value is available for the visibility attribute 26798 to override other options that may change the assumed 26799 visibility of entities. 26800 26801 On ELF, default visibility means that the declaration is 26802 visible to other modules and, in shared libraries, means that 26803 the declared entity may be overridden. 26804 26805 On Darwin, default visibility means that the declaration is 26806 visible to other modules. 26807 26808 Default visibility corresponds to "external linkage" in the 26809 language. 26810 26811 "hidden" 26812 Hidden visibility indicates that the entity declared has a new 26813 form of linkage, which we call "hidden linkage". Two 26814 declarations of an object with hidden linkage refer to the 26815 same object if they are in the same shared object. 26816 26817 "internal" 26818 Internal visibility is like hidden visibility, but with 26819 additional processor specific semantics. Unless otherwise 26820 specified by the psABI, GCC defines internal visibility to 26821 mean that a function is _never_ called from another module. 26822 Compare this with hidden functions which, while they cannot 26823 be referenced directly by other modules, can be referenced 26824 indirectly via function pointers. By indicating that a 26825 function cannot be called from outside the module, GCC may 26826 for instance omit the load of a PIC register since it is known 26827 that the calling function loaded the correct value. 26828 26829 "protected" 26830 Protected visibility is like default visibility except that it 26831 indicates that references within the defining module bind to 26832 the definition in that module. That is, the declared entity 26833 cannot be overridden by another module. 26834 26835 26836 All visibilities are supported on many, but not all, ELF targets 26837 (supported when the assembler supports the `.visibility' 26838 pseudo-op). Default visibility is supported everywhere. Hidden 26839 visibility is supported on Darwin targets. 26840 26841 The visibility attribute should be applied only to declarations 26842 that would otherwise have external linkage. The attribute should 26843 be applied consistently, so that the same entity should not be 26844 declared with different settings of the attribute. 26845 26846 In C++, the visibility attribute applies to types as well as 26847 functions and objects, because in C++ types have linkage. A class 26848 must not have greater visibility than its non-static data member 26849 types and bases, and class members default to the visibility of 26850 their class. Also, a declaration without explicit visibility is 26851 limited to the visibility of its type. 26852 26853 In C++, you can mark member functions and static member variables 26854 of a class with the visibility attribute. This is useful if you 26855 know a particular method or static member variable should only be 26856 used from one shared object; then you can mark it hidden while the 26857 rest of the class has default visibility. Care must be taken to 26858 avoid breaking the One Definition Rule; for example, it is usually 26859 not useful to mark an inline method as hidden without marking the 26860 whole class as hidden. 26861 26862 A C++ namespace declaration can also have the visibility attribute. 26863 26864 namespace nspace1 __attribute__ ((visibility ("protected"))) 26865 { /* Do something. */; } 26866 26867 This attribute applies only to the particular namespace body, not 26868 to other definitions of the same namespace; it is equivalent to 26869 using `#pragma GCC visibility' before and after the namespace 26870 definition (*note Visibility Pragmas::). 26871 26872 In C++, if a template argument has limited visibility, this 26873 restriction is implicitly propagated to the template instantiation. 26874 Otherwise, template instantiations and specializations default to 26875 the visibility of their template. 26876 26877 If both the template and enclosing class have explicit visibility, 26878 the visibility from the template is used. 26879 26880`vliw' 26881 On MeP, the `vliw' attribute tells the compiler to emit 26882 instructions in VLIW mode instead of core mode. Note that this 26883 attribute is not allowed unless a VLIW coprocessor has been 26884 configured and enabled through command-line options. 26885 26886`warn_unused_result' 26887 The `warn_unused_result' attribute causes a warning to be emitted 26888 if a caller of the function with this attribute does not use its 26889 return value. This is useful for functions where not checking the 26890 result is either a security problem or always a bug, such as 26891 `realloc'. 26892 26893 int fn () __attribute__ ((warn_unused_result)); 26894 int foo () 26895 { 26896 if (fn () < 0) return -1; 26897 fn (); 26898 return 0; 26899 } 26900 26901 results in warning on line 5. 26902 26903`weak' 26904 The `weak' attribute causes the declaration to be emitted as a weak 26905 symbol rather than a global. This is primarily useful in defining 26906 library functions that can be overridden in user code, though it 26907 can also be used with non-function declarations. Weak symbols are 26908 supported for ELF targets, and also for a.out targets when using 26909 the GNU assembler and linker. 26910 26911`weakref' 26912`weakref ("TARGET")' 26913 The `weakref' attribute marks a declaration as a weak reference. 26914 Without arguments, it should be accompanied by an `alias' attribute 26915 naming the target symbol. Optionally, the TARGET may be given as 26916 an argument to `weakref' itself. In either case, `weakref' 26917 implicitly marks the declaration as `weak'. Without a TARGET, 26918 given as an argument to `weakref' or to `alias', `weakref' is 26919 equivalent to `weak'. 26920 26921 static int x() __attribute__ ((weakref ("y"))); 26922 /* is equivalent to... */ 26923 static int x() __attribute__ ((weak, weakref, alias ("y"))); 26924 /* and to... */ 26925 static int x() __attribute__ ((weakref)); 26926 static int x() __attribute__ ((alias ("y"))); 26927 26928 A weak reference is an alias that does not by itself require a 26929 definition to be given for the target symbol. If the target 26930 symbol is only referenced through weak references, then it becomes 26931 a `weak' undefined symbol. If it is directly referenced, however, 26932 then such strong references prevail, and a definition is required 26933 for the symbol, not necessarily in the same translation unit. 26934 26935 The effect is equivalent to moving all references to the alias to a 26936 separate translation unit, renaming the alias to the aliased 26937 symbol, declaring it as weak, compiling the two separate 26938 translation units and performing a reloadable link on them. 26939 26940 At present, a declaration to which `weakref' is attached can only 26941 be `static'. 26942 26943 26944 You can specify multiple attributes in a declaration by separating them 26945by commas within the double parentheses or by immediately following an 26946attribute declaration with another attribute declaration. 26947 26948 Some people object to the `__attribute__' feature, suggesting that ISO 26949C's `#pragma' should be used instead. At the time `__attribute__' was 26950designed, there were two reasons for not doing this. 26951 26952 1. It is impossible to generate `#pragma' commands from a macro. 26953 26954 2. There is no telling what the same `#pragma' might mean in another 26955 compiler. 26956 26957 These two reasons applied to almost any application that might have 26958been proposed for `#pragma'. It was basically a mistake to use 26959`#pragma' for _anything_. 26960 26961 The ISO C99 standard includes `_Pragma', which now allows pragmas to 26962be generated from macros. In addition, a `#pragma GCC' namespace is 26963now in use for GCC-specific pragmas. However, it has been found 26964convenient to use `__attribute__' to achieve a natural attachment of 26965attributes to their corresponding declarations, whereas `#pragma GCC' 26966is of use for constructs that do not naturally form part of the 26967grammar. *Note Pragmas Accepted by GCC: Pragmas. 26968 26969 26970File: gcc.info, Node: Label Attributes, Next: Attribute Syntax, Prev: Function Attributes, Up: C Extensions 26971 269726.32 Label Attributes 26973===================== 26974 26975GCC allows attributes to be set on C labels. *Note Attribute Syntax::, 26976for details of the exact syntax for using attributes. Other attributes 26977are available for functions (*note Function Attributes::), variables 26978(*note Variable Attributes::) and for types (*note Type Attributes::). 26979 26980 This example uses the `cold' label attribute to indicate the 26981`ErrorHandling' branch is unlikely to be taken and that the 26982`ErrorHandling' label is unused: 26983 26984 26985 asm goto ("some asm" : : : : NoError); 26986 26987 /* This branch (the fall-through from the asm) is less commonly used */ 26988 ErrorHandling: 26989 __attribute__((cold, unused)); /* Semi-colon is required here */ 26990 printf("error\n"); 26991 return 0; 26992 26993 NoError: 26994 printf("no error\n"); 26995 return 1; 26996 26997`unused' 26998 This feature is intended for program-generated code that may 26999 contain unused labels, but which is compiled with `-Wall'. It is 27000 not normally appropriate to use in it human-written code, though it 27001 could be useful in cases where the code that jumps to the label is 27002 contained within an `#ifdef' conditional. 27003 27004`hot' 27005 The `hot' attribute on a label is used to inform the compiler that 27006 the path following the label is more likely than paths that are 27007 not so annotated. This attribute is used in cases where 27008 `__builtin_expect' cannot be used, for instance with computed goto 27009 or `asm goto'. 27010 27011`cold' 27012 The `cold' attribute on labels is used to inform the compiler that 27013 the path following the label is unlikely to be executed. This 27014 attribute is used in cases where `__builtin_expect' cannot be 27015 used, for instance with computed goto or `asm goto'. 27016 27017 27018 27019File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Label Attributes, Up: C Extensions 27020 270216.33 Attribute Syntax 27022===================== 27023 27024This section describes the syntax with which `__attribute__' may be 27025used, and the constructs to which attribute specifiers bind, for the C 27026language. Some details may vary for C++ and Objective-C. Because of 27027infelicities in the grammar for attributes, some forms described here 27028may not be successfully parsed in all cases. 27029 27030 There are some problems with the semantics of attributes in C++. For 27031example, there are no manglings for attributes, although they may affect 27032code generation, so problems may arise when attributed types are used in 27033conjunction with templates or overloading. Similarly, `typeid' does 27034not distinguish between types with different attributes. Support for 27035attributes in C++ may be restricted in future to attributes on 27036declarations only, but not on nested declarators. 27037 27038 *Note Function Attributes::, for details of the semantics of attributes 27039applying to functions. *Note Variable Attributes::, for details of the 27040semantics of attributes applying to variables. *Note Type Attributes::, 27041for details of the semantics of attributes applying to structure, union 27042and enumerated types. *Note Label Attributes::, for details of the 27043semantics of attributes applying to labels. 27044 27045 An "attribute specifier" is of the form `__attribute__ 27046((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 27047comma-separated sequence of "attributes", where each attribute is one 27048of the following: 27049 27050 * Empty. Empty attributes are ignored. 27051 27052 * A word (which may be an identifier such as `unused', or a reserved 27053 word such as `const'). 27054 27055 * A word, followed by, in parentheses, parameters for the attribute. 27056 These parameters take one of the following forms: 27057 27058 * An identifier. For example, `mode' attributes use this form. 27059 27060 * An identifier followed by a comma and a non-empty 27061 comma-separated list of expressions. For example, `format' 27062 attributes use this form. 27063 27064 * A possibly empty comma-separated list of expressions. For 27065 example, `format_arg' attributes use this form with the list 27066 being a single integer constant expression, and `alias' 27067 attributes use this form with the list being a single string 27068 constant. 27069 27070 An "attribute specifier list" is a sequence of one or more attribute 27071specifiers, not separated by any other tokens. 27072 27073Label Attributes 27074................ 27075 27076In GNU C, an attribute specifier list may appear after the colon 27077following a label, other than a `case' or `default' label. GNU C++ 27078only permits attributes on labels if the attribute specifier is 27079immediately followed by a semicolon (i.e., the label applies to an empty 27080statement). If the semicolon is missing, C++ label attributes are 27081ambiguous, as it is permissible for a declaration, which could begin 27082with an attribute list, to be labelled in C++. Declarations cannot be 27083labelled in C90 or C99, so the ambiguity does not arise there. 27084 27085Type Attributes 27086............... 27087 27088An attribute specifier list may appear as part of a `struct', `union' 27089or `enum' specifier. It may go either immediately after the `struct', 27090`union' or `enum' keyword, or after the closing brace. The former 27091syntax is preferred. Where attribute specifiers follow the closing 27092brace, they are considered to relate to the structure, union or 27093enumerated type defined, not to any enclosing declaration the type 27094specifier appears in, and the type defined is not complete until after 27095the attribute specifiers. 27096 27097All other attributes 27098.................... 27099 27100Otherwise, an attribute specifier appears as part of a declaration, 27101counting declarations of unnamed parameters and type names, and relates 27102to that declaration (which may be nested in another declaration, for 27103example in the case of a parameter declaration), or to a particular 27104declarator within a declaration. Where an attribute specifier is 27105applied to a parameter declared as a function or an array, it should 27106apply to the function or array rather than the pointer to which the 27107parameter is implicitly converted, but this is not yet correctly 27108implemented. 27109 27110 Any list of specifiers and qualifiers at the start of a declaration may 27111contain attribute specifiers, whether or not such a list may in that 27112context contain storage class specifiers. (Some attributes, however, 27113are essentially in the nature of storage class specifiers, and only make 27114sense where storage class specifiers may be used; for example, 27115`section'.) There is one necessary limitation to this syntax: the 27116first old-style parameter declaration in a function definition cannot 27117begin with an attribute specifier, because such an attribute applies to 27118the function instead by syntax described below (which, however, is not 27119yet implemented in this case). In some other cases, attribute 27120specifiers are permitted by this grammar but not yet supported by the 27121compiler. All attribute specifiers in this place relate to the 27122declaration as a whole. In the obsolescent usage where a type of `int' 27123is implied by the absence of type specifiers, such a list of specifiers 27124and qualifiers may be an attribute specifier list with no other 27125specifiers or qualifiers. 27126 27127 At present, the first parameter in a function prototype must have some 27128type specifier that is not an attribute specifier; this resolves an 27129ambiguity in the interpretation of `void f(int (__attribute__((foo)) 27130x))', but is subject to change. At present, if the parentheses of a 27131function declarator contain only attributes then those attributes are 27132ignored, rather than yielding an error or warning or implying a single 27133parameter of type int, but this is subject to change. 27134 27135 An attribute specifier list may appear immediately before a declarator 27136(other than the first) in a comma-separated list of declarators in a 27137declaration of more than one identifier using a single list of 27138specifiers and qualifiers. Such attribute specifiers apply only to the 27139identifier before whose declarator they appear. For example, in 27140 27141 __attribute__((noreturn)) void d0 (void), 27142 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 27143 d2 (void); 27144 27145the `noreturn' attribute applies to all the functions declared; the 27146`format' attribute only applies to `d1'. 27147 27148 An attribute specifier list may appear immediately before the comma, 27149`=' or semicolon terminating the declaration of an identifier other 27150than a function definition. Such attribute specifiers apply to the 27151declared object or function. Where an assembler name for an object or 27152function is specified (*note Asm Labels::), the attribute must follow 27153the `asm' specification. 27154 27155 An attribute specifier list may, in future, be permitted to appear 27156after the declarator in a function definition (before any old-style 27157parameter declarations or the function body). 27158 27159 Attribute specifiers may be mixed with type qualifiers appearing inside 27160the `[]' of a parameter array declarator, in the C99 construct by which 27161such qualifiers are applied to the pointer to which the array is 27162implicitly converted. Such attribute specifiers apply to the pointer, 27163not to the array, but at present this is not implemented and they are 27164ignored. 27165 27166 An attribute specifier list may appear at the start of a nested 27167declarator. At present, there are some limitations in this usage: the 27168attributes correctly apply to the declarator, but for most individual 27169attributes the semantics this implies are not implemented. When 27170attribute specifiers follow the `*' of a pointer declarator, they may 27171be mixed with any type qualifiers present. The following describes the 27172formal semantics of this syntax. It makes the most sense if you are 27173familiar with the formal specification of declarators in the ISO C 27174standard. 27175 27176 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 27177where `T' contains declaration specifiers that specify a type TYPE 27178(such as `int') and `D1' is a declarator that contains an identifier 27179IDENT. The type specified for IDENT for derived declarators whose type 27180does not include an attribute specifier is as in the ISO C standard. 27181 27182 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 27183declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 27184TYPE" for IDENT, then `T D1' specifies the type 27185"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 27186 27187 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 27188D', and the declaration `T D' specifies the type 27189"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 27190the type "DERIVED-DECLARATOR-TYPE-LIST 27191TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT. 27192 27193 For example, 27194 27195 void (__attribute__((noreturn)) ****f) (void); 27196 27197specifies the type "pointer to pointer to pointer to pointer to 27198non-returning function returning `void'". As another example, 27199 27200 char *__attribute__((aligned(8))) *f; 27201 27202specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 27203again that this does not work with most attributes; for example, the 27204usage of `aligned' and `noreturn' attributes given above is not yet 27205supported. 27206 27207 For compatibility with existing code written for compiler versions that 27208did not implement attributes on nested declarators, some laxity is 27209allowed in the placing of attributes. If an attribute that only applies 27210to types is applied to a declaration, it is treated as applying to the 27211type of that declaration. If an attribute that only applies to 27212declarations is applied to the type of a declaration, it is treated as 27213applying to that declaration; and, for compatibility with code placing 27214the attributes immediately before the identifier declared, such an 27215attribute applied to a function return type is treated as applying to 27216the function type, and such an attribute applied to an array element 27217type is treated as applying to the array type. If an attribute that 27218only applies to function types is applied to a pointer-to-function 27219type, it is treated as applying to the pointer target type; if such an 27220attribute is applied to a function return type that is not a 27221pointer-to-function type, it is treated as applying to the function 27222type. 27223 27224 27225File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 27226 272276.34 Prototypes and Old-Style Function Definitions 27228================================================== 27229 27230GNU C extends ISO C to allow a function prototype to override a later 27231old-style non-prototype definition. Consider the following example: 27232 27233 /* Use prototypes unless the compiler is old-fashioned. */ 27234 #ifdef __STDC__ 27235 #define P(x) x 27236 #else 27237 #define P(x) () 27238 #endif 27239 27240 /* Prototype function declaration. */ 27241 int isroot P((uid_t)); 27242 27243 /* Old-style function definition. */ 27244 int 27245 isroot (x) /* ??? lossage here ??? */ 27246 uid_t x; 27247 { 27248 return x == 0; 27249 } 27250 27251 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 27252this example, because subword arguments in old-style non-prototype 27253definitions are promoted. Therefore in this example the function 27254definition's argument is really an `int', which does not match the 27255prototype argument type of `short'. 27256 27257 This restriction of ISO C makes it hard to write code that is portable 27258to traditional C compilers, because the programmer does not know 27259whether the `uid_t' type is `short', `int', or `long'. Therefore, in 27260cases like these GNU C allows a prototype to override a later old-style 27261definition. More precisely, in GNU C, a function prototype argument 27262type overrides the argument type specified by a later old-style 27263definition if the former type is the same as the latter type before 27264promotion. Thus in GNU C the above example is equivalent to the 27265following: 27266 27267 int isroot (uid_t); 27268 27269 int 27270 isroot (uid_t x) 27271 { 27272 return x == 0; 27273 } 27274 27275GNU C++ does not support old-style function definitions, so this 27276extension is irrelevant. 27277 27278 27279File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 27280 272816.35 C++ Style Comments 27282======================= 27283 27284In GNU C, you may use C++ style comments, which start with `//' and 27285continue until the end of the line. Many other C implementations allow 27286such comments, and they are included in the 1999 C standard. However, 27287C++ style comments are not recognized if you specify an `-std' option 27288specifying a version of ISO C before C99, or `-ansi' (equivalent to 27289`-std=c90'). 27290 27291 27292File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 27293 272946.36 Dollar Signs in Identifier Names 27295===================================== 27296 27297In GNU C, you may normally use dollar signs in identifier names. This 27298is because many traditional C implementations allow such identifiers. 27299However, dollar signs in identifiers are not supported on a few target 27300machines, typically because the target assembler does not allow them. 27301 27302 27303File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 27304 273056.37 The Character <ESC> in Constants 27306===================================== 27307 27308You can use the sequence `\e' in a string or character constant to 27309stand for the ASCII character <ESC>. 27310 27311 27312File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 27313 273146.38 Specifying Attributes of Variables 27315======================================= 27316 27317The keyword `__attribute__' allows you to specify special attributes of 27318variables or structure fields. This keyword is followed by an 27319attribute specification inside double parentheses. Some attributes are 27320currently defined generically for variables. Other attributes are 27321defined for variables on particular target systems. Other attributes 27322are available for functions (*note Function Attributes::), labels 27323(*note Label Attributes::) and for types (*note Type Attributes::). 27324Other front ends might define more attributes (*note Extensions to the 27325C++ Language: C++ Extensions.). 27326 27327 You may also specify attributes with `__' preceding and following each 27328keyword. This allows you to use them in header files without being 27329concerned about a possible macro of the same name. For example, you 27330may use `__aligned__' instead of `aligned'. 27331 27332 *Note Attribute Syntax::, for details of the exact syntax for using 27333attributes. 27334 27335`aligned (ALIGNMENT)' 27336 This attribute specifies a minimum alignment for the variable or 27337 structure field, measured in bytes. For example, the declaration: 27338 27339 int x __attribute__ ((aligned (16))) = 0; 27340 27341 causes the compiler to allocate the global variable `x' on a 27342 16-byte boundary. On a 68040, this could be used in conjunction 27343 with an `asm' expression to access the `move16' instruction which 27344 requires 16-byte aligned operands. 27345 27346 You can also specify the alignment of structure fields. For 27347 example, to create a double-word aligned `int' pair, you could 27348 write: 27349 27350 struct foo { int x[2] __attribute__ ((aligned (8))); }; 27351 27352 This is an alternative to creating a union with a `double' member, 27353 which forces the union to be double-word aligned. 27354 27355 As in the preceding examples, you can explicitly specify the 27356 alignment (in bytes) that you wish the compiler to use for a given 27357 variable or structure field. Alternatively, you can leave out the 27358 alignment factor and just ask the compiler to align a variable or 27359 field to the default alignment for the target architecture you are 27360 compiling for. The default alignment is sufficient for all scalar 27361 types, but may not be enough for all vector types on a target that 27362 supports vector operations. The default alignment is fixed for a 27363 particular target ABI. 27364 27365 GCC also provides a target specific macro `__BIGGEST_ALIGNMENT__', 27366 which is the largest alignment ever used for any data type on the 27367 target machine you are compiling for. For example, you could 27368 write: 27369 27370 short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__))); 27371 27372 The compiler automatically sets the alignment for the declared 27373 variable or field to `__BIGGEST_ALIGNMENT__'. Doing this can 27374 often make copy operations more efficient, because the compiler can 27375 use whatever instructions copy the biggest chunks of memory when 27376 performing copies to or from the variables or fields that you have 27377 aligned this way. Note that the value of `__BIGGEST_ALIGNMENT__' 27378 may change depending on command-line options. 27379 27380 When used on a struct, or struct member, the `aligned' attribute 27381 can only increase the alignment; in order to decrease it, the 27382 `packed' attribute must be specified as well. When used as part 27383 of a typedef, the `aligned' attribute can both increase and 27384 decrease alignment, and specifying the `packed' attribute 27385 generates a warning. 27386 27387 Note that the effectiveness of `aligned' attributes may be limited 27388 by inherent limitations in your linker. On many systems, the 27389 linker is only able to arrange for variables to be aligned up to a 27390 certain maximum alignment. (For some linkers, the maximum 27391 supported alignment may be very very small.) If your linker is 27392 only able to align variables up to a maximum of 8-byte alignment, 27393 then specifying `aligned(16)' in an `__attribute__' still only 27394 provides you with 8-byte alignment. See your linker documentation 27395 for further information. 27396 27397 The `aligned' attribute can also be used for functions (*note 27398 Function Attributes::.) 27399 27400`cleanup (CLEANUP_FUNCTION)' 27401 The `cleanup' attribute runs a function when the variable goes out 27402 of scope. This attribute can only be applied to auto function 27403 scope variables; it may not be applied to parameters or variables 27404 with static storage duration. The function must take one 27405 parameter, a pointer to a type compatible with the variable. The 27406 return value of the function (if any) is ignored. 27407 27408 If `-fexceptions' is enabled, then CLEANUP_FUNCTION is run during 27409 the stack unwinding that happens during the processing of the 27410 exception. Note that the `cleanup' attribute does not allow the 27411 exception to be caught, only to perform an action. It is 27412 undefined what happens if CLEANUP_FUNCTION does not return 27413 normally. 27414 27415`common' 27416`nocommon' 27417 The `common' attribute requests GCC to place a variable in 27418 "common" storage. The `nocommon' attribute requests the 27419 opposite--to allocate space for it directly. 27420 27421 These attributes override the default chosen by the `-fno-common' 27422 and `-fcommon' flags respectively. 27423 27424`deprecated' 27425`deprecated (MSG)' 27426 The `deprecated' attribute results in a warning if the variable is 27427 used anywhere in the source file. This is useful when identifying 27428 variables that are expected to be removed in a future version of a 27429 program. The warning also includes the location of the declaration 27430 of the deprecated variable, to enable users to easily find further 27431 information about why the variable is deprecated, or what they 27432 should do instead. Note that the warning only occurs for uses: 27433 27434 extern int old_var __attribute__ ((deprecated)); 27435 extern int old_var; 27436 int new_fn () { return old_var; } 27437 27438 results in a warning on line 3 but not line 2. The optional MSG 27439 argument, which must be a string, is printed in the warning if 27440 present. 27441 27442 The `deprecated' attribute can also be used for functions and 27443 types (*note Function Attributes::, *note Type Attributes::.) 27444 27445`mode (MODE)' 27446 This attribute specifies the data type for the 27447 declaration--whichever type corresponds to the mode MODE. This in 27448 effect lets you request an integer or floating-point type 27449 according to its width. 27450 27451 You may also specify a mode of `byte' or `__byte__' to indicate 27452 the mode corresponding to a one-byte integer, `word' or `__word__' 27453 for the mode of a one-word integer, and `pointer' or `__pointer__' 27454 for the mode used to represent pointers. 27455 27456`packed' 27457 The `packed' attribute specifies that a variable or structure field 27458 should have the smallest possible alignment--one byte for a 27459 variable, and one bit for a field, unless you specify a larger 27460 value with the `aligned' attribute. 27461 27462 Here is a structure in which the field `x' is packed, so that it 27463 immediately follows `a': 27464 27465 struct foo 27466 { 27467 char a; 27468 int x[2] __attribute__ ((packed)); 27469 }; 27470 27471 _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' 27472 attribute on bit-fields of type `char'. This has been fixed in 27473 GCC 4.4 but the change can lead to differences in the structure 27474 layout. See the documentation of `-Wpacked-bitfield-compat' for 27475 more information. 27476 27477`section ("SECTION-NAME")' 27478 Normally, the compiler places the objects it generates in sections 27479 like `data' and `bss'. Sometimes, however, you need additional 27480 sections, or you need certain particular variables to appear in 27481 special sections, for example to map to special hardware. The 27482 `section' attribute specifies that a variable (or function) lives 27483 in a particular section. For example, this small program uses 27484 several specific section names: 27485 27486 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 27487 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 27488 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 27489 int init_data __attribute__ ((section ("INITDATA"))); 27490 27491 main() 27492 { 27493 /* Initialize stack pointer */ 27494 init_sp (stack + sizeof (stack)); 27495 27496 /* Initialize initialized data */ 27497 memcpy (&init_data, &data, &edata - &data); 27498 27499 /* Turn on the serial ports */ 27500 init_duart (&a); 27501 init_duart (&b); 27502 } 27503 27504 Use the `section' attribute with _global_ variables and not 27505 _local_ variables, as shown in the example. 27506 27507 You may use the `section' attribute with initialized or 27508 uninitialized global variables but the linker requires each object 27509 be defined once, with the exception that uninitialized variables 27510 tentatively go in the `common' (or `bss') section and can be 27511 multiply "defined". Using the `section' attribute changes what 27512 section the variable goes into and may cause the linker to issue 27513 an error if an uninitialized variable has multiple definitions. 27514 You can force a variable to be initialized with the `-fno-common' 27515 flag or the `nocommon' attribute. 27516 27517 Some file formats do not support arbitrary sections so the 27518 `section' attribute is not available on all platforms. If you 27519 need to map the entire contents of a module to a particular 27520 section, consider using the facilities of the linker instead. 27521 27522`shared' 27523 On Microsoft Windows, in addition to putting variable definitions 27524 in a named section, the section can also be shared among all 27525 running copies of an executable or DLL. For example, this small 27526 program defines shared data by putting it in a named section 27527 `shared' and marking the section shareable: 27528 27529 int foo __attribute__((section ("shared"), shared)) = 0; 27530 27531 int 27532 main() 27533 { 27534 /* Read and write foo. All running 27535 copies see the same value. */ 27536 return 0; 27537 } 27538 27539 You may only use the `shared' attribute along with `section' 27540 attribute with a fully-initialized global definition because of 27541 the way linkers work. See `section' attribute for more 27542 information. 27543 27544 The `shared' attribute is only available on Microsoft Windows. 27545 27546`tls_model ("TLS_MODEL")' 27547 The `tls_model' attribute sets thread-local storage model (*note 27548 Thread-Local::) of a particular `__thread' variable, overriding 27549 `-ftls-model=' command-line switch on a per-variable basis. The 27550 TLS_MODEL argument should be one of `global-dynamic', 27551 `local-dynamic', `initial-exec' or `local-exec'. 27552 27553 Not all targets support this attribute. 27554 27555`unused' 27556 This attribute, attached to a variable, means that the variable is 27557 meant to be possibly unused. GCC does not produce a warning for 27558 this variable. 27559 27560`used' 27561 This attribute, attached to a variable with static storage, means 27562 that the variable must be emitted even if it appears that the 27563 variable is not referenced. 27564 27565 When applied to a static data member of a C++ class template, the 27566 attribute also means that the member is instantiated if the class 27567 itself is instantiated. 27568 27569`vector_size (BYTES)' 27570 This attribute specifies the vector size for the variable, 27571 measured in bytes. For example, the declaration: 27572 27573 int foo __attribute__ ((vector_size (16))); 27574 27575 causes the compiler to set the mode for `foo', to be 16 bytes, 27576 divided into `int' sized units. Assuming a 32-bit int (a vector of 27577 4 units of 4 bytes), the corresponding mode of `foo' is V4SI. 27578 27579 This attribute is only applicable to integral and float scalars, 27580 although arrays, pointers, and function return values are allowed 27581 in conjunction with this construct. 27582 27583 Aggregates with this attribute are invalid, even if they are of 27584 the same size as a corresponding scalar. For example, the 27585 declaration: 27586 27587 struct S { int a; }; 27588 struct S __attribute__ ((vector_size (16))) foo; 27589 27590 is invalid even if the size of the structure is the same as the 27591 size of the `int'. 27592 27593`selectany' 27594 The `selectany' attribute causes an initialized global variable to 27595 have link-once semantics. When multiple definitions of the 27596 variable are encountered by the linker, the first is selected and 27597 the remainder are discarded. Following usage by the Microsoft 27598 compiler, the linker is told _not_ to warn about size or content 27599 differences of the multiple definitions. 27600 27601 Although the primary usage of this attribute is for POD types, the 27602 attribute can also be applied to global C++ objects that are 27603 initialized by a constructor. In this case, the static 27604 initialization and destruction code for the object is emitted in 27605 each translation defining the object, but the calls to the 27606 constructor and destructor are protected by a link-once guard 27607 variable. 27608 27609 The `selectany' attribute is only available on Microsoft Windows 27610 targets. You can use `__declspec (selectany)' as a synonym for 27611 `__attribute__ ((selectany))' for compatibility with other 27612 compilers. 27613 27614`weak' 27615 The `weak' attribute is described in *note Function Attributes::. 27616 27617`dllimport' 27618 The `dllimport' attribute is described in *note Function 27619 Attributes::. 27620 27621`dllexport' 27622 The `dllexport' attribute is described in *note Function 27623 Attributes::. 27624 27625 276266.38.1 AVR Variable Attributes 27627------------------------------ 27628 27629`progmem' 27630 The `progmem' attribute is used on the AVR to place read-only data 27631 in the non-volatile program memory (flash). The `progmem' 27632 attribute accomplishes this by putting respective variables into a 27633 section whose name starts with `.progmem'. 27634 27635 This attribute works similar to the `section' attribute but adds 27636 additional checking. Notice that just like the `section' 27637 attribute, `progmem' affects the location of the data but not how 27638 this data is accessed. 27639 27640 In order to read data located with the `progmem' attribute 27641 (inline) assembler must be used. 27642 /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */ 27643 #include <avr/pgmspace.h> 27644 27645 /* Locate var in flash memory */ 27646 const int var[2] PROGMEM = { 1, 2 }; 27647 27648 int read_var (int i) 27649 { 27650 /* Access var[] by accessor macro from avr/pgmspace.h */ 27651 return (int) pgm_read_word (& var[i]); 27652 } 27653 27654 AVR is a Harvard architecture processor and data and read-only data 27655 normally resides in the data memory (RAM). 27656 27657 See also the *note AVR Named Address Spaces:: section for an 27658 alternate way to locate and access data in flash memory. 27659 27660`io' 27661`io (ADDR)' 27662 Variables with the `io' attribute are used to address 27663 memory-mapped peripherals in the io address range. If an address 27664 is specified, the variable is assigned that address, and the value 27665 is interpreted as an address in the data address space. Example: 27666 27667 volatile int porta __attribute__((io (0x22))); 27668 27669 The address specified in the address in the data address range. 27670 27671 Otherwise, the variable it is not assigned an address, but the 27672 compiler will still use in/out instructions where applicable, 27673 assuming some other module assigns an address in the io address 27674 range. Example: 27675 27676 extern volatile int porta __attribute__((io)); 27677 27678`io_low' 27679`io_low (ADDR)' 27680 This is like the `io' attribute, but additionally it informs the 27681 compiler that the object lies in the lower half of the I/O area, 27682 allowing the use of `cbi', `sbi', `sbic' and `sbis' instructions. 27683 27684`address' 27685`address (ADDR)' 27686 Variables with the `address' attribute are used to address 27687 memory-mapped peripherals that may lie outside the io address 27688 range. 27689 27690 volatile int porta __attribute__((address (0x600))); 27691 27692 276936.38.2 Blackfin Variable Attributes 27694----------------------------------- 27695 27696Three attributes are currently defined for the Blackfin. 27697 27698`l1_data' 27699`l1_data_A' 27700`l1_data_B' 27701 Use these attributes on the Blackfin to place the variable into L1 27702 Data SRAM. Variables with `l1_data' attribute are put into the 27703 specific section named `.l1.data'. Those with `l1_data_A' 27704 attribute are put into the specific section named `.l1.data.A'. 27705 Those with `l1_data_B' attribute are put into the specific section 27706 named `.l1.data.B'. 27707 27708`l2' 27709 Use this attribute on the Blackfin to place the variable into L2 27710 SRAM. Variables with `l2' attribute are put into the specific 27711 section named `.l2.data'. 27712 277136.38.3 H8/300 Variable Attributes 27714--------------------------------- 27715 27716These variable attributes are available for H8/300 targets: 27717 27718`eightbit_data' 27719 Use this attribute on the H8/300, H8/300H, and H8S to indicate 27720 that the specified variable should be placed into the eight-bit 27721 data section. The compiler generates more efficient code for 27722 certain operations on data in the eight-bit data area. Note the 27723 eight-bit data area is limited to 256 bytes of data. 27724 27725 You must use GAS and GLD from GNU binutils version 2.7 or later for 27726 this attribute to work correctly. 27727 27728`tiny_data' 27729 Use this attribute on the H8/300H and H8S to indicate that the 27730 specified variable should be placed into the tiny data section. 27731 The compiler generates more efficient code for loads and stores on 27732 data in the tiny data section. Note the tiny data area is limited 27733 to slightly under 32KB of data. 27734 27735 277366.38.4 IA-64 Variable Attributes 27737-------------------------------- 27738 27739The IA-64 back end supports the following variable attribute: 27740 27741`model (MODEL-NAME)' 27742 On IA-64, use this attribute to set the addressability of an 27743 object. At present, the only supported identifier for MODEL-NAME 27744 is `small', indicating addressability via "small" (22-bit) 27745 addresses (so that their addresses can be loaded with the `addl' 27746 instruction). Caveat: such addressing is by definition not 27747 position independent and hence this attribute must not be used for 27748 objects defined by shared libraries. 27749 27750 277516.38.5 M32R/D Variable Attributes 27752--------------------------------- 27753 27754One attribute is currently defined for the M32R/D. 27755 27756`model (MODEL-NAME)' 27757 Use this attribute on the M32R/D to set the addressability of an 27758 object. The identifier MODEL-NAME is one of `small', `medium', or 27759 `large', representing each of the code models. 27760 27761 Small model objects live in the lower 16MB of memory (so that their 27762 addresses can be loaded with the `ld24' instruction). 27763 27764 Medium and large model objects may live anywhere in the 32-bit 27765 address space (the compiler generates `seth/add3' instructions to 27766 load their addresses). 27767 277686.38.6 MeP Variable Attributes 27769------------------------------ 27770 27771The MeP target has a number of addressing modes and busses. The `near' 27772space spans the standard memory space's first 16 megabytes (24 bits). 27773The `far' space spans the entire 32-bit memory space. The `based' 27774space is a 128-byte region in the memory space that is addressed 27775relative to the `$tp' register. The `tiny' space is a 65536-byte 27776region relative to the `$gp' register. In addition to these memory 27777regions, the MeP target has a separate 16-bit control bus which is 27778specified with `cb' attributes. 27779 27780`based' 27781 Any variable with the `based' attribute is assigned to the 27782 `.based' section, and is accessed with relative to the `$tp' 27783 register. 27784 27785`tiny' 27786 Likewise, the `tiny' attribute assigned variables to the `.tiny' 27787 section, relative to the `$gp' register. 27788 27789`near' 27790 Variables with the `near' attribute are assumed to have addresses 27791 that fit in a 24-bit addressing mode. This is the default for 27792 large variables (`-mtiny=4' is the default) but this attribute can 27793 override `-mtiny=' for small variables, or override `-ml'. 27794 27795`far' 27796 Variables with the `far' attribute are addressed using a full 27797 32-bit address. Since this covers the entire memory space, this 27798 allows modules to make no assumptions about where variables might 27799 be stored. 27800 27801`io' 27802`io (ADDR)' 27803 Variables with the `io' attribute are used to address 27804 memory-mapped peripherals. If an address is specified, the 27805 variable is assigned that address, else it is not assigned an 27806 address (it is assumed some other module assigns an address). 27807 Example: 27808 27809 int timer_count __attribute__((io(0x123))); 27810 27811`cb' 27812`cb (ADDR)' 27813 Variables with the `cb' attribute are used to access the control 27814 bus, using special instructions. `addr' indicates the control bus 27815 address. Example: 27816 27817 int cpu_clock __attribute__((cb(0x123))); 27818 27819 278206.38.7 PowerPC Variable Attributes 27821---------------------------------- 27822 27823Three attributes currently are defined for PowerPC configurations: 27824`altivec', `ms_struct' and `gcc_struct'. 27825 27826 For full documentation of the struct attributes please see the 27827documentation in *note x86 Variable Attributes::. 27828 27829 For documentation of `altivec' attribute please see the documentation 27830in *note PowerPC Type Attributes::. 27831 278326.38.8 SPU Variable Attributes 27833------------------------------ 27834 27835The SPU supports the `spu_vector' attribute for variables. For 27836documentation of this attribute please see the documentation in *note 27837SPU Type Attributes::. 27838 278396.38.9 x86 Variable Attributes 27840------------------------------ 27841 27842Two attributes are currently defined for x86 configurations: 27843`ms_struct' and `gcc_struct'. 27844 27845`ms_struct' 27846`gcc_struct' 27847 If `packed' is used on a structure, or if bit-fields are used, it 27848 may be that the Microsoft ABI lays out the structure differently 27849 than the way GCC normally does. Particularly when moving packed 27850 data between functions compiled with GCC and the native Microsoft 27851 compiler (either via function call or as data in a file), it may 27852 be necessary to access either format. 27853 27854 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 27855 Windows x86 compilers to match the native Microsoft compiler. 27856 27857 The Microsoft structure layout algorithm is fairly simple with the 27858 exception of the bit-field packing. The padding and alignment of 27859 members of structures and whether a bit-field can straddle a 27860 storage-unit boundary are determine by these rules: 27861 27862 1. Structure members are stored sequentially in the order in 27863 which they are declared: the first member has the lowest 27864 memory address and the last member the highest. 27865 27866 2. Every data object has an alignment requirement. The 27867 alignment requirement for all data except structures, unions, 27868 and arrays is either the size of the object or the current 27869 packing size (specified with either the `aligned' attribute 27870 or the `pack' pragma), whichever is less. For structures, 27871 unions, and arrays, the alignment requirement is the largest 27872 alignment requirement of its members. Every object is 27873 allocated an offset so that: 27874 27875 offset % alignment_requirement == 0 27876 27877 3. Adjacent bit-fields are packed into the same 1-, 2-, or 27878 4-byte allocation unit if the integral types are the same 27879 size and if the next bit-field fits into the current 27880 allocation unit without crossing the boundary imposed by the 27881 common alignment requirements of the bit-fields. 27882 27883 MSVC interprets zero-length bit-fields in the following ways: 27884 27885 1. If a zero-length bit-field is inserted between two bit-fields 27886 that are normally coalesced, the bit-fields are not coalesced. 27887 27888 For example: 27889 27890 struct 27891 { 27892 unsigned long bf_1 : 12; 27893 unsigned long : 0; 27894 unsigned long bf_2 : 12; 27895 } t1; 27896 27897 The size of `t1' is 8 bytes with the zero-length bit-field. 27898 If the zero-length bit-field were removed, `t1''s size would 27899 be 4 bytes. 27900 27901 2. If a zero-length bit-field is inserted after a bit-field, 27902 `foo', and the alignment of the zero-length bit-field is 27903 greater than the member that follows it, `bar', `bar' is 27904 aligned as the type of the zero-length bit-field. 27905 27906 For example: 27907 27908 struct 27909 { 27910 char foo : 4; 27911 short : 0; 27912 char bar; 27913 } t2; 27914 27915 struct 27916 { 27917 char foo : 4; 27918 short : 0; 27919 double bar; 27920 } t3; 27921 27922 For `t2', `bar' is placed at offset 2, rather than offset 1. 27923 Accordingly, the size of `t2' is 4. For `t3', the zero-length 27924 bit-field does not affect the alignment of `bar' or, as a 27925 result, the size of the structure. 27926 27927 Taking this into account, it is important to note the 27928 following: 27929 27930 1. If a zero-length bit-field follows a normal bit-field, 27931 the type of the zero-length bit-field may affect the 27932 alignment of the structure as whole. For example, `t2' 27933 has a size of 4 bytes, since the zero-length bit-field 27934 follows a normal bit-field, and is of type short. 27935 27936 2. Even if a zero-length bit-field is not followed by a 27937 normal bit-field, it may still affect the alignment of 27938 the structure: 27939 27940 struct 27941 { 27942 char foo : 6; 27943 long : 0; 27944 } t4; 27945 27946 Here, `t4' takes up 4 bytes. 27947 27948 3. Zero-length bit-fields following non-bit-field members are 27949 ignored: 27950 27951 struct 27952 { 27953 char foo; 27954 long : 0; 27955 char bar; 27956 } t5; 27957 27958 Here, `t5' takes up 2 bytes. 27959 279606.38.10 Xstormy16 Variable Attributes 27961------------------------------------- 27962 27963One attribute is currently defined for xstormy16 configurations: 27964`below100'. 27965 27966`below100' 27967 If a variable has the `below100' attribute (`BELOW100' is allowed 27968 also), GCC places the variable in the first 0x100 bytes of memory 27969 and use special opcodes to access it. Such variables are placed 27970 in either the `.bss_below100' section or the `.data_below100' 27971 section. 27972 27973 27974 27975File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 27976 279776.39 Specifying Attributes of Types 27978=================================== 27979 27980The keyword `__attribute__' allows you to specify special attributes of 27981`struct' and `union' types when you define such types. This keyword is 27982followed by an attribute specification inside double parentheses. 27983Eight attributes are currently defined for types: `aligned', `packed', 27984`transparent_union', `unused', `deprecated', `visibility', `may_alias' 27985and `bnd_variable_size'. Other attributes are defined for functions 27986(*note Function Attributes::), labels (*note Label Attributes::) and 27987for variables (*note Variable Attributes::). 27988 27989 You may also specify any one of these attributes with `__' preceding 27990and following its keyword. This allows you to use these attributes in 27991header files without being concerned about a possible macro of the same 27992name. For example, you may use `__aligned__' instead of `aligned'. 27993 27994 You may specify type attributes in an enum, struct or union type 27995declaration or definition, or for other types in a `typedef' 27996declaration. 27997 27998 For an enum, struct or union type, you may specify attributes either 27999between the enum, struct or union tag and the name of the type, or just 28000past the closing curly brace of the _definition_. The former syntax is 28001preferred. 28002 28003 *Note Attribute Syntax::, for details of the exact syntax for using 28004attributes. 28005 28006`aligned (ALIGNMENT)' 28007 This attribute specifies a minimum alignment (in bytes) for 28008 variables of the specified type. For example, the declarations: 28009 28010 struct S { short f[3]; } __attribute__ ((aligned (8))); 28011 typedef int more_aligned_int __attribute__ ((aligned (8))); 28012 28013 force the compiler to ensure (as far as it can) that each variable 28014 whose type is `struct S' or `more_aligned_int' is allocated and 28015 aligned _at least_ on a 8-byte boundary. On a SPARC, having all 28016 variables of type `struct S' aligned to 8-byte boundaries allows 28017 the compiler to use the `ldd' and `std' (doubleword load and 28018 store) instructions when copying one variable of type `struct S' to 28019 another, thus improving run-time efficiency. 28020 28021 Note that the alignment of any given `struct' or `union' type is 28022 required by the ISO C standard to be at least a perfect multiple of 28023 the lowest common multiple of the alignments of all of the members 28024 of the `struct' or `union' in question. This means that you _can_ 28025 effectively adjust the alignment of a `struct' or `union' type by 28026 attaching an `aligned' attribute to any one of the members of such 28027 a type, but the notation illustrated in the example above is a 28028 more obvious, intuitive, and readable way to request the compiler 28029 to adjust the alignment of an entire `struct' or `union' type. 28030 28031 As in the preceding example, you can explicitly specify the 28032 alignment (in bytes) that you wish the compiler to use for a given 28033 `struct' or `union' type. Alternatively, you can leave out the 28034 alignment factor and just ask the compiler to align a type to the 28035 maximum useful alignment for the target machine you are compiling 28036 for. For example, you could write: 28037 28038 struct S { short f[3]; } __attribute__ ((aligned)); 28039 28040 Whenever you leave out the alignment factor in an `aligned' 28041 attribute specification, the compiler automatically sets the 28042 alignment for the type to the largest alignment that is ever used 28043 for any data type on the target machine you are compiling for. 28044 Doing this can often make copy operations more efficient, because 28045 the compiler can use whatever instructions copy the biggest chunks 28046 of memory when performing copies to or from the variables that 28047 have types that you have aligned this way. 28048 28049 In the example above, if the size of each `short' is 2 bytes, then 28050 the size of the entire `struct S' type is 6 bytes. The smallest 28051 power of two that is greater than or equal to that is 8, so the 28052 compiler sets the alignment for the entire `struct S' type to 8 28053 bytes. 28054 28055 Note that although you can ask the compiler to select a 28056 time-efficient alignment for a given type and then declare only 28057 individual stand-alone objects of that type, the compiler's 28058 ability to select a time-efficient alignment is primarily useful 28059 only when you plan to create arrays of variables having the 28060 relevant (efficiently aligned) type. If you declare or use arrays 28061 of variables of an efficiently-aligned type, then it is likely 28062 that your program also does pointer arithmetic (or subscripting, 28063 which amounts to the same thing) on pointers to the relevant type, 28064 and the code that the compiler generates for these pointer 28065 arithmetic operations is often more efficient for 28066 efficiently-aligned types than for other types. 28067 28068 The `aligned' attribute can only increase the alignment; but you 28069 can decrease it by specifying `packed' as well. See below. 28070 28071 Note that the effectiveness of `aligned' attributes may be limited 28072 by inherent limitations in your linker. On many systems, the 28073 linker is only able to arrange for variables to be aligned up to a 28074 certain maximum alignment. (For some linkers, the maximum 28075 supported alignment may be very very small.) If your linker is 28076 only able to align variables up to a maximum of 8-byte alignment, 28077 then specifying `aligned(16)' in an `__attribute__' still only 28078 provides you with 8-byte alignment. See your linker documentation 28079 for further information. 28080 28081`packed' 28082 This attribute, attached to `struct' or `union' type definition, 28083 specifies that each member (other than zero-width bit-fields) of 28084 the structure or union is placed to minimize the memory required. 28085 When attached to an `enum' definition, it indicates that the 28086 smallest integral type should be used. 28087 28088 Specifying this attribute for `struct' and `union' types is 28089 equivalent to specifying the `packed' attribute on each of the 28090 structure or union members. Specifying the `-fshort-enums' flag 28091 on the line is equivalent to specifying the `packed' attribute on 28092 all `enum' definitions. 28093 28094 In the following example `struct my_packed_struct''s members are 28095 packed closely together, but the internal layout of its `s' member 28096 is not packed--to do that, `struct my_unpacked_struct' needs to be 28097 packed too. 28098 28099 struct my_unpacked_struct 28100 { 28101 char c; 28102 int i; 28103 }; 28104 28105 struct __attribute__ ((__packed__)) my_packed_struct 28106 { 28107 char c; 28108 int i; 28109 struct my_unpacked_struct s; 28110 }; 28111 28112 You may only specify this attribute on the definition of an `enum', 28113 `struct' or `union', not on a `typedef' that does not also define 28114 the enumerated type, structure or union. 28115 28116`transparent_union' 28117 This attribute, attached to a `union' type definition, indicates 28118 that any function parameter having that union type causes calls to 28119 that function to be treated in a special way. 28120 28121 First, the argument corresponding to a transparent union type can 28122 be of any type in the union; no cast is required. Also, if the 28123 union contains a pointer type, the corresponding argument can be a 28124 null pointer constant or a void pointer expression; and if the 28125 union contains a void pointer type, the corresponding argument can 28126 be any pointer expression. If the union member type is a pointer, 28127 qualifiers like `const' on the referenced type must be respected, 28128 just as with normal pointer conversions. 28129 28130 Second, the argument is passed to the function using the calling 28131 conventions of the first member of the transparent union, not the 28132 calling conventions of the union itself. All members of the union 28133 must have the same machine representation; this is necessary for 28134 this argument passing to work properly. 28135 28136 Transparent unions are designed for library functions that have 28137 multiple interfaces for compatibility reasons. For example, 28138 suppose the `wait' function must accept either a value of type 28139 `int *' to comply with POSIX, or a value of type `union wait *' to 28140 comply with the 4.1BSD interface. If `wait''s parameter were 28141 `void *', `wait' would accept both kinds of arguments, but it 28142 would also accept any other pointer type and this would make 28143 argument type checking less useful. Instead, `<sys/wait.h>' might 28144 define the interface as follows: 28145 28146 typedef union __attribute__ ((__transparent_union__)) 28147 { 28148 int *__ip; 28149 union wait *__up; 28150 } wait_status_ptr_t; 28151 28152 pid_t wait (wait_status_ptr_t); 28153 28154 This interface allows either `int *' or `union wait *' arguments 28155 to be passed, using the `int *' calling convention. The program 28156 can call `wait' with arguments of either type: 28157 28158 int w1 () { int w; return wait (&w); } 28159 int w2 () { union wait w; return wait (&w); } 28160 28161 With this interface, `wait''s implementation might look like this: 28162 28163 pid_t wait (wait_status_ptr_t p) 28164 { 28165 return waitpid (-1, p.__ip, 0); 28166 } 28167 28168`unused' 28169 When attached to a type (including a `union' or a `struct'), this 28170 attribute means that variables of that type are meant to appear 28171 possibly unused. GCC does not produce a warning for any variables 28172 of that type, even if the variable appears to do nothing. This is 28173 often the case with lock or thread classes, which are usually 28174 defined and then not referenced, but contain constructors and 28175 destructors that have nontrivial bookkeeping functions. 28176 28177`deprecated' 28178`deprecated (MSG)' 28179 The `deprecated' attribute results in a warning if the type is 28180 used anywhere in the source file. This is useful when identifying 28181 types that are expected to be removed in a future version of a 28182 program. If possible, the warning also includes the location of 28183 the declaration of the deprecated type, to enable users to easily 28184 find further information about why the type is deprecated, or what 28185 they should do instead. Note that the warnings only occur for 28186 uses and then only if the type is being applied to an identifier 28187 that itself is not being declared as deprecated. 28188 28189 typedef int T1 __attribute__ ((deprecated)); 28190 T1 x; 28191 typedef T1 T2; 28192 T2 y; 28193 typedef T1 T3 __attribute__ ((deprecated)); 28194 T3 z __attribute__ ((deprecated)); 28195 28196 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 28197 warning is issued for line 4 because T2 is not explicitly 28198 deprecated. Line 5 has no warning because T3 is explicitly 28199 deprecated. Similarly for line 6. The optional MSG argument, 28200 which must be a string, is printed in the warning if present. 28201 28202 The `deprecated' attribute can also be used for functions and 28203 variables (*note Function Attributes::, *note Variable 28204 Attributes::.) 28205 28206`may_alias' 28207 Accesses through pointers to types with this attribute are not 28208 subject to type-based alias analysis, but are instead assumed to 28209 be able to alias any other type of objects. In the context of 28210 section 6.5 paragraph 7 of the C99 standard, an lvalue expression 28211 dereferencing such a pointer is treated like having a character 28212 type. See `-fstrict-aliasing' for more information on aliasing 28213 issues. This extension exists to support some vector APIs, in 28214 which pointers to one vector type are permitted to alias pointers 28215 to a different vector type. 28216 28217 Note that an object of a type with this attribute does not have any 28218 special semantics. 28219 28220 Example of use: 28221 28222 typedef short __attribute__((__may_alias__)) short_a; 28223 28224 int 28225 main (void) 28226 { 28227 int a = 0x12345678; 28228 short_a *b = (short_a *) &a; 28229 28230 b[1] = 0; 28231 28232 if (a == 0x12345678) 28233 abort(); 28234 28235 exit(0); 28236 } 28237 28238 If you replaced `short_a' with `short' in the variable 28239 declaration, the above program would abort when compiled with 28240 `-fstrict-aliasing', which is on by default at `-O2' or above. 28241 28242`visibility' 28243 In C++, attribute visibility (*note Function Attributes::) can 28244 also be applied to class, struct, union and enum types. Unlike 28245 other type attributes, the attribute must appear between the 28246 initial keyword and the name of the type; it cannot appear after 28247 the body of the type. 28248 28249 Note that the type visibility is applied to vague linkage entities 28250 associated with the class (vtable, typeinfo node, etc.). In 28251 particular, if a class is thrown as an exception in one shared 28252 object and caught in another, the class must have default 28253 visibility. Otherwise the two shared objects are unable to use 28254 the same typeinfo node and exception handling will break. 28255 28256`designated_init' 28257 This attribute may only be applied to structure types. It 28258 indicates that any initialization of an object of this type must 28259 use designated initializers rather than positional initializers. 28260 The intent of this attribute is to allow the programmer to 28261 indicate that a structure's layout may change, and that therefore 28262 relying on positional initialization will result in future 28263 breakage. 28264 28265 GCC emits warnings based on this attribute by default; use 28266 `-Wno-designated-init' to suppress them. 28267 28268`bnd_variable_size' 28269 When applied to a structure field, this attribute tells Pointer 28270 Bounds Checker that the size of this field should not be computed 28271 using static type information. It may be used to mark 28272 variably-sized static array fields placed at the end of a 28273 structure. 28274 28275 struct S 28276 { 28277 int size; 28278 char data[1]; 28279 } 28280 S *p = (S *)malloc (sizeof(S) + 100); 28281 p->data[10] = 0; //Bounds violation 28282 28283 By using an attribute for the field we may avoid unwanted bound 28284 violation checks: 28285 28286 struct S 28287 { 28288 int size; 28289 char data[1] __attribute__((bnd_variable_size)); 28290 } 28291 S *p = (S *)malloc (sizeof(S) + 100); 28292 p->data[10] = 0; //OK 28293 28294 28295 To specify multiple attributes, separate them by commas within the 28296double parentheses: for example, `__attribute__ ((aligned (16), 28297packed))'. 28298 282996.39.1 ARM Type Attributes 28300-------------------------- 28301 28302On those ARM targets that support `dllimport' (such as Symbian OS), you 28303can use the `notshared' attribute to indicate that the virtual table 28304and other similar data for a class should not be exported from a DLL. 28305For example: 28306 28307 class __declspec(notshared) C { 28308 public: 28309 __declspec(dllimport) C(); 28310 virtual void f(); 28311 } 28312 28313 __declspec(dllexport) 28314 C::C() {} 28315 28316In this code, `C::C' is exported from the current DLL, but the virtual 28317table for `C' is not exported. (You can use `__attribute__' instead of 28318`__declspec' if you prefer, but most Symbian OS code uses `__declspec'.) 28319 283206.39.2 MeP Type Attributes 28321-------------------------- 28322 28323Many of the MeP variable attributes may be applied to types as well. 28324Specifically, the `based', `tiny', `near', and `far' attributes may be 28325applied to either. The `io' and `cb' attributes may not be applied to 28326types. 28327 283286.39.3 PowerPC Type Attributes 28329------------------------------ 28330 28331Three attributes currently are defined for PowerPC configurations: 28332`altivec', `ms_struct' and `gcc_struct'. 28333 28334 For full documentation of the `ms_struct' and `gcc_struct' attributes 28335please see the documentation in *note x86 Type Attributes::. 28336 28337 The `altivec' attribute allows one to declare AltiVec vector data 28338types supported by the AltiVec Programming Interface Manual. The 28339attribute requires an argument to specify one of three vector types: 28340`vector__', `pixel__' (always followed by unsigned short), and `bool__' 28341(always followed by unsigned). 28342 28343 __attribute__((altivec(vector__))) 28344 __attribute__((altivec(pixel__))) unsigned short 28345 __attribute__((altivec(bool__))) unsigned 28346 28347 These attributes mainly are intended to support the `__vector', 28348`__pixel', and `__bool' AltiVec keywords. 28349 283506.39.4 SPU Type Attributes 28351-------------------------- 28352 28353The SPU supports the `spu_vector' attribute for types. This attribute 28354allows one to declare vector data types supported by the 28355Sony/Toshiba/IBM SPU Language Extensions Specification. It is intended 28356to support the `__vector' keyword. 28357 283586.39.5 x86 Type Attributes 28359-------------------------- 28360 28361Two attributes are currently defined for x86 configurations: 28362`ms_struct' and `gcc_struct'. 28363 28364`ms_struct' 28365`gcc_struct' 28366 If `packed' is used on a structure, or if bit-fields are used it 28367 may be that the Microsoft ABI packs them differently than GCC 28368 normally packs them. Particularly when moving packed data between 28369 functions compiled with GCC and the native Microsoft compiler 28370 (either via function call or as data in a file), it may be 28371 necessary to access either format. 28372 28373 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 28374 Windows x86 compilers to match the native Microsoft compiler. 28375 28376 28377File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 28378 283796.40 Inquiring on Alignment of Types or Variables 28380================================================= 28381 28382The keyword `__alignof__' allows you to inquire about how an object is 28383aligned, or the minimum alignment usually required by a type. Its 28384syntax is just like `sizeof'. 28385 28386 For example, if the target machine requires a `double' value to be 28387aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 28388is true on many RISC machines. On more traditional machine designs, 28389`__alignof__ (double)' is 4 or even 2. 28390 28391 Some machines never actually require alignment; they allow reference 28392to any data type even at an odd address. For these machines, 28393`__alignof__' reports the smallest alignment that GCC gives the data 28394type, usually as mandated by the target ABI. 28395 28396 If the operand of `__alignof__' is an lvalue rather than a type, its 28397value is the required alignment for its type, taking into account any 28398minimum alignment specified with GCC's `__attribute__' extension (*note 28399Variable Attributes::). For example, after this declaration: 28400 28401 struct foo { int x; char y; } foo1; 28402 28403the value of `__alignof__ (foo1.y)' is 1, even though its actual 28404alignment is probably 2 or 4, the same as `__alignof__ (int)'. 28405 28406 It is an error to ask for the alignment of an incomplete type. 28407 28408 28409File: gcc.info, Node: Inline, Next: Volatiles, Prev: Alignment, Up: C Extensions 28410 284116.41 An Inline Function is As Fast As a Macro 28412============================================= 28413 28414By declaring a function inline, you can direct GCC to make calls to 28415that function faster. One way GCC can achieve this is to integrate 28416that function's code into the code for its callers. This makes 28417execution faster by eliminating the function-call overhead; in 28418addition, if any of the actual argument values are constant, their 28419known values may permit simplifications at compile time so that not all 28420of the inline function's code needs to be included. The effect on code 28421size is less predictable; object code may be larger or smaller with 28422function inlining, depending on the particular case. You can also 28423direct GCC to try to integrate all "simple enough" functions into their 28424callers with the option `-finline-functions'. 28425 28426 GCC implements three different semantics of declaring a function 28427inline. One is available with `-std=gnu89' or `-fgnu89-inline' or when 28428`gnu_inline' attribute is present on all inline declarations, another 28429when `-std=c99', `-std=c11', `-std=gnu99' or `-std=gnu11' (without 28430`-fgnu89-inline'), and the third is used when compiling C++. 28431 28432 To declare a function inline, use the `inline' keyword in its 28433declaration, like this: 28434 28435 static inline int 28436 inc (int *a) 28437 { 28438 return (*a)++; 28439 } 28440 28441 If you are writing a header file to be included in ISO C90 programs, 28442write `__inline__' instead of `inline'. *Note Alternate Keywords::. 28443 28444 The three types of inlining behave similarly in two important cases: 28445when the `inline' keyword is used on a `static' function, like the 28446example above, and when a function is first declared without using the 28447`inline' keyword and then is defined with `inline', like this: 28448 28449 extern int inc (int *a); 28450 inline int 28451 inc (int *a) 28452 { 28453 return (*a)++; 28454 } 28455 28456 In both of these common cases, the program behaves the same as if you 28457had not used the `inline' keyword, except for its speed. 28458 28459 When a function is both inline and `static', if all calls to the 28460function are integrated into the caller, and the function's address is 28461never used, then the function's own assembler code is never referenced. 28462In this case, GCC does not actually output assembler code for the 28463function, unless you specify the option `-fkeep-inline-functions'. 28464Some calls cannot be integrated for various reasons (in particular, 28465calls that precede the function's definition cannot be integrated, and 28466neither can recursive calls within the definition). If there is a 28467nonintegrated call, then the function is compiled to assembler code as 28468usual. The function must also be compiled as usual if the program 28469refers to its address, because that can't be inlined. 28470 28471 Note that certain usages in a function definition can make it 28472unsuitable for inline substitution. Among these usages are: variadic 28473functions, use of `alloca', use of variable-length data types (*note 28474Variable Length::), use of computed goto (*note Labels as Values::), 28475use of nonlocal goto, and nested functions (*note Nested Functions::). 28476Using `-Winline' warns when a function marked `inline' could not be 28477substituted, and gives the reason for the failure. 28478 28479 As required by ISO C++, GCC considers member functions defined within 28480the body of a class to be marked inline even if they are not explicitly 28481declared with the `inline' keyword. You can override this with 28482`-fno-default-inline'; *note Options Controlling C++ Dialect: C++ 28483Dialect Options. 28484 28485 GCC does not inline any functions when not optimizing unless you 28486specify the `always_inline' attribute for the function, like this: 28487 28488 /* Prototype. */ 28489 inline void foo (const char) __attribute__((always_inline)); 28490 28491 The remainder of this section is specific to GNU C90 inlining. 28492 28493 When an inline function is not `static', then the compiler must assume 28494that there may be calls from other source files; since a global symbol 28495can be defined only once in any program, the function must not be 28496defined in the other source files, so the calls therein cannot be 28497integrated. Therefore, a non-`static' inline function is always 28498compiled on its own in the usual fashion. 28499 28500 If you specify both `inline' and `extern' in the function definition, 28501then the definition is used only for inlining. In no case is the 28502function compiled on its own, not even if you refer to its address 28503explicitly. Such an address becomes an external reference, as if you 28504had only declared the function, and had not defined it. 28505 28506 This combination of `inline' and `extern' has almost the effect of a 28507macro. The way to use it is to put a function definition in a header 28508file with these keywords, and put another copy of the definition 28509(lacking `inline' and `extern') in a library file. The definition in 28510the header file causes most calls to the function to be inlined. If 28511any uses of the function remain, they refer to the single copy in the 28512library. 28513 28514 28515File: gcc.info, Node: Volatiles, Next: Using Assembly Language with C, Prev: Inline, Up: C Extensions 28516 285176.42 When is a Volatile Object Accessed? 28518======================================== 28519 28520C has the concept of volatile objects. These are normally accessed by 28521pointers and used for accessing hardware or inter-thread communication. 28522The standard encourages compilers to refrain from optimizations 28523concerning accesses to volatile objects, but leaves it implementation 28524defined as to what constitutes a volatile access. The minimum 28525requirement is that at a sequence point all previous accesses to 28526volatile objects have stabilized and no subsequent accesses have 28527occurred. Thus an implementation is free to reorder and combine 28528volatile accesses that occur between sequence points, but cannot do so 28529for accesses across a sequence point. The use of volatile does not 28530allow you to violate the restriction on updating objects multiple times 28531between two sequence points. 28532 28533 Accesses to non-volatile objects are not ordered with respect to 28534volatile accesses. You cannot use a volatile object as a memory 28535barrier to order a sequence of writes to non-volatile memory. For 28536instance: 28537 28538 int *ptr = SOMETHING; 28539 volatile int vobj; 28540 *ptr = SOMETHING; 28541 vobj = 1; 28542 28543Unless *PTR and VOBJ can be aliased, it is not guaranteed that the 28544write to *PTR occurs by the time the update of VOBJ happens. If you 28545need this guarantee, you must use a stronger memory barrier such as: 28546 28547 int *ptr = SOMETHING; 28548 volatile int vobj; 28549 *ptr = SOMETHING; 28550 asm volatile ("" : : : "memory"); 28551 vobj = 1; 28552 28553 A scalar volatile object is read when it is accessed in a void context: 28554 28555 volatile int *src = SOMEVALUE; 28556 *src; 28557 28558 Such expressions are rvalues, and GCC implements this as a read of the 28559volatile object being pointed to. 28560 28561 Assignments are also expressions and have an rvalue. However when 28562assigning to a scalar volatile, the volatile object is not reread, 28563regardless of whether the assignment expression's rvalue is used or 28564not. If the assignment's rvalue is used, the value is that assigned to 28565the volatile object. For instance, there is no read of VOBJ in all the 28566following cases: 28567 28568 int obj; 28569 volatile int vobj; 28570 vobj = SOMETHING; 28571 obj = vobj = SOMETHING; 28572 obj ? vobj = ONETHING : vobj = ANOTHERTHING; 28573 obj = (SOMETHING, vobj = ANOTHERTHING); 28574 28575 If you need to read the volatile object after an assignment has 28576occurred, you must use a separate expression with an intervening 28577sequence point. 28578 28579 As bit-fields are not individually addressable, volatile bit-fields may 28580be implicitly read when written to, or when adjacent bit-fields are 28581accessed. Bit-field operations may be optimized such that adjacent 28582bit-fields are only partially accessed, if they straddle a storage unit 28583boundary. For these reasons it is unwise to use volatile bit-fields to 28584access hardware. 28585 28586 28587File: gcc.info, Node: Using Assembly Language with C, Next: Alternate Keywords, Prev: Volatiles, Up: C Extensions 28588 285896.43 How to Use Inline Assembly Language in C Code 28590================================================== 28591 28592The `asm' keyword allows you to embed assembler instructions within C 28593code. GCC provides two forms of inline `asm' statements. A "basic 28594`asm'" statement is one with no operands (*note Basic Asm::), while an 28595"extended `asm'" statement (*note Extended Asm::) includes one or more 28596operands. The extended form is preferred for mixing C and assembly 28597language within a function, but to include assembly language at top 28598level you must use basic `asm'. 28599 28600 You can also use the `asm' keyword to override the assembler name for 28601a C symbol, or to place a C variable in a specific register. 28602 28603* Menu: 28604 28605* Basic Asm:: Inline assembler without operands. 28606* Extended Asm:: Inline assembler with operands. 28607* Constraints:: Constraints for `asm' operands 28608* Asm Labels:: Specifying the assembler name to use for a C symbol. 28609* Explicit Reg Vars:: Defining variables residing in specified registers. 28610* Size of an asm:: How GCC calculates the size of an `asm' block. 28611 28612 28613File: gcc.info, Node: Basic Asm, Next: Extended Asm, Up: Using Assembly Language with C 28614 286156.43.1 Basic Asm -- Assembler Instructions Without Operands 28616----------------------------------------------------------- 28617 28618A basic `asm' statement has the following syntax: 28619 28620 asm [ volatile ] ( ASSEMBLERINSTRUCTIONS ) 28621 28622 The `asm' keyword is a GNU extension. When writing code that can be 28623compiled with `-ansi' and the various `-std' options, use `__asm__' 28624instead of `asm' (*note Alternate Keywords::). 28625 28626Qualifiers 28627.......... 28628 28629`volatile' 28630 The optional `volatile' qualifier has no effect. All basic `asm' 28631 blocks are implicitly volatile. 28632 28633Parameters 28634.......... 28635 28636ASSEMBLERINSTRUCTIONS 28637 This is a literal string that specifies the assembler code. The 28638 string can contain any instructions recognized by the assembler, 28639 including directives. GCC does not parse the assembler 28640 instructions themselves and does not know what they mean or even 28641 whether they are valid assembler input. 28642 28643 You may place multiple assembler instructions together in a single 28644 `asm' string, separated by the characters normally used in 28645 assembly code for the system. A combination that works in most 28646 places is a newline to break the line, plus a tab character 28647 (written as `\n\t'). Some assemblers allow semicolons as a line 28648 separator. However, note that some assembler dialects use 28649 semicolons to start a comment. 28650 28651Remarks 28652....... 28653 28654Using extended `asm' typically produces smaller, safer, and more 28655efficient code, and in most cases it is a better solution than basic 28656`asm'. However, there are two situations where only basic `asm' can be 28657used: 28658 28659 * Extended `asm' statements have to be inside a C function, so to 28660 write inline assembly language at file scope ("top-level"), 28661 outside of C functions, you must use basic `asm'. You can use 28662 this technique to emit assembler directives, define assembly 28663 language macros that can be invoked elsewhere in the file, or 28664 write entire functions in assembly language. 28665 28666 * Functions declared with the `naked' attribute also require basic 28667 `asm' (*note Function Attributes::). 28668 28669 Safely accessing C data and calling functions from basic `asm' is more 28670complex than it may appear. To access C data, it is better to use 28671extended `asm'. 28672 28673 Do not expect a sequence of `asm' statements to remain perfectly 28674consecutive after compilation. If certain instructions need to remain 28675consecutive in the output, put them in a single multi-instruction `asm' 28676statement. Note that GCC's optimizers can move `asm' statements 28677relative to other code, including across jumps. 28678 28679 `asm' statements may not perform jumps into other `asm' statements. 28680GCC does not know about these jumps, and therefore cannot take account 28681of them when deciding how to optimize. Jumps from `asm' to C labels are 28682only supported in extended `asm'. 28683 28684 Under certain circumstances, GCC may duplicate (or remove duplicates 28685of) your assembly code when optimizing. This can lead to unexpected 28686duplicate symbol errors during compilation if your assembly code 28687defines symbols or labels. 28688 28689 Since GCC does not parse the ASSEMBLERINSTRUCTIONS, it has no 28690visibility of any symbols it references. This may result in GCC 28691discarding those symbols as unreferenced. 28692 28693 The compiler copies the assembler instructions in a basic `asm' 28694verbatim to the assembly language output file, without processing 28695dialects or any of the `%' operators that are available with extended 28696`asm'. This results in minor differences between basic `asm' strings 28697and extended `asm' templates. For example, to refer to registers you 28698might use `%eax' in basic `asm' and `%%eax' in extended `asm'. 28699 28700 On targets such as x86 that support multiple assembler dialects, all 28701basic `asm' blocks use the assembler dialect specified by the `-masm' 28702command-line option (*note x86 Options::). Basic `asm' provides no 28703mechanism to provide different assembler strings for different dialects. 28704 28705 Here is an example of basic `asm' for i386: 28706 28707 /* Note that this code will not compile with -masm=intel */ 28708 #define DebugBreak() asm("int $3") 28709 28710 28711File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Basic Asm, Up: Using Assembly Language with C 28712 287136.43.2 Extended Asm - Assembler Instructions with C Expression Operands 28714----------------------------------------------------------------------- 28715 28716With extended `asm' you can read and write C variables from assembler 28717and perform jumps from assembler code to C labels. Extended `asm' 28718syntax uses colons (`:') to delimit the operand parameters after the 28719assembler template: 28720 28721 asm [volatile] ( ASSEMBLERTEMPLATE 28722 : OUTPUTOPERANDS 28723 [ : INPUTOPERANDS 28724 [ : CLOBBERS ] ]) 28725 28726 asm [volatile] goto ( ASSEMBLERTEMPLATE 28727 : 28728 : INPUTOPERANDS 28729 : CLOBBERS 28730 : GOTOLABELS) 28731 28732 The `asm' keyword is a GNU extension. When writing code that can be 28733compiled with `-ansi' and the various `-std' options, use `__asm__' 28734instead of `asm' (*note Alternate Keywords::). 28735 28736Qualifiers 28737.......... 28738 28739`volatile' 28740 The typical use of extended `asm' statements is to manipulate input 28741 values to produce output values. However, your `asm' statements may 28742 also produce side effects. If so, you may need to use the 28743 `volatile' qualifier to disable certain optimizations. *Note 28744 Volatile::. 28745 28746`goto' 28747 This qualifier informs the compiler that the `asm' statement may 28748 perform a jump to one of the labels listed in the GOTOLABELS. 28749 *Note GotoLabels::. 28750 28751Parameters 28752.......... 28753 28754ASSEMBLERTEMPLATE 28755 This is a literal string that is the template for the assembler 28756 code. It is a combination of fixed text and tokens that refer to 28757 the input, output, and goto parameters. *Note AssemblerTemplate::. 28758 28759OUTPUTOPERANDS 28760 A comma-separated list of the C variables modified by the 28761 instructions in the ASSEMBLERTEMPLATE. An empty list is 28762 permitted. *Note OutputOperands::. 28763 28764INPUTOPERANDS 28765 A comma-separated list of C expressions read by the instructions 28766 in the ASSEMBLERTEMPLATE. An empty list is permitted. *Note 28767 InputOperands::. 28768 28769CLOBBERS 28770 A comma-separated list of registers or other values changed by the 28771 ASSEMBLERTEMPLATE, beyond those listed as outputs. An empty list 28772 is permitted. *Note Clobbers::. 28773 28774GOTOLABELS 28775 When you are using the `goto' form of `asm', this section contains 28776 the list of all C labels to which the code in the 28777 ASSEMBLERTEMPLATE may jump. *Note GotoLabels::. 28778 28779 `asm' statements may not perform jumps into other `asm' statements, 28780 only to the listed GOTOLABELS. GCC's optimizers do not know about 28781 other jumps; therefore they cannot take account of them when 28782 deciding how to optimize. 28783 28784 The total number of input + output + goto operands is limited to 30. 28785 28786Remarks 28787....... 28788 28789The `asm' statement allows you to include assembly instructions directly 28790within C code. This may help you to maximize performance in 28791time-sensitive code or to access assembly instructions that are not 28792readily available to C programs. 28793 28794 Note that extended `asm' statements must be inside a function. Only 28795basic `asm' may be outside functions (*note Basic Asm::). Functions 28796declared with the `naked' attribute also require basic `asm' (*note 28797Function Attributes::). 28798 28799 While the uses of `asm' are many and varied, it may help to think of an 28800`asm' statement as a series of low-level instructions that convert input 28801parameters to output parameters. So a simple (if not particularly 28802useful) example for i386 using `asm' might look like this: 28803 28804 int src = 1; 28805 int dst; 28806 28807 asm ("mov %1, %0\n\t" 28808 "add $1, %0" 28809 : "=r" (dst) 28810 : "r" (src)); 28811 28812 printf("%d\n", dst); 28813 28814 This code copies `src' to `dst' and add 1 to `dst'. 28815 288166.43.2.1 Volatile 28817................. 28818 28819GCC's optimizers sometimes discard `asm' statements if they determine 28820there is no need for the output variables. Also, the optimizers may move 28821code out of loops if they believe that the code will always return the 28822same result (i.e. none of its input values change between calls). Using 28823the `volatile' qualifier disables these optimizations. `asm' statements 28824that have no output operands, including `asm goto' statements, are 28825implicitly volatile. 28826 28827 This i386 code demonstrates a case that does not use (or require) the 28828`volatile' qualifier. If it is performing assertion checking, this code 28829uses `asm' to perform the validation. Otherwise, `dwRes' is 28830unreferenced by any code. As a result, the optimizers can discard the 28831`asm' statement, which in turn removes the need for the entire 28832`DoCheck' routine. By omitting the `volatile' qualifier when it isn't 28833needed you allow the optimizers to produce the most efficient code 28834possible. 28835 28836 void DoCheck(uint32_t dwSomeValue) 28837 { 28838 uint32_t dwRes; 28839 28840 // Assumes dwSomeValue is not zero. 28841 asm ("bsfl %1,%0" 28842 : "=r" (dwRes) 28843 : "r" (dwSomeValue) 28844 : "cc"); 28845 28846 assert(dwRes > 3); 28847 } 28848 28849 The next example shows a case where the optimizers can recognize that 28850the input (`dwSomeValue') never changes during the execution of the 28851function and can therefore move the `asm' outside the loop to produce 28852more efficient code. Again, using `volatile' disables this type of 28853optimization. 28854 28855 void do_print(uint32_t dwSomeValue) 28856 { 28857 uint32_t dwRes; 28858 28859 for (uint32_t x=0; x < 5; x++) 28860 { 28861 // Assumes dwSomeValue is not zero. 28862 asm ("bsfl %1,%0" 28863 : "=r" (dwRes) 28864 : "r" (dwSomeValue) 28865 : "cc"); 28866 28867 printf("%u: %u %u\n", x, dwSomeValue, dwRes); 28868 } 28869 } 28870 28871 The following example demonstrates a case where you need to use the 28872`volatile' qualifier. It uses the x86 `rdtsc' instruction, which reads 28873the computer's time-stamp counter. Without the `volatile' qualifier, 28874the optimizers might assume that the `asm' block will always return the 28875same value and therefore optimize away the second call. 28876 28877 uint64_t msr; 28878 28879 asm volatile ( "rdtsc\n\t" // Returns the time in EDX:EAX. 28880 "shl $32, %%rdx\n\t" // Shift the upper bits left. 28881 "or %%rdx, %0" // 'Or' in the lower bits. 28882 : "=a" (msr) 28883 : 28884 : "rdx"); 28885 28886 printf("msr: %llx\n", msr); 28887 28888 // Do other work... 28889 28890 // Reprint the timestamp 28891 asm volatile ( "rdtsc\n\t" // Returns the time in EDX:EAX. 28892 "shl $32, %%rdx\n\t" // Shift the upper bits left. 28893 "or %%rdx, %0" // 'Or' in the lower bits. 28894 : "=a" (msr) 28895 : 28896 : "rdx"); 28897 28898 printf("msr: %llx\n", msr); 28899 28900 GCC's optimizers do not treat this code like the non-volatile code in 28901the earlier examples. They do not move it out of loops or omit it on the 28902assumption that the result from a previous call is still valid. 28903 28904 Note that the compiler can move even volatile `asm' instructions 28905relative to other code, including across jump instructions. For 28906example, on many targets there is a system register that controls the 28907rounding mode of floating-point operations. Setting it with a volatile 28908`asm', as in the following PowerPC example, does not work reliably. 28909 28910 asm volatile("mtfsf 255, %0" : : "f" (fpenv)); 28911 sum = x + y; 28912 28913 The compiler may move the addition back before the volatile `asm'. To 28914make it work as expected, add an artificial dependency to the `asm' by 28915referencing a variable in the subsequent code, for example: 28916 28917 asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv)); 28918 sum = x + y; 28919 28920 Under certain circumstances, GCC may duplicate (or remove duplicates 28921of) your assembly code when optimizing. This can lead to unexpected 28922duplicate symbol errors during compilation if your asm code defines 28923symbols or labels. Using `%=' (*note AssemblerTemplate::) may help 28924resolve this problem. 28925 289266.43.2.2 Assembler Template 28927........................... 28928 28929An assembler template is a literal string containing assembler 28930instructions. The compiler replaces tokens in the template that refer 28931to inputs, outputs, and goto labels, and then outputs the resulting 28932string to the assembler. The string can contain any instructions 28933recognized by the assembler, including directives. GCC does not parse 28934the assembler instructions themselves and does not know what they mean 28935or even whether they are valid assembler input. However, it does count 28936the statements (*note Size of an asm::). 28937 28938 You may place multiple assembler instructions together in a single 28939`asm' string, separated by the characters normally used in assembly 28940code for the system. A combination that works in most places is a 28941newline to break the line, plus a tab character to move to the 28942instruction field (written as `\n\t'). Some assemblers allow 28943semicolons as a line separator. However, note that some assembler 28944dialects use semicolons to start a comment. 28945 28946 Do not expect a sequence of `asm' statements to remain perfectly 28947consecutive after compilation, even when you are using the `volatile' 28948qualifier. If certain instructions need to remain consecutive in the 28949output, put them in a single multi-instruction asm statement. 28950 28951 Accessing data from C programs without using input/output operands 28952(such as by using global symbols directly from the assembler template) 28953may not work as expected. Similarly, calling functions directly from an 28954assembler template requires a detailed understanding of the target 28955assembler and ABI. 28956 28957 Since GCC does not parse the assembler template, it has no visibility 28958of any symbols it references. This may result in GCC discarding those 28959symbols as unreferenced unless they are also listed as input, output, 28960or goto operands. 28961 28962Special format strings 28963...................... 28964 28965In addition to the tokens described by the input, output, and goto 28966operands, these tokens have special meanings in the assembler template: 28967 28968`%%' 28969 Outputs a single `%' into the assembler code. 28970 28971`%=' 28972 Outputs a number that is unique to each instance of the `asm' 28973 statement in the entire compilation. This option is useful when 28974 creating local labels and referring to them multiple times in a 28975 single template that generates multiple assembler instructions. 28976 28977`%{' 28978`%|' 28979`%}' 28980 Outputs `{', `|', and `}' characters (respectively) into the 28981 assembler code. When unescaped, these characters have special 28982 meaning to indicate multiple assembler dialects, as described 28983 below. 28984 28985Multiple assembler dialects in `asm' templates 28986.............................................. 28987 28988On targets such as x86, GCC supports multiple assembler dialects. The 28989`-masm' option controls which dialect GCC uses as its default for 28990inline assembler. The target-specific documentation for the `-masm' 28991option contains the list of supported dialects, as well as the default 28992dialect if the option is not specified. This information may be 28993important to understand, since assembler code that works correctly when 28994compiled using one dialect will likely fail if compiled using another. 28995*Note x86 Options::. 28996 28997 If your code needs to support multiple assembler dialects (for 28998example, if you are writing public headers that need to support a 28999variety of compilation options), use constructs of this form: 29000 29001 { dialect0 | dialect1 | dialect2... } 29002 29003 This construct outputs `dialect0' when using dialect #0 to compile the 29004code, `dialect1' for dialect #1, etc. If there are fewer alternatives 29005within the braces than the number of dialects the compiler supports, 29006the construct outputs nothing. 29007 29008 For example, if an x86 compiler supports two dialects (`att', 29009`intel'), an assembler template such as this: 29010 29011 "bt{l %[Offset],%[Base] | %[Base],%[Offset]}; jc %l2" 29012 29013is equivalent to one of 29014 29015 "btl %[Offset],%[Base] ; jc %l2" /* att dialect */ 29016 "bt %[Base],%[Offset]; jc %l2" /* intel dialect */ 29017 29018 Using that same compiler, this code: 29019 29020 "xchg{l}\t{%%}ebx, %1" 29021 29022corresponds to either 29023 29024 "xchgl\t%%ebx, %1" /* att dialect */ 29025 "xchg\tebx, %1" /* intel dialect */ 29026 29027 There is no support for nesting dialect alternatives. 29028 290296.43.2.3 Output Operands 29030........................ 29031 29032An `asm' statement has zero or more output operands indicating the names 29033of C variables modified by the assembler code. 29034 29035 In this i386 example, `old' (referred to in the template string as 29036`%0') and `*Base' (as `%1') are outputs and `Offset' (`%2') is an input: 29037 29038 bool old; 29039 29040 __asm__ ("btsl %2,%1\n\t" // Turn on zero-based bit #Offset in Base. 29041 "sbb %0,%0" // Use the CF to calculate old. 29042 : "=r" (old), "+rm" (*Base) 29043 : "Ir" (Offset) 29044 : "cc"); 29045 29046 return old; 29047 29048 Operands are separated by commas. Each operand has this format: 29049 29050 [ [ASMSYMBOLICNAME] ] CONSTRAINT (CVARIABLENAME) 29051 29052ASMSYMBOLICNAME 29053 Specifies a symbolic name for the operand. Reference the name in 29054 the assembler template by enclosing it in square brackets (i.e. 29055 `%[Value]'). The scope of the name is the `asm' statement that 29056 contains the definition. Any valid C variable name is acceptable, 29057 including names already defined in the surrounding code. No two 29058 operands within the same `asm' statement can use the same symbolic 29059 name. 29060 29061 When not using an ASMSYMBOLICNAME, use the (zero-based) position 29062 of the operand in the list of operands in the assembler template. 29063 For example if there are three output operands, use `%0' in the 29064 template to refer to the first, `%1' for the second, and `%2' for 29065 the third. 29066 29067CONSTRAINT 29068 A string constant specifying constraints on the placement of the 29069 operand; *Note Constraints::, for details. 29070 29071 Output constraints must begin with either `=' (a variable 29072 overwriting an existing value) or `+' (when reading and writing). 29073 When using `=', do not assume the location contains the existing 29074 value on entry to the `asm', except when the operand is tied to an 29075 input; *note Input Operands: InputOperands. 29076 29077 After the prefix, there must be one or more additional constraints 29078 (*note Constraints::) that describe where the value resides. Common 29079 constraints include `r' for register and `m' for memory. When you 29080 list more than one possible location (for example, `"=rm"'), the 29081 compiler chooses the most efficient one based on the current 29082 context. If you list as many alternates as the `asm' statement 29083 allows, you permit the optimizers to produce the best possible 29084 code. If you must use a specific register, but your Machine 29085 Constraints do not provide sufficient control to select the 29086 specific register you want, local register variables may provide a 29087 solution (*note Local Reg Vars::). 29088 29089CVARIABLENAME 29090 Specifies a C lvalue expression to hold the output, typically a 29091 variable name. The enclosing parentheses are a required part of 29092 the syntax. 29093 29094 29095 When the compiler selects the registers to use to represent the output 29096operands, it does not use any of the clobbered registers (*note 29097Clobbers::). 29098 29099 Output operand expressions must be lvalues. The compiler cannot check 29100whether the operands have data types that are reasonable for the 29101instruction being executed. For output expressions that are not 29102directly addressable (for example a bit-field), the constraint must 29103allow a register. In that case, GCC uses the register as the output of 29104the `asm', and then stores that register into the output. 29105 29106 Operands using the `+' constraint modifier count as two operands (that 29107is, both as input and output) towards the total maximum of 30 operands 29108per `asm' statement. 29109 29110 Use the `&' constraint modifier (*note Modifiers::) on all output 29111operands that must not overlap an input. Otherwise, GCC may allocate 29112the output operand in the same register as an unrelated input operand, 29113on the assumption that the assembler code consumes its inputs before 29114producing outputs. This assumption may be false if the assembler code 29115actually consists of more than one instruction. 29116 29117 The same problem can occur if one output parameter (A) allows a 29118register constraint and another output parameter (B) allows a memory 29119constraint. The code generated by GCC to access the memory address in 29120B can contain registers which _might_ be shared by A, and GCC considers 29121those registers to be inputs to the asm. As above, GCC assumes that 29122such input registers are consumed before any outputs are written. This 29123assumption may result in incorrect behavior if the asm writes to A 29124before using B. Combining the `&' modifier with the register constraint 29125on A ensures that modifying A does not affect the address referenced by 29126B. Otherwise, the location of B is undefined if A is modified before 29127using B. 29128 29129 `asm' supports operand modifiers on operands (for example `%k2' 29130instead of simply `%2'). Typically these qualifiers are hardware 29131dependent. The list of supported modifiers for x86 is found at *note 29132x86 Operand modifiers: x86Operandmodifiers. 29133 29134 If the C code that follows the `asm' makes no use of any of the output 29135operands, use `volatile' for the `asm' statement to prevent the 29136optimizers from discarding the `asm' statement as unneeded (see *note 29137Volatile::). 29138 29139 This code makes no use of the optional ASMSYMBOLICNAME. Therefore it 29140references the first output operand as `%0' (were there a second, it 29141would be `%1', etc). The number of the first input operand is one 29142greater than that of the last output operand. In this i386 example, 29143that makes `Mask' referenced as `%1': 29144 29145 uint32_t Mask = 1234; 29146 uint32_t Index; 29147 29148 asm ("bsfl %1, %0" 29149 : "=r" (Index) 29150 : "r" (Mask) 29151 : "cc"); 29152 29153 That code overwrites the variable `Index' (`='), placing the value in 29154a register (`r'). Using the generic `r' constraint instead of a 29155constraint for a specific register allows the compiler to pick the 29156register to use, which can result in more efficient code. This may not 29157be possible if an assembler instruction requires a specific register. 29158 29159 The following i386 example uses the ASMSYMBOLICNAME syntax. It 29160produces the same result as the code above, but some may consider it 29161more readable or more maintainable since reordering index numbers is 29162not necessary when adding or removing operands. The names `aIndex' and 29163`aMask' are only used in this example to emphasize which names get used 29164where. It is acceptable to reuse the names `Index' and `Mask'. 29165 29166 uint32_t Mask = 1234; 29167 uint32_t Index; 29168 29169 asm ("bsfl %[aMask], %[aIndex]" 29170 : [aIndex] "=r" (Index) 29171 : [aMask] "r" (Mask) 29172 : "cc"); 29173 29174 Here are some more examples of output operands. 29175 29176 uint32_t c = 1; 29177 uint32_t d; 29178 uint32_t *e = &c; 29179 29180 asm ("mov %[e], %[d]" 29181 : [d] "=rm" (d) 29182 : [e] "rm" (*e)); 29183 29184 Here, `d' may either be in a register or in memory. Since the compiler 29185might already have the current value of the `uint32_t' location pointed 29186to by `e' in a register, you can enable it to choose the best location 29187for `d' by specifying both constraints. 29188 291896.43.2.4 Input Operands 29190....................... 29191 29192Input operands make values from C variables and expressions available 29193to the assembly code. 29194 29195 Operands are separated by commas. Each operand has this format: 29196 29197 [ [ASMSYMBOLICNAME] ] CONSTRAINT (CEXPRESSION) 29198 29199ASMSYMBOLICNAME 29200 Specifies a symbolic name for the operand. Reference the name in 29201 the assembler template by enclosing it in square brackets (i.e. 29202 `%[Value]'). The scope of the name is the `asm' statement that 29203 contains the definition. Any valid C variable name is acceptable, 29204 including names already defined in the surrounding code. No two 29205 operands within the same `asm' statement can use the same symbolic 29206 name. 29207 29208 When not using an ASMSYMBOLICNAME, use the (zero-based) position 29209 of the operand in the list of operands in the assembler template. 29210 For example if there are two output operands and three inputs, use 29211 `%2' in the template to refer to the first input operand, `%3' for 29212 the second, and `%4' for the third. 29213 29214CONSTRAINT 29215 A string constant specifying constraints on the placement of the 29216 operand; *Note Constraints::, for details. 29217 29218 Input constraint strings may not begin with either `=' or `+'. 29219 When you list more than one possible location (for example, 29220 `"irm"'), the compiler chooses the most efficient one based on the 29221 current context. If you must use a specific register, but your 29222 Machine Constraints do not provide sufficient control to select 29223 the specific register you want, local register variables may 29224 provide a solution (*note Local Reg Vars::). 29225 29226 Input constraints can also be digits (for example, `"0"'). This 29227 indicates that the specified input must be in the same place as 29228 the output constraint at the (zero-based) index in the output 29229 constraint list. When using ASMSYMBOLICNAME syntax for the output 29230 operands, you may use these names (enclosed in brackets `[]') 29231 instead of digits. 29232 29233CEXPRESSION 29234 This is the C variable or expression being passed to the `asm' 29235 statement as input. The enclosing parentheses are a required part 29236 of the syntax. 29237 29238 29239 When the compiler selects the registers to use to represent the input 29240operands, it does not use any of the clobbered registers (*note 29241Clobbers::). 29242 29243 If there are no output operands but there are input operands, place two 29244consecutive colons where the output operands would go: 29245 29246 __asm__ ("some instructions" 29247 : /* No outputs. */ 29248 : "r" (Offset / 8)); 29249 29250 *Warning:* Do _not_ modify the contents of input-only operands (except 29251for inputs tied to outputs). The compiler assumes that on exit from the 29252`asm' statement these operands contain the same values as they had 29253before executing the statement. It is _not_ possible to use clobbers 29254to inform the compiler that the values in these inputs are changing. One 29255common work-around is to tie the changing input variable to an output 29256variable that never gets used. Note, however, that if the code that 29257follows the `asm' statement makes no use of any of the output operands, 29258the GCC optimizers may discard the `asm' statement as unneeded (see 29259*note Volatile::). 29260 29261 `asm' supports operand modifiers on operands (for example `%k2' 29262instead of simply `%2'). Typically these qualifiers are hardware 29263dependent. The list of supported modifiers for x86 is found at *note 29264x86 Operand modifiers: x86Operandmodifiers. 29265 29266 In this example using the fictitious `combine' instruction, the 29267constraint `"0"' for input operand 1 says that it must occupy the same 29268location as output operand 0. Only input operands may use numbers in 29269constraints, and they must each refer to an output operand. Only a 29270number (or the symbolic assembler name) in the constraint can guarantee 29271that one operand is in the same place as another. The mere fact that 29272`foo' is the value of both operands is not enough to guarantee that 29273they are in the same place in the generated assembler code. 29274 29275 asm ("combine %2, %0" 29276 : "=r" (foo) 29277 : "0" (foo), "g" (bar)); 29278 29279 Here is an example using symbolic names. 29280 29281 asm ("cmoveq %1, %2, %[result]" 29282 : [result] "=r"(result) 29283 : "r" (test), "r" (new), "[result]" (old)); 29284 292856.43.2.5 Clobbers 29286................. 29287 29288While the compiler is aware of changes to entries listed in the output 29289operands, the inline `asm' code may modify more than just the outputs. 29290For example, calculations may require additional registers, or the 29291processor may overwrite a register as a side effect of a particular 29292assembler instruction. In order to inform the compiler of these 29293changes, list them in the clobber list. Clobber list items are either 29294register names or the special clobbers (listed below). Each clobber 29295list item is a string constant enclosed in double quotes and separated 29296by commas. 29297 29298 Clobber descriptions may not in any way overlap with an input or output 29299operand. For example, you may not have an operand describing a register 29300class with one member when listing that register in the clobber list. 29301Variables declared to live in specific registers (*note Explicit Reg 29302Vars::) and used as `asm' input or output operands must have no part 29303mentioned in the clobber description. In particular, there is no way to 29304specify that input operands get modified without also specifying them 29305as output operands. 29306 29307 When the compiler selects which registers to use to represent input 29308and output operands, it does not use any of the clobbered registers. As 29309a result, clobbered registers are available for any use in the 29310assembler code. 29311 29312 Here is a realistic example for the VAX showing the use of clobbered 29313registers: 29314 29315 asm volatile ("movc3 %0, %1, %2" 29316 : /* No outputs. */ 29317 : "g" (from), "g" (to), "g" (count) 29318 : "r0", "r1", "r2", "r3", "r4", "r5"); 29319 29320 Also, there are two special clobber arguments: 29321 29322`"cc"' 29323 The `"cc"' clobber indicates that the assembler code modifies the 29324 flags register. On some machines, GCC represents the condition 29325 codes as a specific hardware register; `"cc"' serves to name this 29326 register. On other machines, condition code handling is different, 29327 and specifying `"cc"' has no effect. But it is valid no matter 29328 what the target. 29329 29330`"memory"' 29331 The `"memory"' clobber tells the compiler that the assembly code 29332 performs memory reads or writes to items other than those listed 29333 in the input and output operands (for example, accessing the 29334 memory pointed to by one of the input parameters). To ensure 29335 memory contains correct values, GCC may need to flush specific 29336 register values to memory before executing the `asm'. Further, the 29337 compiler does not assume that any values read from memory before an 29338 `asm' remain unchanged after that `asm'; it reloads them as needed. 29339 Using the `"memory"' clobber effectively forms a read/write memory 29340 barrier for the compiler. 29341 29342 Note that this clobber does not prevent the _processor_ from doing 29343 speculative reads past the `asm' statement. To prevent that, you 29344 need processor-specific fence instructions. 29345 29346 Flushing registers to memory has performance implications and may 29347 be an issue for time-sensitive code. You can use a trick to avoid 29348 this if the size of the memory being accessed is known at compile 29349 time. For example, if accessing ten bytes of a string, use a 29350 memory input like: 29351 29352 `{"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}'. 29353 29354 293556.43.2.6 Goto Labels 29356.................... 29357 29358`asm goto' allows assembly code to jump to one or more C labels. The 29359GOTOLABELS section in an `asm goto' statement contains a comma-separated 29360list of all C labels to which the assembler code may jump. GCC assumes 29361that `asm' execution falls through to the next statement (if this is 29362not the case, consider using the `__builtin_unreachable' intrinsic 29363after the `asm' statement). Optimization of `asm goto' may be improved 29364by using the `hot' and `cold' label attributes (*note Label 29365Attributes::). 29366 29367 An `asm goto' statement cannot have outputs. This is due to an 29368internal restriction of the compiler: control transfer instructions 29369cannot have outputs. If the assembler code does modify anything, use 29370the `"memory"' clobber to force the optimizers to flush all register 29371values to memory and reload them if necessary after the `asm' statement. 29372 29373 Also note that an `asm goto' statement is always implicitly considered 29374volatile. 29375 29376 To reference a label in the assembler template, prefix it with `%l' 29377(lowercase `L') followed by its (zero-based) position in GOTOLABELS 29378plus the number of input operands. For example, if the `asm' has three 29379inputs and references two labels, refer to the first label as `%l3' and 29380the second as `%l4'). 29381 29382 Alternately, you can reference labels using the actual C label name 29383enclosed in brackets. For example, to reference a label named `carry', 29384you can use `%l[carry]'. The label must still be listed in the 29385GOTOLABELS section when using this approach. 29386 29387 Here is an example of `asm goto' for i386: 29388 29389 asm goto ( 29390 "btl %1, %0\n\t" 29391 "jc %l2" 29392 : /* No outputs. */ 29393 : "r" (p1), "r" (p2) 29394 : "cc" 29395 : carry); 29396 29397 return 0; 29398 29399 carry: 29400 return 1; 29401 29402 The following example shows an `asm goto' that uses a memory clobber. 29403 29404 int frob(int x) 29405 { 29406 int y; 29407 asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5" 29408 : /* No outputs. */ 29409 : "r"(x), "r"(&y) 29410 : "r5", "memory" 29411 : error); 29412 return y; 29413 error: 29414 return -1; 29415 } 29416 294176.43.2.7 x86 Operand Modifiers 29418.............................. 29419 29420References to input, output, and goto operands in the assembler template 29421of extended `asm' statements can use modifiers to affect the way the 29422operands are formatted in the code output to the assembler. For 29423example, the following code uses the `h' and `b' modifiers for x86: 29424 29425 uint16_t num; 29426 asm volatile ("xchg %h0, %b0" : "+a" (num) ); 29427 29428These modifiers generate this assembler code: 29429 29430 xchg %ah, %al 29431 29432 The rest of this discussion uses the following code for illustrative 29433purposes. 29434 29435 int main() 29436 { 29437 int iInt = 1; 29438 29439 top: 29440 29441 asm volatile goto ("some assembler instructions here" 29442 : /* No outputs. */ 29443 : "q" (iInt), "X" (sizeof(unsigned char) + 1) 29444 : /* No clobbers. */ 29445 : top); 29446 } 29447 29448 With no modifiers, this is what the output from the operands would be 29449for the `att' and `intel' dialects of assembler: 29450 29451Operand masm=att masm=intel 29452--------------------------------------- 29453`%0' `%eax' `eax' 29454`%1' `$2' `2' 29455`%2' `$.L2' `OFFSET FLAT:.L2' 29456 29457 The table below shows the list of supported modifiers and their 29458effects. 29459 29460Modifier Description Operand `masm=att' `masm=intel' 29461------------------------------------------------------------------------------------------ 29462`z' Print the opcode suffix for the size of the `%z0' `l' 29463 current integer operand (one of 29464 `b'/`w'/`l'/`q'). 29465`b' Print the QImode name of the register. `%b0' `%al' `al' 29466`h' Print the QImode name for a "high" register. `%h0' `%ah' `ah' 29467`w' Print the HImode name of the register. `%w0' `%ax' `ax' 29468`k' Print the SImode name of the register. `%k0' `%eax' `eax' 29469`q' Print the DImode name of the register. `%q0' `%rax' `rax' 29470`l' Print the label name with no punctuation. `%l2' `.L2' `.L2' 29471`c' Require a constant operand and print the `%c1' `2' `2' 29472 constant expression with no punctuation. 29473 294746.43.2.8 x86 Floating-Point `asm' Operands 29475.......................................... 29476 29477On x86 targets, there are several rules on the usage of stack-like 29478registers in the operands of an `asm'. These rules apply only to the 29479operands that are stack-like registers: 29480 29481 1. Given a set of input registers that die in an `asm', it is 29482 necessary to know which are implicitly popped by the `asm', and 29483 which must be explicitly popped by GCC. 29484 29485 An input register that is implicitly popped by the `asm' must be 29486 explicitly clobbered, unless it is constrained to match an output 29487 operand. 29488 29489 2. For any input register that is implicitly popped by an `asm', it is 29490 necessary to know how to adjust the stack to compensate for the 29491 pop. If any non-popped input is closer to the top of the 29492 reg-stack than the implicitly popped register, it would not be 29493 possible to know what the stack looked like--it's not clear how 29494 the rest of the stack "slides up". 29495 29496 All implicitly popped input registers must be closer to the top of 29497 the reg-stack than any input that is not implicitly popped. 29498 29499 It is possible that if an input dies in an `asm', the compiler 29500 might use the input register for an output reload. Consider this 29501 example: 29502 29503 asm ("foo" : "=t" (a) : "f" (b)); 29504 29505 This code says that input `b' is not popped by the `asm', and that 29506 the `asm' pushes a result onto the reg-stack, i.e., the stack is 29507 one deeper after the `asm' than it was before. But, it is 29508 possible that reload may think that it can use the same register 29509 for both the input and the output. 29510 29511 To prevent this from happening, if any input operand uses the `f' 29512 constraint, all output register constraints must use the `&' 29513 early-clobber modifier. 29514 29515 The example above is correctly written as: 29516 29517 asm ("foo" : "=&t" (a) : "f" (b)); 29518 29519 3. Some operands need to be in particular places on the stack. All 29520 output operands fall in this category--GCC has no other way to 29521 know which registers the outputs appear in unless you indicate 29522 this in the constraints. 29523 29524 Output operands must specifically indicate which register an output 29525 appears in after an `asm'. `=f' is not allowed: the operand 29526 constraints must select a class with a single register. 29527 29528 4. Output operands may not be "inserted" between existing stack 29529 registers. Since no 387 opcode uses a read/write operand, all 29530 output operands are dead before the `asm', and are pushed by the 29531 `asm'. It makes no sense to push anywhere but the top of the 29532 reg-stack. 29533 29534 Output operands must start at the top of the reg-stack: output 29535 operands may not "skip" a register. 29536 29537 5. Some `asm' statements may need extra stack space for internal 29538 calculations. This can be guaranteed by clobbering stack registers 29539 unrelated to the inputs and outputs. 29540 29541 29542 This `asm' takes one input, which is internally popped, and produces 29543two outputs. 29544 29545 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 29546 29547This `asm' takes two inputs, which are popped by the `fyl2xp1' opcode, 29548and replaces them with one output. The `st(1)' clobber is necessary 29549for the compiler to know that `fyl2xp1' pops both inputs. 29550 29551 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 29552 29553 29554File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: Using Assembly Language with C 29555 295566.43.3 Constraints for `asm' Operands 29557------------------------------------- 29558 29559Here are specific details on what constraint letters you can use with 29560`asm' operands. Constraints can say whether an operand may be in a 29561register, and which kinds of register; whether the operand can be a 29562memory reference, and which kinds of address; whether the operand may 29563be an immediate constant, and which possible values it may have. 29564Constraints can also require two operands to match. Side-effects 29565aren't allowed in operands of inline `asm', unless `<' or `>' 29566constraints are used, because there is no guarantee that the 29567side-effects will happen exactly once in an instruction that can update 29568the addressing register. 29569 29570* Menu: 29571 29572* Simple Constraints:: Basic use of constraints. 29573* Multi-Alternative:: When an insn has two alternative constraint-patterns. 29574* Modifiers:: More precise control over effects of constraints. 29575* Machine Constraints:: Special constraints for some particular machines. 29576 29577 29578File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 29579 295806.43.3.1 Simple Constraints 29581........................... 29582 29583The simplest kind of constraint is a string full of letters, each of 29584which describes one kind of operand that is permitted. Here are the 29585letters that are allowed: 29586 29587whitespace 29588 Whitespace characters are ignored and can be inserted at any 29589 position except the first. This enables each alternative for 29590 different operands to be visually aligned in the machine 29591 description even if they have different number of constraints and 29592 modifiers. 29593 29594`m' 29595 A memory operand is allowed, with any kind of address that the 29596 machine supports in general. Note that the letter used for the 29597 general memory constraint can be re-defined by a back end using 29598 the `TARGET_MEM_CONSTRAINT' macro. 29599 29600`o' 29601 A memory operand is allowed, but only if the address is 29602 "offsettable". This means that adding a small integer (actually, 29603 the width in bytes of the operand, as determined by its machine 29604 mode) may be added to the address and the result is also a valid 29605 memory address. 29606 29607 For example, an address which is constant is offsettable; so is an 29608 address that is the sum of a register and a constant (as long as a 29609 slightly larger constant is also within the range of 29610 address-offsets supported by the machine); but an autoincrement or 29611 autodecrement address is not offsettable. More complicated 29612 indirect/indexed addresses may or may not be offsettable depending 29613 on the other addressing modes that the machine supports. 29614 29615 Note that in an output operand which can be matched by another 29616 operand, the constraint letter `o' is valid only when accompanied 29617 by both `<' (if the target machine has predecrement addressing) 29618 and `>' (if the target machine has preincrement addressing). 29619 29620`V' 29621 A memory operand that is not offsettable. In other words, 29622 anything that would fit the `m' constraint but not the `o' 29623 constraint. 29624 29625`<' 29626 A memory operand with autodecrement addressing (either 29627 predecrement or postdecrement) is allowed. In inline `asm' this 29628 constraint is only allowed if the operand is used exactly once in 29629 an instruction that can handle the side-effects. Not using an 29630 operand with `<' in constraint string in the inline `asm' pattern 29631 at all or using it in multiple instructions isn't valid, because 29632 the side-effects wouldn't be performed or would be performed more 29633 than once. Furthermore, on some targets the operand with `<' in 29634 constraint string must be accompanied by special instruction 29635 suffixes like `%U0' instruction suffix on PowerPC or `%P0' on 29636 IA-64. 29637 29638`>' 29639 A memory operand with autoincrement addressing (either 29640 preincrement or postincrement) is allowed. In inline `asm' the 29641 same restrictions as for `<' apply. 29642 29643`r' 29644 A register operand is allowed provided that it is in a general 29645 register. 29646 29647`i' 29648 An immediate integer operand (one with constant value) is allowed. 29649 This includes symbolic constants whose values will be known only at 29650 assembly time or later. 29651 29652`n' 29653 An immediate integer operand with a known numeric value is allowed. 29654 Many systems cannot support assembly-time constants for operands 29655 less than a word wide. Constraints for these operands should use 29656 `n' rather than `i'. 29657 29658`I', `J', `K', ... `P' 29659 Other letters in the range `I' through `P' may be defined in a 29660 machine-dependent fashion to permit immediate integer operands with 29661 explicit integer values in specified ranges. For example, on the 29662 68000, `I' is defined to stand for the range of values 1 to 8. 29663 This is the range permitted as a shift count in the shift 29664 instructions. 29665 29666`E' 29667 An immediate floating operand (expression code `const_double') is 29668 allowed, but only if the target floating point format is the same 29669 as that of the host machine (on which the compiler is running). 29670 29671`F' 29672 An immediate floating operand (expression code `const_double' or 29673 `const_vector') is allowed. 29674 29675`G', `H' 29676 `G' and `H' may be defined in a machine-dependent fashion to 29677 permit immediate floating operands in particular ranges of values. 29678 29679`s' 29680 An immediate integer operand whose value is not an explicit 29681 integer is allowed. 29682 29683 This might appear strange; if an insn allows a constant operand 29684 with a value not known at compile time, it certainly must allow 29685 any known value. So why use `s' instead of `i'? Sometimes it 29686 allows better code to be generated. 29687 29688 For example, on the 68000 in a fullword instruction it is possible 29689 to use an immediate operand; but if the immediate value is between 29690 -128 and 127, better code results from loading the value into a 29691 register and using the register. This is because the load into 29692 the register can be done with a `moveq' instruction. We arrange 29693 for this to happen by defining the letter `K' to mean "any integer 29694 outside the range -128 to 127", and then specifying `Ks' in the 29695 operand constraints. 29696 29697`g' 29698 Any register, memory or immediate integer operand is allowed, 29699 except for registers that are not general registers. 29700 29701`X' 29702 Any operand whatsoever is allowed. 29703 29704`0', `1', `2', ... `9' 29705 An operand that matches the specified operand number is allowed. 29706 If a digit is used together with letters within the same 29707 alternative, the digit should come last. 29708 29709 This number is allowed to be more than a single digit. If multiple 29710 digits are encountered consecutively, they are interpreted as a 29711 single decimal integer. There is scant chance for ambiguity, 29712 since to-date it has never been desirable that `10' be interpreted 29713 as matching either operand 1 _or_ operand 0. Should this be 29714 desired, one can use multiple alternatives instead. 29715 29716 This is called a "matching constraint" and what it really means is 29717 that the assembler has only a single operand that fills two roles 29718 which `asm' distinguishes. For example, an add instruction uses 29719 two input operands and an output operand, but on most CISC 29720 machines an add instruction really has only two operands, one of 29721 them an input-output operand: 29722 29723 addl #35,r12 29724 29725 Matching constraints are used in these circumstances. More 29726 precisely, the two operands that match must include one input-only 29727 operand and one output-only operand. Moreover, the digit must be a 29728 smaller number than the number of the operand that uses it in the 29729 constraint. 29730 29731`p' 29732 An operand that is a valid memory address is allowed. This is for 29733 "load address" and "push address" instructions. 29734 29735 `p' in the constraint must be accompanied by `address_operand' as 29736 the predicate in the `match_operand'. This predicate interprets 29737 the mode specified in the `match_operand' as the mode of the memory 29738 reference for which the address would be valid. 29739 29740OTHER-LETTERS 29741 Other letters can be defined in machine-dependent fashion to stand 29742 for particular classes of registers or other arbitrary operand 29743 types. `d', `a' and `f' are defined on the 68000/68020 to stand 29744 for data, address and floating point registers. 29745 29746 29747File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 29748 297496.43.3.2 Multiple Alternative Constraints 29750......................................... 29751 29752Sometimes a single instruction has multiple alternative sets of possible 29753operands. For example, on the 68000, a logical-or instruction can 29754combine register or an immediate value into memory, or it can combine 29755any kind of operand into a register; but it cannot combine one memory 29756location into another. 29757 29758 These constraints are represented as multiple alternatives. An 29759alternative can be described by a series of letters for each operand. 29760The overall constraint for an operand is made from the letters for this 29761operand from the first alternative, a comma, the letters for this 29762operand from the second alternative, a comma, and so on until the last 29763alternative. 29764 29765 If all the operands fit any one alternative, the instruction is valid. 29766Otherwise, for each alternative, the compiler counts how many 29767instructions must be added to copy the operands so that that 29768alternative applies. The alternative requiring the least copying is 29769chosen. If two alternatives need the same amount of copying, the one 29770that comes first is chosen. These choices can be altered with the `?' 29771and `!' characters: 29772 29773`?' 29774 Disparage slightly the alternative that the `?' appears in, as a 29775 choice when no alternative applies exactly. The compiler regards 29776 this alternative as one unit more costly for each `?' that appears 29777 in it. 29778 29779`!' 29780 Disparage severely the alternative that the `!' appears in. This 29781 alternative can still be used if it fits without reloading, but if 29782 reloading is needed, some other alternative will be used. 29783 29784`^' 29785 This constraint is analogous to `?' but it disparages slightly the 29786 alternative only if the operand with the `^' needs a reload. 29787 29788`$' 29789 This constraint is analogous to `!' but it disparages severely the 29790 alternative only if the operand with the `$' needs a reload. 29791 29792 29793File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 29794 297956.43.3.3 Constraint Modifier Characters 29796....................................... 29797 29798Here are constraint modifier characters. 29799 29800`=' 29801 Means that this operand is written to by this instruction: the 29802 previous value is discarded and replaced by new data. 29803 29804`+' 29805 Means that this operand is both read and written by the 29806 instruction. 29807 29808 When the compiler fixes up the operands to satisfy the constraints, 29809 it needs to know which operands are read by the instruction and 29810 which are written by it. `=' identifies an operand which is only 29811 written; `+' identifies an operand that is both read and written; 29812 all other operands are assumed to only be read. 29813 29814 If you specify `=' or `+' in a constraint, you put it in the first 29815 character of the constraint string. 29816 29817`&' 29818 Means (in a particular alternative) that this operand is an 29819 "earlyclobber" operand, which is written before the instruction is 29820 finished using the input operands. Therefore, this operand may 29821 not lie in a register that is read by the instruction or as part 29822 of any memory address. 29823 29824 `&' applies only to the alternative in which it is written. In 29825 constraints with multiple alternatives, sometimes one alternative 29826 requires `&' while others do not. See, for example, the `movdf' 29827 insn of the 68000. 29828 29829 A operand which is read by the instruction can be tied to an 29830 earlyclobber operand if its only use as an input occurs before the 29831 early result is written. Adding alternatives of this form often 29832 allows GCC to produce better code when only some of the read 29833 operands can be affected by the earlyclobber. See, for example, 29834 the `mulsi3' insn of the ARM. 29835 29836 Furthermore, if the "earlyclobber" operand is also a read/write 29837 operand, then that operand is written only after it's used. 29838 29839 `&' does not obviate the need to write `=' or `+'. As 29840 "earlyclobber" operands are always written, a read-only 29841 "earlyclobber" operand is ill-formed and will be rejected by the 29842 compiler. 29843 29844`%' 29845 Declares the instruction to be commutative for this operand and the 29846 following operand. This means that the compiler may interchange 29847 the two operands if that is the cheapest way to make all operands 29848 fit the constraints. `%' applies to all alternatives and must 29849 appear as the first character in the constraint. Only read-only 29850 operands can use `%'. 29851 29852 GCC can only handle one commutative pair in an asm; if you use 29853 more, the compiler may fail. Note that you need not use the 29854 modifier if the two alternatives are strictly identical; this 29855 would only waste time in the reload pass. The modifier is not 29856 operational after register allocation, so the result of 29857 `define_peephole2' and `define_split's performed after reload 29858 cannot rely on `%' to make the intended insn match. 29859 29860`#' 29861 Says that all following characters, up to the next comma, are to be 29862 ignored as a constraint. They are significant only for choosing 29863 register preferences. 29864 29865`*' 29866 Says that the following character should be ignored when choosing 29867 register preferences. `*' has no effect on the meaning of the 29868 constraint as a constraint, and no effect on reloading. For LRA 29869 `*' additionally disparages slightly the alternative if the 29870 following character matches the operand. 29871 29872 29873 29874File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 29875 298766.43.3.4 Constraints for Particular Machines 29877............................................ 29878 29879Whenever possible, you should use the general-purpose constraint letters 29880in `asm' arguments, since they will convey meaning more readily to 29881people reading your code. Failing that, use the constraint letters 29882that usually have very similar meanings across architectures. The most 29883commonly used constraints are `m' and `r' (for memory and 29884general-purpose registers respectively; *note Simple Constraints::), and 29885`I', usually the letter indicating the most common immediate-constant 29886format. 29887 29888 Each architecture defines additional constraints. These constraints 29889are used by the compiler itself for instruction generation, as well as 29890for `asm' statements; therefore, some of the constraints are not 29891particularly useful for `asm'. Here is a summary of some of the 29892machine-dependent constraints available on some particular machines; it 29893includes both constraints that are useful for `asm' and constraints 29894that aren't. The compiler source file mentioned in the table heading 29895for each architecture is the definitive reference for the meanings of 29896that architecture's constraints. 29897 29898_AArch64 family--`config/aarch64/constraints.md'_ 29899 29900 `k' 29901 The stack pointer register (`SP') 29902 29903 `w' 29904 Floating point or SIMD vector register 29905 29906 `I' 29907 Integer constant that is valid as an immediate operand in an 29908 `ADD' instruction 29909 29910 `J' 29911 Integer constant that is valid as an immediate operand in a 29912 `SUB' instruction (once negated) 29913 29914 `K' 29915 Integer constant that can be used with a 32-bit logical 29916 instruction 29917 29918 `L' 29919 Integer constant that can be used with a 64-bit logical 29920 instruction 29921 29922 `M' 29923 Integer constant that is valid as an immediate operand in a 29924 32-bit `MOV' pseudo instruction. The `MOV' may be assembled 29925 to one of several different machine instructions depending on 29926 the value 29927 29928 `N' 29929 Integer constant that is valid as an immediate operand in a 29930 64-bit `MOV' pseudo instruction 29931 29932 `S' 29933 An absolute symbolic address or a label reference 29934 29935 `Y' 29936 Floating point constant zero 29937 29938 `Z' 29939 Integer constant zero 29940 29941 `Ush' 29942 The high part (bits 12 and upwards) of the pc-relative 29943 address of a symbol within 4GB of the instruction 29944 29945 `Q' 29946 A memory address which uses a single base register with no 29947 offset 29948 29949 `Ump' 29950 A memory address suitable for a load/store pair instruction 29951 in SI, DI, SF and DF modes 29952 29953 29954_ARC --`config/arc/constraints.md'_ 29955 29956 `q' 29957 Registers usable in ARCompact 16-bit instructions: `r0'-`r3', 29958 `r12'-`r15'. This constraint can only match when the `-mq' 29959 option is in effect. 29960 29961 `e' 29962 Registers usable as base-regs of memory addresses in 29963 ARCompact 16-bit memory instructions: `r0'-`r3', `r12'-`r15', 29964 `sp'. This constraint can only match when the `-mq' option 29965 is in effect. 29966 29967 `D' 29968 ARC FPX (dpfp) 64-bit registers. `D0', `D1'. 29969 29970 `I' 29971 A signed 12-bit integer constant. 29972 29973 `Cal' 29974 constant for arithmetic/logical operations. This might be 29975 any constant that can be put into a long immediate by the 29976 assmbler or linker without involving a PIC relocation. 29977 29978 `K' 29979 A 3-bit unsigned integer constant. 29980 29981 `L' 29982 A 6-bit unsigned integer constant. 29983 29984 `CnL' 29985 One's complement of a 6-bit unsigned integer constant. 29986 29987 `CmL' 29988 Two's complement of a 6-bit unsigned integer constant. 29989 29990 `M' 29991 A 5-bit unsigned integer constant. 29992 29993 `O' 29994 A 7-bit unsigned integer constant. 29995 29996 `P' 29997 A 8-bit unsigned integer constant. 29998 29999 `H' 30000 Any const_double value. 30001 30002_ARM family--`config/arm/constraints.md'_ 30003 30004 `h' 30005 In Thumb state, the core registers `r8'-`r15'. 30006 30007 `k' 30008 The stack pointer register. 30009 30010 `l' 30011 In Thumb State the core registers `r0'-`r7'. In ARM state 30012 this is an alias for the `r' constraint. 30013 30014 `t' 30015 VFP floating-point registers `s0'-`s31'. Used for 32 bit 30016 values. 30017 30018 `w' 30019 VFP floating-point registers `d0'-`d31' and the appropriate 30020 subset `d0'-`d15' based on command line options. Used for 64 30021 bit values only. Not valid for Thumb1. 30022 30023 `y' 30024 The iWMMX co-processor registers. 30025 30026 `z' 30027 The iWMMX GR registers. 30028 30029 `G' 30030 The floating-point constant 0.0 30031 30032 `I' 30033 Integer that is valid as an immediate operand in a data 30034 processing instruction. That is, an integer in the range 0 30035 to 255 rotated by a multiple of 2 30036 30037 `J' 30038 Integer in the range -4095 to 4095 30039 30040 `K' 30041 Integer that satisfies constraint `I' when inverted (ones 30042 complement) 30043 30044 `L' 30045 Integer that satisfies constraint `I' when negated (twos 30046 complement) 30047 30048 `M' 30049 Integer in the range 0 to 32 30050 30051 `Q' 30052 A memory reference where the exact address is in a single 30053 register (``m'' is preferable for `asm' statements) 30054 30055 `R' 30056 An item in the constant pool 30057 30058 `S' 30059 A symbol in the text segment of the current file 30060 30061 `Uv' 30062 A memory reference suitable for VFP load/store insns 30063 (reg+constant offset) 30064 30065 `Uy' 30066 A memory reference suitable for iWMMXt load/store 30067 instructions. 30068 30069 `Uq' 30070 A memory reference suitable for the ARMv4 ldrsb instruction. 30071 30072_AVR family--`config/avr/constraints.md'_ 30073 30074 `l' 30075 Registers from r0 to r15 30076 30077 `a' 30078 Registers from r16 to r23 30079 30080 `d' 30081 Registers from r16 to r31 30082 30083 `w' 30084 Registers from r24 to r31. These registers can be used in 30085 `adiw' command 30086 30087 `e' 30088 Pointer register (r26-r31) 30089 30090 `b' 30091 Base pointer register (r28-r31) 30092 30093 `q' 30094 Stack pointer register (SPH:SPL) 30095 30096 `t' 30097 Temporary register r0 30098 30099 `x' 30100 Register pair X (r27:r26) 30101 30102 `y' 30103 Register pair Y (r29:r28) 30104 30105 `z' 30106 Register pair Z (r31:r30) 30107 30108 `I' 30109 Constant greater than -1, less than 64 30110 30111 `J' 30112 Constant greater than -64, less than 1 30113 30114 `K' 30115 Constant integer 2 30116 30117 `L' 30118 Constant integer 0 30119 30120 `M' 30121 Constant that fits in 8 bits 30122 30123 `N' 30124 Constant integer -1 30125 30126 `O' 30127 Constant integer 8, 16, or 24 30128 30129 `P' 30130 Constant integer 1 30131 30132 `G' 30133 A floating point constant 0.0 30134 30135 `Q' 30136 A memory address based on Y or Z pointer with displacement. 30137 30138_Blackfin family--`config/bfin/constraints.md'_ 30139 30140 `a' 30141 P register 30142 30143 `d' 30144 D register 30145 30146 `z' 30147 A call clobbered P register. 30148 30149 `qN' 30150 A single register. If N is in the range 0 to 7, the 30151 corresponding D register. If it is `A', then the register P0. 30152 30153 `D' 30154 Even-numbered D register 30155 30156 `W' 30157 Odd-numbered D register 30158 30159 `e' 30160 Accumulator register. 30161 30162 `A' 30163 Even-numbered accumulator register. 30164 30165 `B' 30166 Odd-numbered accumulator register. 30167 30168 `b' 30169 I register 30170 30171 `v' 30172 B register 30173 30174 `f' 30175 M register 30176 30177 `c' 30178 Registers used for circular buffering, i.e. I, B, or L 30179 registers. 30180 30181 `C' 30182 The CC register. 30183 30184 `t' 30185 LT0 or LT1. 30186 30187 `k' 30188 LC0 or LC1. 30189 30190 `u' 30191 LB0 or LB1. 30192 30193 `x' 30194 Any D, P, B, M, I or L register. 30195 30196 `y' 30197 Additional registers typically used only in prologues and 30198 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 30199 USP. 30200 30201 `w' 30202 Any register except accumulators or CC. 30203 30204 `Ksh' 30205 Signed 16 bit integer (in the range -32768 to 32767) 30206 30207 `Kuh' 30208 Unsigned 16 bit integer (in the range 0 to 65535) 30209 30210 `Ks7' 30211 Signed 7 bit integer (in the range -64 to 63) 30212 30213 `Ku7' 30214 Unsigned 7 bit integer (in the range 0 to 127) 30215 30216 `Ku5' 30217 Unsigned 5 bit integer (in the range 0 to 31) 30218 30219 `Ks4' 30220 Signed 4 bit integer (in the range -8 to 7) 30221 30222 `Ks3' 30223 Signed 3 bit integer (in the range -3 to 4) 30224 30225 `Ku3' 30226 Unsigned 3 bit integer (in the range 0 to 7) 30227 30228 `PN' 30229 Constant N, where N is a single-digit constant in the range 0 30230 to 4. 30231 30232 `PA' 30233 An integer equal to one of the MACFLAG_XXX constants that is 30234 suitable for use with either accumulator. 30235 30236 `PB' 30237 An integer equal to one of the MACFLAG_XXX constants that is 30238 suitable for use only with accumulator A1. 30239 30240 `M1' 30241 Constant 255. 30242 30243 `M2' 30244 Constant 65535. 30245 30246 `J' 30247 An integer constant with exactly a single bit set. 30248 30249 `L' 30250 An integer constant with all bits set except exactly one. 30251 30252 `H' 30253 30254 `Q' 30255 Any SYMBOL_REF. 30256 30257_CR16 Architecture--`config/cr16/cr16.h'_ 30258 30259 `b' 30260 Registers from r0 to r14 (registers without stack pointer) 30261 30262 `t' 30263 Register from r0 to r11 (all 16-bit registers) 30264 30265 `p' 30266 Register from r12 to r15 (all 32-bit registers) 30267 30268 `I' 30269 Signed constant that fits in 4 bits 30270 30271 `J' 30272 Signed constant that fits in 5 bits 30273 30274 `K' 30275 Signed constant that fits in 6 bits 30276 30277 `L' 30278 Unsigned constant that fits in 4 bits 30279 30280 `M' 30281 Signed constant that fits in 32 bits 30282 30283 `N' 30284 Check for 64 bits wide constants for add/sub instructions 30285 30286 `G' 30287 Floating point constant that is legal for store immediate 30288 30289_Epiphany--`config/epiphany/constraints.md'_ 30290 30291 `U16' 30292 An unsigned 16-bit constant. 30293 30294 `K' 30295 An unsigned 5-bit constant. 30296 30297 `L' 30298 A signed 11-bit constant. 30299 30300 `Cm1' 30301 A signed 11-bit constant added to -1. Can only match when 30302 the `-m1reg-REG' option is active. 30303 30304 `Cl1' 30305 Left-shift of -1, i.e., a bit mask with a block of leading 30306 ones, the rest being a block of trailing zeroes. Can only 30307 match when the `-m1reg-REG' option is active. 30308 30309 `Cr1' 30310 Right-shift of -1, i.e., a bit mask with a trailing block of 30311 ones, the rest being zeroes. Or to put it another way, one 30312 less than a power of two. Can only match when the 30313 `-m1reg-REG' option is active. 30314 30315 `Cal' 30316 Constant for arithmetic/logical operations. This is like 30317 `i', except that for position independent code, no symbols / 30318 expressions needing relocations are allowed. 30319 30320 `Csy' 30321 Symbolic constant for call/jump instruction. 30322 30323 `Rcs' 30324 The register class usable in short insns. This is a register 30325 class constraint, and can thus drive register allocation. 30326 This constraint won't match unless `-mprefer-short-insn-regs' 30327 is in effect. 30328 30329 `Rsc' 30330 The the register class of registers that can be used to hold a 30331 sibcall call address. I.e., a caller-saved register. 30332 30333 `Rct' 30334 Core control register class. 30335 30336 `Rgs' 30337 The register group usable in short insns. This constraint 30338 does not use a register class, so that it only passively 30339 matches suitable registers, and doesn't drive register 30340 allocation. 30341 30342 `Rra' 30343 Matches the return address if it can be replaced with the 30344 link register. 30345 30346 `Rcc' 30347 Matches the integer condition code register. 30348 30349 `Sra' 30350 Matches the return address if it is in a stack slot. 30351 30352 `Cfm' 30353 Matches control register values to switch fp mode, which are 30354 encapsulated in `UNSPEC_FP_MODE'. 30355 30356_FRV--`config/frv/frv.h'_ 30357 30358 `a' 30359 Register in the class `ACC_REGS' (`acc0' to `acc7'). 30360 30361 `b' 30362 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 30363 30364 `c' 30365 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 30366 to `icc3'). 30367 30368 `d' 30369 Register in the class `GPR_REGS' (`gr0' to `gr63'). 30370 30371 `e' 30372 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 30373 registers are excluded not in the class but through the use 30374 of a machine mode larger than 4 bytes. 30375 30376 `f' 30377 Register in the class `FPR_REGS' (`fr0' to `fr63'). 30378 30379 `h' 30380 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 30381 registers are excluded not in the class but through the use 30382 of a machine mode larger than 4 bytes. 30383 30384 `l' 30385 Register in the class `LR_REG' (the `lr' register). 30386 30387 `q' 30388 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 30389 Register numbers not divisible by 4 are excluded not in the 30390 class but through the use of a machine mode larger than 8 30391 bytes. 30392 30393 `t' 30394 Register in the class `ICC_REGS' (`icc0' to `icc3'). 30395 30396 `u' 30397 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 30398 30399 `v' 30400 Register in the class `ICR_REGS' (`cc4' to `cc7'). 30401 30402 `w' 30403 Register in the class `FCR_REGS' (`cc0' to `cc3'). 30404 30405 `x' 30406 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 30407 Register numbers not divisible by 4 are excluded not in the 30408 class but through the use of a machine mode larger than 8 30409 bytes. 30410 30411 `z' 30412 Register in the class `SPR_REGS' (`lcr' and `lr'). 30413 30414 `A' 30415 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 30416 30417 `B' 30418 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 30419 30420 `C' 30421 Register in the class `CR_REGS' (`cc0' to `cc7'). 30422 30423 `G' 30424 Floating point constant zero 30425 30426 `I' 30427 6-bit signed integer constant 30428 30429 `J' 30430 10-bit signed integer constant 30431 30432 `L' 30433 16-bit signed integer constant 30434 30435 `M' 30436 16-bit unsigned integer constant 30437 30438 `N' 30439 12-bit signed integer constant that is negative--i.e. in the 30440 range of -2048 to -1 30441 30442 `O' 30443 Constant zero 30444 30445 `P' 30446 12-bit signed integer constant that is greater than 30447 zero--i.e. in the range of 1 to 2047. 30448 30449 30450_Hewlett-Packard PA-RISC--`config/pa/pa.h'_ 30451 30452 `a' 30453 General register 1 30454 30455 `f' 30456 Floating point register 30457 30458 `q' 30459 Shift amount register 30460 30461 `x' 30462 Floating point register (deprecated) 30463 30464 `y' 30465 Upper floating point register (32-bit), floating point 30466 register (64-bit) 30467 30468 `Z' 30469 Any register 30470 30471 `I' 30472 Signed 11-bit integer constant 30473 30474 `J' 30475 Signed 14-bit integer constant 30476 30477 `K' 30478 Integer constant that can be deposited with a `zdepi' 30479 instruction 30480 30481 `L' 30482 Signed 5-bit integer constant 30483 30484 `M' 30485 Integer constant 0 30486 30487 `N' 30488 Integer constant that can be loaded with a `ldil' instruction 30489 30490 `O' 30491 Integer constant whose value plus one is a power of 2 30492 30493 `P' 30494 Integer constant that can be used for `and' operations in 30495 `depi' and `extru' instructions 30496 30497 `S' 30498 Integer constant 31 30499 30500 `U' 30501 Integer constant 63 30502 30503 `G' 30504 Floating-point constant 0.0 30505 30506 `A' 30507 A `lo_sum' data-linkage-table memory operand 30508 30509 `Q' 30510 A memory operand that can be used as the destination operand 30511 of an integer store instruction 30512 30513 `R' 30514 A scaled or unscaled indexed memory operand 30515 30516 `T' 30517 A memory operand for floating-point loads and stores 30518 30519 `W' 30520 A register indirect memory operand 30521 30522_Intel IA-64--`config/ia64/ia64.h'_ 30523 30524 `a' 30525 General register `r0' to `r3' for `addl' instruction 30526 30527 `b' 30528 Branch register 30529 30530 `c' 30531 Predicate register (`c' as in "conditional") 30532 30533 `d' 30534 Application register residing in M-unit 30535 30536 `e' 30537 Application register residing in I-unit 30538 30539 `f' 30540 Floating-point register 30541 30542 `m' 30543 Memory operand. If used together with `<' or `>', the 30544 operand can have postincrement and postdecrement which 30545 require printing with `%Pn' on IA-64. 30546 30547 `G' 30548 Floating-point constant 0.0 or 1.0 30549 30550 `I' 30551 14-bit signed integer constant 30552 30553 `J' 30554 22-bit signed integer constant 30555 30556 `K' 30557 8-bit signed integer constant for logical instructions 30558 30559 `L' 30560 8-bit adjusted signed integer constant for compare pseudo-ops 30561 30562 `M' 30563 6-bit unsigned integer constant for shift counts 30564 30565 `N' 30566 9-bit signed integer constant for load and store 30567 postincrements 30568 30569 `O' 30570 The constant zero 30571 30572 `P' 30573 0 or -1 for `dep' instruction 30574 30575 `Q' 30576 Non-volatile memory for floating-point loads and stores 30577 30578 `R' 30579 Integer constant in the range 1 to 4 for `shladd' instruction 30580 30581 `S' 30582 Memory operand except postincrement and postdecrement. This 30583 is now roughly the same as `m' when not used together with `<' 30584 or `>'. 30585 30586_M32C--`config/m32c/m32c.c'_ 30587 30588 `Rsp' 30589 `Rfb' 30590 `Rsb' 30591 `$sp', `$fb', `$sb'. 30592 30593 `Rcr' 30594 Any control register, when they're 16 bits wide (nothing if 30595 control registers are 24 bits wide) 30596 30597 `Rcl' 30598 Any control register, when they're 24 bits wide. 30599 30600 `R0w' 30601 `R1w' 30602 `R2w' 30603 `R3w' 30604 $r0, $r1, $r2, $r3. 30605 30606 `R02' 30607 $r0 or $r2, or $r2r0 for 32 bit values. 30608 30609 `R13' 30610 $r1 or $r3, or $r3r1 for 32 bit values. 30611 30612 `Rdi' 30613 A register that can hold a 64 bit value. 30614 30615 `Rhl' 30616 $r0 or $r1 (registers with addressable high/low bytes) 30617 30618 `R23' 30619 $r2 or $r3 30620 30621 `Raa' 30622 Address registers 30623 30624 `Raw' 30625 Address registers when they're 16 bits wide. 30626 30627 `Ral' 30628 Address registers when they're 24 bits wide. 30629 30630 `Rqi' 30631 Registers that can hold QI values. 30632 30633 `Rad' 30634 Registers that can be used with displacements ($a0, $a1, $sb). 30635 30636 `Rsi' 30637 Registers that can hold 32 bit values. 30638 30639 `Rhi' 30640 Registers that can hold 16 bit values. 30641 30642 `Rhc' 30643 Registers chat can hold 16 bit values, including all control 30644 registers. 30645 30646 `Rra' 30647 $r0 through R1, plus $a0 and $a1. 30648 30649 `Rfl' 30650 The flags register. 30651 30652 `Rmm' 30653 The memory-based pseudo-registers $mem0 through $mem15. 30654 30655 `Rpi' 30656 Registers that can hold pointers (16 bit registers for r8c, 30657 m16c; 24 bit registers for m32cm, m32c). 30658 30659 `Rpa' 30660 Matches multiple registers in a PARALLEL to form a larger 30661 register. Used to match function return values. 30662 30663 `Is3' 30664 -8 ... 7 30665 30666 `IS1' 30667 -128 ... 127 30668 30669 `IS2' 30670 -32768 ... 32767 30671 30672 `IU2' 30673 0 ... 65535 30674 30675 `In4' 30676 -8 ... -1 or 1 ... 8 30677 30678 `In5' 30679 -16 ... -1 or 1 ... 16 30680 30681 `In6' 30682 -32 ... -1 or 1 ... 32 30683 30684 `IM2' 30685 -65536 ... -1 30686 30687 `Ilb' 30688 An 8 bit value with exactly one bit set. 30689 30690 `Ilw' 30691 A 16 bit value with exactly one bit set. 30692 30693 `Sd' 30694 The common src/dest memory addressing modes. 30695 30696 `Sa' 30697 Memory addressed using $a0 or $a1. 30698 30699 `Si' 30700 Memory addressed with immediate addresses. 30701 30702 `Ss' 30703 Memory addressed using the stack pointer ($sp). 30704 30705 `Sf' 30706 Memory addressed using the frame base register ($fb). 30707 30708 `Ss' 30709 Memory addressed using the small base register ($sb). 30710 30711 `S1' 30712 $r1h 30713 30714_MeP--`config/mep/constraints.md'_ 30715 30716 `a' 30717 The $sp register. 30718 30719 `b' 30720 The $tp register. 30721 30722 `c' 30723 Any control register. 30724 30725 `d' 30726 Either the $hi or the $lo register. 30727 30728 `em' 30729 Coprocessor registers that can be directly loaded ($c0-$c15). 30730 30731 `ex' 30732 Coprocessor registers that can be moved to each other. 30733 30734 `er' 30735 Coprocessor registers that can be moved to core registers. 30736 30737 `h' 30738 The $hi register. 30739 30740 `j' 30741 The $rpc register. 30742 30743 `l' 30744 The $lo register. 30745 30746 `t' 30747 Registers which can be used in $tp-relative addressing. 30748 30749 `v' 30750 The $gp register. 30751 30752 `x' 30753 The coprocessor registers. 30754 30755 `y' 30756 The coprocessor control registers. 30757 30758 `z' 30759 The $0 register. 30760 30761 `A' 30762 User-defined register set A. 30763 30764 `B' 30765 User-defined register set B. 30766 30767 `C' 30768 User-defined register set C. 30769 30770 `D' 30771 User-defined register set D. 30772 30773 `I' 30774 Offsets for $gp-rel addressing. 30775 30776 `J' 30777 Constants that can be used directly with boolean insns. 30778 30779 `K' 30780 Constants that can be moved directly to registers. 30781 30782 `L' 30783 Small constants that can be added to registers. 30784 30785 `M' 30786 Long shift counts. 30787 30788 `N' 30789 Small constants that can be compared to registers. 30790 30791 `O' 30792 Constants that can be loaded into the top half of registers. 30793 30794 `S' 30795 Signed 8-bit immediates. 30796 30797 `T' 30798 Symbols encoded for $tp-rel or $gp-rel addressing. 30799 30800 `U' 30801 Non-constant addresses for loading/saving coprocessor 30802 registers. 30803 30804 `W' 30805 The top half of a symbol's value. 30806 30807 `Y' 30808 A register indirect address without offset. 30809 30810 `Z' 30811 Symbolic references to the control bus. 30812 30813 30814_MicroBlaze--`config/microblaze/constraints.md'_ 30815 30816 `d' 30817 A general register (`r0' to `r31'). 30818 30819 `z' 30820 A status register (`rmsr', `$fcc1' to `$fcc7'). 30821 30822 30823_MIPS--`config/mips/constraints.md'_ 30824 30825 `d' 30826 An address register. This is equivalent to `r' unless 30827 generating MIPS16 code. 30828 30829 `f' 30830 A floating-point register (if available). 30831 30832 `h' 30833 Formerly the `hi' register. This constraint is no longer 30834 supported. 30835 30836 `l' 30837 The `lo' register. Use this register to store values that are 30838 no bigger than a word. 30839 30840 `x' 30841 The concatenated `hi' and `lo' registers. Use this register 30842 to store doubleword values. 30843 30844 `c' 30845 A register suitable for use in an indirect jump. This will 30846 always be `$25' for `-mabicalls'. 30847 30848 `v' 30849 Register `$3'. Do not use this constraint in new code; it is 30850 retained only for compatibility with glibc. 30851 30852 `y' 30853 Equivalent to `r'; retained for backwards compatibility. 30854 30855 `z' 30856 A floating-point condition code register. 30857 30858 `I' 30859 A signed 16-bit constant (for arithmetic instructions). 30860 30861 `J' 30862 Integer zero. 30863 30864 `K' 30865 An unsigned 16-bit constant (for logic instructions). 30866 30867 `L' 30868 A signed 32-bit constant in which the lower 16 bits are zero. 30869 Such constants can be loaded using `lui'. 30870 30871 `M' 30872 A constant that cannot be loaded using `lui', `addiu' or 30873 `ori'. 30874 30875 `N' 30876 A constant in the range -65535 to -1 (inclusive). 30877 30878 `O' 30879 A signed 15-bit constant. 30880 30881 `P' 30882 A constant in the range 1 to 65535 (inclusive). 30883 30884 `G' 30885 Floating-point zero. 30886 30887 `R' 30888 An address that can be used in a non-macro load or store. 30889 30890 `ZC' 30891 A memory operand whose address is formed by a base register 30892 and offset that is suitable for use in instructions with the 30893 same addressing mode as `ll' and `sc'. 30894 30895 `ZD' 30896 An address suitable for a `prefetch' instruction, or for any 30897 other instruction with the same addressing mode as `prefetch'. 30898 30899_Motorola 680x0--`config/m68k/constraints.md'_ 30900 30901 `a' 30902 Address register 30903 30904 `d' 30905 Data register 30906 30907 `f' 30908 68881 floating-point register, if available 30909 30910 `I' 30911 Integer in the range 1 to 8 30912 30913 `J' 30914 16-bit signed number 30915 30916 `K' 30917 Signed number whose magnitude is greater than 0x80 30918 30919 `L' 30920 Integer in the range -8 to -1 30921 30922 `M' 30923 Signed number whose magnitude is greater than 0x100 30924 30925 `N' 30926 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 30927 30928 `O' 30929 16 (for rotate using swap) 30930 30931 `P' 30932 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 30933 30934 `R' 30935 Numbers that mov3q can handle 30936 30937 `G' 30938 Floating point constant that is not a 68881 constant 30939 30940 `S' 30941 Operands that satisfy 'm' when -mpcrel is in effect 30942 30943 `T' 30944 Operands that satisfy 's' when -mpcrel is not in effect 30945 30946 `Q' 30947 Address register indirect addressing mode 30948 30949 `U' 30950 Register offset addressing 30951 30952 `W' 30953 const_call_operand 30954 30955 `Cs' 30956 symbol_ref or const 30957 30958 `Ci' 30959 const_int 30960 30961 `C0' 30962 const_int 0 30963 30964 `Cj' 30965 Range of signed numbers that don't fit in 16 bits 30966 30967 `Cmvq' 30968 Integers valid for mvq 30969 30970 `Capsw' 30971 Integers valid for a moveq followed by a swap 30972 30973 `Cmvz' 30974 Integers valid for mvz 30975 30976 `Cmvs' 30977 Integers valid for mvs 30978 30979 `Ap' 30980 push_operand 30981 30982 `Ac' 30983 Non-register operands allowed in clr 30984 30985 30986_Moxie--`config/moxie/constraints.md'_ 30987 30988 `A' 30989 An absolute address 30990 30991 `B' 30992 An offset address 30993 30994 `W' 30995 A register indirect memory operand 30996 30997 `I' 30998 A constant in the range of 0 to 255. 30999 31000 `N' 31001 A constant in the range of 0 to -255. 31002 31003 31004_MSP430-`config/msp430/constraints.md'_ 31005 31006 `R12' 31007 Register R12. 31008 31009 `R13' 31010 Register R13. 31011 31012 `K' 31013 Integer constant 1. 31014 31015 `L' 31016 Integer constant -1^20..1^19. 31017 31018 `M' 31019 Integer constant 1-4. 31020 31021 `Ya' 31022 Memory references which do not require an extended MOVX 31023 instruction. 31024 31025 `Yl' 31026 Memory reference, labels only. 31027 31028 `Ys' 31029 Memory reference, stack only. 31030 31031 31032_NDS32--`config/nds32/constraints.md'_ 31033 31034 `w' 31035 LOW register class $r0 to $r7 constraint for V3/V3M ISA. 31036 31037 `l' 31038 LOW register class $r0 to $r7. 31039 31040 `d' 31041 MIDDLE register class $r0 to $r11, $r16 to $r19. 31042 31043 `h' 31044 HIGH register class $r12 to $r14, $r20 to $r31. 31045 31046 `t' 31047 Temporary assist register $ta (i.e. $r15). 31048 31049 `k' 31050 Stack register $sp. 31051 31052 `Iu03' 31053 Unsigned immediate 3-bit value. 31054 31055 `In03' 31056 Negative immediate 3-bit value in the range of -7-0. 31057 31058 `Iu04' 31059 Unsigned immediate 4-bit value. 31060 31061 `Is05' 31062 Signed immediate 5-bit value. 31063 31064 `Iu05' 31065 Unsigned immediate 5-bit value. 31066 31067 `In05' 31068 Negative immediate 5-bit value in the range of -31-0. 31069 31070 `Ip05' 31071 Unsigned immediate 5-bit value for movpi45 instruction with 31072 range 16-47. 31073 31074 `Iu06' 31075 Unsigned immediate 6-bit value constraint for addri36.sp 31076 instruction. 31077 31078 `Iu08' 31079 Unsigned immediate 8-bit value. 31080 31081 `Iu09' 31082 Unsigned immediate 9-bit value. 31083 31084 `Is10' 31085 Signed immediate 10-bit value. 31086 31087 `Is11' 31088 Signed immediate 11-bit value. 31089 31090 `Is15' 31091 Signed immediate 15-bit value. 31092 31093 `Iu15' 31094 Unsigned immediate 15-bit value. 31095 31096 `Ic15' 31097 A constant which is not in the range of imm15u but ok for 31098 bclr instruction. 31099 31100 `Ie15' 31101 A constant which is not in the range of imm15u but ok for 31102 bset instruction. 31103 31104 `It15' 31105 A constant which is not in the range of imm15u but ok for 31106 btgl instruction. 31107 31108 `Ii15' 31109 A constant whose compliment value is in the range of imm15u 31110 and ok for bitci instruction. 31111 31112 `Is16' 31113 Signed immediate 16-bit value. 31114 31115 `Is17' 31116 Signed immediate 17-bit value. 31117 31118 `Is19' 31119 Signed immediate 19-bit value. 31120 31121 `Is20' 31122 Signed immediate 20-bit value. 31123 31124 `Ihig' 31125 The immediate value that can be simply set high 20-bit. 31126 31127 `Izeb' 31128 The immediate value 0xff. 31129 31130 `Izeh' 31131 The immediate value 0xffff. 31132 31133 `Ixls' 31134 The immediate value 0x01. 31135 31136 `Ix11' 31137 The immediate value 0x7ff. 31138 31139 `Ibms' 31140 The immediate value with power of 2. 31141 31142 `Ifex' 31143 The immediate value with power of 2 minus 1. 31144 31145 `U33' 31146 Memory constraint for 333 format. 31147 31148 `U45' 31149 Memory constraint for 45 format. 31150 31151 `U37' 31152 Memory constraint for 37 format. 31153 31154_Nios II family--`config/nios2/constraints.md'_ 31155 31156 `I' 31157 Integer that is valid as an immediate operand in an 31158 instruction taking a signed 16-bit number. Range -32768 to 31159 32767. 31160 31161 `J' 31162 Integer that is valid as an immediate operand in an 31163 instruction taking an unsigned 16-bit number. Range 0 to 31164 65535. 31165 31166 `K' 31167 Integer that is valid as an immediate operand in an 31168 instruction taking only the upper 16-bits of a 32-bit number. 31169 Range 32-bit numbers with the lower 16-bits being 0. 31170 31171 `L' 31172 Integer that is valid as an immediate operand for a shift 31173 instruction. Range 0 to 31. 31174 31175 `M' 31176 Integer that is valid as an immediate operand for only the 31177 value 0. Can be used in conjunction with the format modifier 31178 `z' to use `r0' instead of `0' in the assembly output. 31179 31180 `N' 31181 Integer that is valid as an immediate operand for a custom 31182 instruction opcode. Range 0 to 255. 31183 31184 `S' 31185 Matches immediates which are addresses in the small data 31186 section and therefore can be added to `gp' as a 16-bit 31187 immediate to re-create their 32-bit value. 31188 31189 31190_PDP-11--`config/pdp11/constraints.md'_ 31191 31192 `a' 31193 Floating point registers AC0 through AC3. These can be 31194 loaded from/to memory with a single instruction. 31195 31196 `d' 31197 Odd numbered general registers (R1, R3, R5). These are used 31198 for 16-bit multiply operations. 31199 31200 `f' 31201 Any of the floating point registers (AC0 through AC5). 31202 31203 `G' 31204 Floating point constant 0. 31205 31206 `I' 31207 An integer constant that fits in 16 bits. 31208 31209 `J' 31210 An integer constant whose low order 16 bits are zero. 31211 31212 `K' 31213 An integer constant that does not meet the constraints for 31214 codes `I' or `J'. 31215 31216 `L' 31217 The integer constant 1. 31218 31219 `M' 31220 The integer constant -1. 31221 31222 `N' 31223 The integer constant 0. 31224 31225 `O' 31226 Integer constants -4 through -1 and 1 through 4; shifts by 31227 these amounts are handled as multiple single-bit shifts 31228 rather than a single variable-length shift. 31229 31230 `Q' 31231 A memory reference which requires an additional word (address 31232 or offset) after the opcode. 31233 31234 `R' 31235 A memory reference that is encoded within the opcode. 31236 31237 31238_PowerPC and IBM RS6000--`config/rs6000/constraints.md'_ 31239 31240 `b' 31241 Address base register 31242 31243 `d' 31244 Floating point register (containing 64-bit value) 31245 31246 `f' 31247 Floating point register (containing 32-bit value) 31248 31249 `v' 31250 Altivec vector register 31251 31252 `wa' 31253 Any VSX register if the -mvsx option was used or NO_REGS. 31254 31255 When using any of the register constraints (`wa', `wd', `wf', 31256 `wg', `wh', `wi', `wj', `wk', `wl', `wm', `ws', `wt', `wu', 31257 `wv', `ww', or `wy') that take VSX registers, you must use 31258 `%x<n>' in the template so that the correct register is used. 31259 Otherwise the register number output in the assembly file 31260 will be incorrect if an Altivec register is an operand of a 31261 VSX instruction that expects VSX register numbering. 31262 31263 asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3)); 31264 31265 is correct, but: 31266 31267 asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3)); 31268 31269 is not correct. 31270 31271 `wd' 31272 VSX vector register to hold vector double data or NO_REGS. 31273 31274 `wf' 31275 VSX vector register to hold vector float data or NO_REGS. 31276 31277 `wg' 31278 If `-mmfpgpr' was used, a floating point register or NO_REGS. 31279 31280 `wh' 31281 Floating point register if direct moves are available, or 31282 NO_REGS. 31283 31284 `wi' 31285 FP or VSX register to hold 64-bit integers for VSX insns or 31286 NO_REGS. 31287 31288 `wj' 31289 FP or VSX register to hold 64-bit integers for direct moves 31290 or NO_REGS. 31291 31292 `wk' 31293 FP or VSX register to hold 64-bit doubles for direct moves or 31294 NO_REGS. 31295 31296 `wl' 31297 Floating point register if the LFIWAX instruction is enabled 31298 or NO_REGS. 31299 31300 `wm' 31301 VSX register if direct move instructions are enabled, or 31302 NO_REGS. 31303 31304 `wn' 31305 No register (NO_REGS). 31306 31307 `wr' 31308 General purpose register if 64-bit instructions are enabled 31309 or NO_REGS. 31310 31311 `ws' 31312 VSX vector register to hold scalar double values or NO_REGS. 31313 31314 `wt' 31315 VSX vector register to hold 128 bit integer or NO_REGS. 31316 31317 `wu' 31318 Altivec register to use for float/32-bit int loads/stores or 31319 NO_REGS. 31320 31321 `wv' 31322 Altivec register to use for double loads/stores or NO_REGS. 31323 31324 `ww' 31325 FP or VSX register to perform float operations under `-mvsx' 31326 or NO_REGS. 31327 31328 `wx' 31329 Floating point register if the STFIWX instruction is enabled 31330 or NO_REGS. 31331 31332 `wy' 31333 FP or VSX register to perform ISA 2.07 float ops or NO_REGS. 31334 31335 `wz' 31336 Floating point register if the LFIWZX instruction is enabled 31337 or NO_REGS. 31338 31339 `wD' 31340 Int constant that is the element number of the 64-bit scalar 31341 in a vector. 31342 31343 `wQ' 31344 A memory address that will work with the `lq' and `stq' 31345 instructions. 31346 31347 `h' 31348 `MQ', `CTR', or `LINK' register 31349 31350 `q' 31351 `MQ' register 31352 31353 `c' 31354 `CTR' register 31355 31356 `l' 31357 `LINK' register 31358 31359 `x' 31360 `CR' register (condition register) number 0 31361 31362 `y' 31363 `CR' register (condition register) 31364 31365 `z' 31366 `XER[CA]' carry bit (part of the XER register) 31367 31368 `I' 31369 Signed 16-bit constant 31370 31371 `J' 31372 Unsigned 16-bit constant shifted left 16 bits (use `L' 31373 instead for `SImode' constants) 31374 31375 `K' 31376 Unsigned 16-bit constant 31377 31378 `L' 31379 Signed 16-bit constant shifted left 16 bits 31380 31381 `M' 31382 Constant larger than 31 31383 31384 `N' 31385 Exact power of 2 31386 31387 `O' 31388 Zero 31389 31390 `P' 31391 Constant whose negation is a signed 16-bit constant 31392 31393 `G' 31394 Floating point constant that can be loaded into a register 31395 with one instruction per word 31396 31397 `H' 31398 Integer/Floating point constant that can be loaded into a 31399 register using three instructions 31400 31401 `m' 31402 Memory operand. Normally, `m' does not allow addresses that 31403 update the base register. If `<' or `>' constraint is also 31404 used, they are allowed and therefore on PowerPC targets in 31405 that case it is only safe to use `m<>' in an `asm' statement 31406 if that `asm' statement accesses the operand exactly once. 31407 The `asm' statement must also use `%U<OPNO>' as a placeholder 31408 for the "update" flag in the corresponding load or store 31409 instruction. For example: 31410 31411 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); 31412 31413 is correct but: 31414 31415 asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); 31416 31417 is not. 31418 31419 `es' 31420 A "stable" memory operand; that is, one which does not 31421 include any automodification of the base register. This used 31422 to be useful when `m' allowed automodification of the base 31423 register, but as those are now only allowed when `<' or `>' 31424 is used, `es' is basically the same as `m' without `<' and 31425 `>'. 31426 31427 `Q' 31428 Memory operand that is an offset from a register (it is 31429 usually better to use `m' or `es' in `asm' statements) 31430 31431 `Z' 31432 Memory operand that is an indexed or indirect from a register 31433 (it is usually better to use `m' or `es' in `asm' statements) 31434 31435 `R' 31436 AIX TOC entry 31437 31438 `a' 31439 Address operand that is an indexed or indirect from a 31440 register (`p' is preferable for `asm' statements) 31441 31442 `S' 31443 Constant suitable as a 64-bit mask operand 31444 31445 `T' 31446 Constant suitable as a 32-bit mask operand 31447 31448 `U' 31449 System V Release 4 small data area reference 31450 31451 `t' 31452 AND masks that can be performed by two rldic{l, r} 31453 instructions 31454 31455 `W' 31456 Vector constant that does not require memory 31457 31458 `j' 31459 Vector constant that is all zeros. 31460 31461 31462_RL78--`config/rl78/constraints.md'_ 31463 31464 `Int3' 31465 An integer constant in the range 1 ... 7. 31466 31467 `Int8' 31468 An integer constant in the range 0 ... 255. 31469 31470 `J' 31471 An integer constant in the range -255 ... 0 31472 31473 `K' 31474 The integer constant 1. 31475 31476 `L' 31477 The integer constant -1. 31478 31479 `M' 31480 The integer constant 0. 31481 31482 `N' 31483 The integer constant 2. 31484 31485 `O' 31486 The integer constant -2. 31487 31488 `P' 31489 An integer constant in the range 1 ... 15. 31490 31491 `Qbi' 31492 The built-in compare types-eq, ne, gtu, ltu, geu, and leu. 31493 31494 `Qsc' 31495 The synthetic compare types-gt, lt, ge, and le. 31496 31497 `Wab' 31498 A memory reference with an absolute address. 31499 31500 `Wbc' 31501 A memory reference using `BC' as a base register, with an 31502 optional offset. 31503 31504 `Wca' 31505 A memory reference using `AX', `BC', `DE', or `HL' for the 31506 address, for calls. 31507 31508 `Wcv' 31509 A memory reference using any 16-bit register pair for the 31510 address, for calls. 31511 31512 `Wd2' 31513 A memory reference using `DE' as a base register, with an 31514 optional offset. 31515 31516 `Wde' 31517 A memory reference using `DE' as a base register, without any 31518 offset. 31519 31520 `Wfr' 31521 Any memory reference to an address in the far address space. 31522 31523 `Wh1' 31524 A memory reference using `HL' as a base register, with an 31525 optional one-byte offset. 31526 31527 `Whb' 31528 A memory reference using `HL' as a base register, with `B' or 31529 `C' as the index register. 31530 31531 `Whl' 31532 A memory reference using `HL' as a base register, without any 31533 offset. 31534 31535 `Ws1' 31536 A memory reference using `SP' as a base register, with an 31537 optional one-byte offset. 31538 31539 `Y' 31540 Any memory reference to an address in the near address space. 31541 31542 `A' 31543 The `AX' register. 31544 31545 `B' 31546 The `BC' register. 31547 31548 `D' 31549 The `DE' register. 31550 31551 `R' 31552 `A' through `L' registers. 31553 31554 `S' 31555 The `SP' register. 31556 31557 `T' 31558 The `HL' register. 31559 31560 `Z08W' 31561 The 16-bit `R8' register. 31562 31563 `Z10W' 31564 The 16-bit `R10' register. 31565 31566 `Zint' 31567 The registers reserved for interrupts (`R24' to `R31'). 31568 31569 `a' 31570 The `A' register. 31571 31572 `b' 31573 The `B' register. 31574 31575 `c' 31576 The `C' register. 31577 31578 `d' 31579 The `D' register. 31580 31581 `e' 31582 The `E' register. 31583 31584 `h' 31585 The `H' register. 31586 31587 `l' 31588 The `L' register. 31589 31590 `v' 31591 The virtual registers. 31592 31593 `w' 31594 The `PSW' register. 31595 31596 `x' 31597 The `X' register. 31598 31599 31600_RX--`config/rx/constraints.md'_ 31601 31602 `Q' 31603 An address which does not involve register indirect 31604 addressing or pre/post increment/decrement addressing. 31605 31606 `Symbol' 31607 A symbol reference. 31608 31609 `Int08' 31610 A constant in the range -256 to 255, inclusive. 31611 31612 `Sint08' 31613 A constant in the range -128 to 127, inclusive. 31614 31615 `Sint16' 31616 A constant in the range -32768 to 32767, inclusive. 31617 31618 `Sint24' 31619 A constant in the range -8388608 to 8388607, inclusive. 31620 31621 `Uint04' 31622 A constant in the range 0 to 15, inclusive. 31623 31624 31625_S/390 and zSeries--`config/s390/s390.h'_ 31626 31627 `a' 31628 Address register (general purpose register except r0) 31629 31630 `c' 31631 Condition code register 31632 31633 `d' 31634 Data register (arbitrary general purpose register) 31635 31636 `f' 31637 Floating-point register 31638 31639 `I' 31640 Unsigned 8-bit constant (0-255) 31641 31642 `J' 31643 Unsigned 12-bit constant (0-4095) 31644 31645 `K' 31646 Signed 16-bit constant (-32768-32767) 31647 31648 `L' 31649 Value appropriate as displacement. 31650 `(0..4095)' 31651 for short displacement 31652 31653 `(-524288..524287)' 31654 for long displacement 31655 31656 `M' 31657 Constant integer with a value of 0x7fffffff. 31658 31659 `N' 31660 Multiple letter constraint followed by 4 parameter letters. 31661 `0..9:' 31662 number of the part counting from most to least 31663 significant 31664 31665 `H,Q:' 31666 mode of the part 31667 31668 `D,S,H:' 31669 mode of the containing operand 31670 31671 `0,F:' 31672 value of the other parts (F--all bits set) 31673 The constraint matches if the specified part of a constant 31674 has a value different from its other parts. 31675 31676 `Q' 31677 Memory reference without index register and with short 31678 displacement. 31679 31680 `R' 31681 Memory reference with index register and short displacement. 31682 31683 `S' 31684 Memory reference without index register but with long 31685 displacement. 31686 31687 `T' 31688 Memory reference with index register and long displacement. 31689 31690 `U' 31691 Pointer with short displacement. 31692 31693 `W' 31694 Pointer with long displacement. 31695 31696 `Y' 31697 Shift count operand. 31698 31699 31700_SPARC--`config/sparc/sparc.h'_ 31701 31702 `f' 31703 Floating-point register on the SPARC-V8 architecture and 31704 lower floating-point register on the SPARC-V9 architecture. 31705 31706 `e' 31707 Floating-point register. It is equivalent to `f' on the 31708 SPARC-V8 architecture and contains both lower and upper 31709 floating-point registers on the SPARC-V9 architecture. 31710 31711 `c' 31712 Floating-point condition code register. 31713 31714 `d' 31715 Lower floating-point register. It is only valid on the 31716 SPARC-V9 architecture when the Visual Instruction Set is 31717 available. 31718 31719 `b' 31720 Floating-point register. It is only valid on the SPARC-V9 31721 architecture when the Visual Instruction Set is available. 31722 31723 `h' 31724 64-bit global or out register for the SPARC-V8+ architecture. 31725 31726 `C' 31727 The constant all-ones, for floating-point. 31728 31729 `A' 31730 Signed 5-bit constant 31731 31732 `D' 31733 A vector constant 31734 31735 `I' 31736 Signed 13-bit constant 31737 31738 `J' 31739 Zero 31740 31741 `K' 31742 32-bit constant with the low 12 bits clear (a constant that 31743 can be loaded with the `sethi' instruction) 31744 31745 `L' 31746 A constant in the range supported by `movcc' instructions 31747 (11-bit signed immediate) 31748 31749 `M' 31750 A constant in the range supported by `movrcc' instructions 31751 (10-bit signed immediate) 31752 31753 `N' 31754 Same as `K', except that it verifies that bits that are not 31755 in the lower 32-bit range are all zero. Must be used instead 31756 of `K' for modes wider than `SImode' 31757 31758 `O' 31759 The constant 4096 31760 31761 `G' 31762 Floating-point zero 31763 31764 `H' 31765 Signed 13-bit constant, sign-extended to 32 or 64 bits 31766 31767 `P' 31768 The constant -1 31769 31770 `Q' 31771 Floating-point constant whose integral representation can be 31772 moved into an integer register using a single sethi 31773 instruction 31774 31775 `R' 31776 Floating-point constant whose integral representation can be 31777 moved into an integer register using a single mov instruction 31778 31779 `S' 31780 Floating-point constant whose integral representation can be 31781 moved into an integer register using a high/lo_sum 31782 instruction sequence 31783 31784 `T' 31785 Memory address aligned to an 8-byte boundary 31786 31787 `U' 31788 Even register 31789 31790 `W' 31791 Memory address for `e' constraint registers 31792 31793 `w' 31794 Memory address with only a base register 31795 31796 `Y' 31797 Vector zero 31798 31799 31800_SPU--`config/spu/spu.h'_ 31801 31802 `a' 31803 An immediate which can be loaded with the il/ila/ilh/ilhu 31804 instructions. const_int is treated as a 64 bit value. 31805 31806 `c' 31807 An immediate for and/xor/or instructions. const_int is 31808 treated as a 64 bit value. 31809 31810 `d' 31811 An immediate for the `iohl' instruction. const_int is 31812 treated as a 64 bit value. 31813 31814 `f' 31815 An immediate which can be loaded with `fsmbi'. 31816 31817 `A' 31818 An immediate which can be loaded with the il/ila/ilh/ilhu 31819 instructions. const_int is treated as a 32 bit value. 31820 31821 `B' 31822 An immediate for most arithmetic instructions. const_int is 31823 treated as a 32 bit value. 31824 31825 `C' 31826 An immediate for and/xor/or instructions. const_int is 31827 treated as a 32 bit value. 31828 31829 `D' 31830 An immediate for the `iohl' instruction. const_int is 31831 treated as a 32 bit value. 31832 31833 `I' 31834 A constant in the range [-64, 63] for shift/rotate 31835 instructions. 31836 31837 `J' 31838 An unsigned 7-bit constant for conversion/nop/channel 31839 instructions. 31840 31841 `K' 31842 A signed 10-bit constant for most arithmetic instructions. 31843 31844 `M' 31845 A signed 16 bit immediate for `stop'. 31846 31847 `N' 31848 An unsigned 16-bit constant for `iohl' and `fsmbi'. 31849 31850 `O' 31851 An unsigned 7-bit constant whose 3 least significant bits are 31852 0. 31853 31854 `P' 31855 An unsigned 3-bit constant for 16-byte rotates and shifts 31856 31857 `R' 31858 Call operand, reg, for indirect calls 31859 31860 `S' 31861 Call operand, symbol, for relative calls. 31862 31863 `T' 31864 Call operand, const_int, for absolute calls. 31865 31866 `U' 31867 An immediate which can be loaded with the il/ila/ilh/ilhu 31868 instructions. const_int is sign extended to 128 bit. 31869 31870 `W' 31871 An immediate for shift and rotate instructions. const_int is 31872 treated as a 32 bit value. 31873 31874 `Y' 31875 An immediate for and/xor/or instructions. const_int is sign 31876 extended as a 128 bit. 31877 31878 `Z' 31879 An immediate for the `iohl' instruction. const_int is sign 31880 extended to 128 bit. 31881 31882 31883_TI C6X family--`config/c6x/constraints.md'_ 31884 31885 `a' 31886 Register file A (A0-A31). 31887 31888 `b' 31889 Register file B (B0-B31). 31890 31891 `A' 31892 Predicate registers in register file A (A0-A2 on C64X and 31893 higher, A1 and A2 otherwise). 31894 31895 `B' 31896 Predicate registers in register file B (B0-B2). 31897 31898 `C' 31899 A call-used register in register file B (B0-B9, B16-B31). 31900 31901 `Da' 31902 Register file A, excluding predicate registers (A3-A31, plus 31903 A0 if not C64X or higher). 31904 31905 `Db' 31906 Register file B, excluding predicate registers (B3-B31). 31907 31908 `Iu4' 31909 Integer constant in the range 0 ... 15. 31910 31911 `Iu5' 31912 Integer constant in the range 0 ... 31. 31913 31914 `In5' 31915 Integer constant in the range -31 ... 0. 31916 31917 `Is5' 31918 Integer constant in the range -16 ... 15. 31919 31920 `I5x' 31921 Integer constant that can be the operand of an ADDA or a SUBA 31922 insn. 31923 31924 `IuB' 31925 Integer constant in the range 0 ... 65535. 31926 31927 `IsB' 31928 Integer constant in the range -32768 ... 32767. 31929 31930 `IsC' 31931 Integer constant in the range -2^20 ... 2^20 - 1. 31932 31933 `Jc' 31934 Integer constant that is a valid mask for the clr instruction. 31935 31936 `Js' 31937 Integer constant that is a valid mask for the set instruction. 31938 31939 `Q' 31940 Memory location with A base register. 31941 31942 `R' 31943 Memory location with B base register. 31944 31945 `Z' 31946 Register B14 (aka DP). 31947 31948 31949_TILE-Gx--`config/tilegx/constraints.md'_ 31950 31951 `R00' 31952 `R01' 31953 `R02' 31954 `R03' 31955 `R04' 31956 `R05' 31957 `R06' 31958 `R07' 31959 `R08' 31960 `R09' 31961 `R10' 31962 Each of these represents a register constraint for an 31963 individual register, from r0 to r10. 31964 31965 `I' 31966 Signed 8-bit integer constant. 31967 31968 `J' 31969 Signed 16-bit integer constant. 31970 31971 `K' 31972 Unsigned 16-bit integer constant. 31973 31974 `L' 31975 Integer constant that fits in one signed byte when 31976 incremented by one (-129 ... 126). 31977 31978 `m' 31979 Memory operand. If used together with `<' or `>', the 31980 operand can have postincrement which requires printing with 31981 `%In' and `%in' on TILE-Gx. For example: 31982 31983 asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val)); 31984 31985 `M' 31986 A bit mask suitable for the BFINS instruction. 31987 31988 `N' 31989 Integer constant that is a byte tiled out eight times. 31990 31991 `O' 31992 The integer zero constant. 31993 31994 `P' 31995 Integer constant that is a sign-extended byte tiled out as 31996 four shorts. 31997 31998 `Q' 31999 Integer constant that fits in one signed byte when incremented 32000 (-129 ... 126), but excluding -1. 32001 32002 `S' 32003 Integer constant that has all 1 bits consecutive and starting 32004 at bit 0. 32005 32006 `T' 32007 A 16-bit fragment of a got, tls, or pc-relative reference. 32008 32009 `U' 32010 Memory operand except postincrement. This is roughly the 32011 same as `m' when not used together with `<' or `>'. 32012 32013 `W' 32014 An 8-element vector constant with identical elements. 32015 32016 `Y' 32017 A 4-element vector constant with identical elements. 32018 32019 `Z0' 32020 The integer constant 0xffffffff. 32021 32022 `Z1' 32023 The integer constant 0xffffffff00000000. 32024 32025 32026_TILEPro--`config/tilepro/constraints.md'_ 32027 32028 `R00' 32029 `R01' 32030 `R02' 32031 `R03' 32032 `R04' 32033 `R05' 32034 `R06' 32035 `R07' 32036 `R08' 32037 `R09' 32038 `R10' 32039 Each of these represents a register constraint for an 32040 individual register, from r0 to r10. 32041 32042 `I' 32043 Signed 8-bit integer constant. 32044 32045 `J' 32046 Signed 16-bit integer constant. 32047 32048 `K' 32049 Nonzero integer constant with low 16 bits zero. 32050 32051 `L' 32052 Integer constant that fits in one signed byte when 32053 incremented by one (-129 ... 126). 32054 32055 `m' 32056 Memory operand. If used together with `<' or `>', the 32057 operand can have postincrement which requires printing with 32058 `%In' and `%in' on TILEPro. For example: 32059 32060 asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val)); 32061 32062 `M' 32063 A bit mask suitable for the MM instruction. 32064 32065 `N' 32066 Integer constant that is a byte tiled out four times. 32067 32068 `O' 32069 The integer zero constant. 32070 32071 `P' 32072 Integer constant that is a sign-extended byte tiled out as 32073 two shorts. 32074 32075 `Q' 32076 Integer constant that fits in one signed byte when incremented 32077 (-129 ... 126), but excluding -1. 32078 32079 `T' 32080 A symbolic operand, or a 16-bit fragment of a got, tls, or 32081 pc-relative reference. 32082 32083 `U' 32084 Memory operand except postincrement. This is roughly the 32085 same as `m' when not used together with `<' or `>'. 32086 32087 `W' 32088 A 4-element vector constant with identical elements. 32089 32090 `Y' 32091 A 2-element vector constant with identical elements. 32092 32093 32094_Visium--`config/visium/constraints.md'_ 32095 32096 `b' 32097 EAM register `mdb' 32098 32099 `c' 32100 EAM register `mdc' 32101 32102 `f' 32103 Floating point register 32104 32105 `l' 32106 General register, but not `r29', `r30' and `r31' 32107 32108 `t' 32109 Register `r1' 32110 32111 `u' 32112 Register `r2' 32113 32114 `v' 32115 Register `r3' 32116 32117 `G' 32118 Floating-point constant 0.0 32119 32120 `J' 32121 Integer constant in the range 0 .. 65535 (16-bit immediate) 32122 32123 `K' 32124 Integer constant in the range 1 .. 31 (5-bit immediate) 32125 32126 `L' 32127 Integer constant in the range -65535 .. -1 (16-bit negative 32128 immediate) 32129 32130 `M' 32131 Integer constant -1 32132 32133 `O' 32134 Integer constant 0 32135 32136 `P' 32137 Integer constant 32 32138 32139_x86 family--`config/i386/constraints.md'_ 32140 32141 `R' 32142 Legacy register--the eight integer registers available on all 32143 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 32144 32145 `q' 32146 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 32147 `c', and `d'; in 64-bit mode, any integer register. 32148 32149 `Q' 32150 Any register accessible as `Rh': `a', `b', `c', and `d'. 32151 32152 `a' 32153 The `a' register. 32154 32155 `b' 32156 The `b' register. 32157 32158 `c' 32159 The `c' register. 32160 32161 `d' 32162 The `d' register. 32163 32164 `S' 32165 The `si' register. 32166 32167 `D' 32168 The `di' register. 32169 32170 `A' 32171 The `a' and `d' registers. This class is used for 32172 instructions that return double word results in the `ax:dx' 32173 register pair. Single word values will be allocated either 32174 in `ax' or `dx'. For example on i386 the following 32175 implements `rdtsc': 32176 32177 unsigned long long rdtsc (void) 32178 { 32179 unsigned long long tick; 32180 __asm__ __volatile__("rdtsc":"=A"(tick)); 32181 return tick; 32182 } 32183 32184 This is not correct on x86-64 as it would allocate tick in 32185 either `ax' or `dx'. You have to use the following variant 32186 instead: 32187 32188 unsigned long long rdtsc (void) 32189 { 32190 unsigned int tickl, tickh; 32191 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); 32192 return ((unsigned long long)tickh << 32)|tickl; 32193 } 32194 32195 `f' 32196 Any 80387 floating-point (stack) register. 32197 32198 `t' 32199 Top of 80387 floating-point stack (`%st(0)'). 32200 32201 `u' 32202 Second from top of 80387 floating-point stack (`%st(1)'). 32203 32204 `y' 32205 Any MMX register. 32206 32207 `x' 32208 Any SSE register. 32209 32210 `Yz' 32211 First SSE register (`%xmm0'). 32212 32213 `I' 32214 Integer constant in the range 0 ... 31, for 32-bit shifts. 32215 32216 `J' 32217 Integer constant in the range 0 ... 63, for 64-bit shifts. 32218 32219 `K' 32220 Signed 8-bit integer constant. 32221 32222 `L' 32223 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 32224 32225 `M' 32226 0, 1, 2, or 3 (shifts for the `lea' instruction). 32227 32228 `N' 32229 Unsigned 8-bit integer constant (for `in' and `out' 32230 instructions). 32231 32232 `G' 32233 Standard 80387 floating point constant. 32234 32235 `C' 32236 SSE constant zero operand. 32237 32238 `e' 32239 32-bit signed integer constant, or a symbolic reference known 32240 to fit that range (for immediate operands in sign-extending 32241 x86-64 instructions). 32242 32243 `Z' 32244 32-bit unsigned integer constant, or a symbolic reference 32245 known to fit that range (for immediate operands in 32246 zero-extending x86-64 instructions). 32247 32248 32249_Xstormy16--`config/stormy16/stormy16.h'_ 32250 32251 `a' 32252 Register r0. 32253 32254 `b' 32255 Register r1. 32256 32257 `c' 32258 Register r2. 32259 32260 `d' 32261 Register r8. 32262 32263 `e' 32264 Registers r0 through r7. 32265 32266 `t' 32267 Registers r0 and r1. 32268 32269 `y' 32270 The carry register. 32271 32272 `z' 32273 Registers r8 and r9. 32274 32275 `I' 32276 A constant between 0 and 3 inclusive. 32277 32278 `J' 32279 A constant that has exactly one bit set. 32280 32281 `K' 32282 A constant that has exactly one bit clear. 32283 32284 `L' 32285 A constant between 0 and 255 inclusive. 32286 32287 `M' 32288 A constant between -255 and 0 inclusive. 32289 32290 `N' 32291 A constant between -3 and 0 inclusive. 32292 32293 `O' 32294 A constant between 1 and 4 inclusive. 32295 32296 `P' 32297 A constant between -4 and -1 inclusive. 32298 32299 `Q' 32300 A memory reference that is a stack push. 32301 32302 `R' 32303 A memory reference that is a stack pop. 32304 32305 `S' 32306 A memory reference that refers to a constant address of known 32307 value. 32308 32309 `T' 32310 The register indicated by Rx (not implemented yet). 32311 32312 `U' 32313 A constant that is not between 2 and 15 inclusive. 32314 32315 `Z' 32316 The constant 0. 32317 32318 32319_Xtensa--`config/xtensa/constraints.md'_ 32320 32321 `a' 32322 General-purpose 32-bit register 32323 32324 `b' 32325 One-bit boolean register 32326 32327 `A' 32328 MAC16 40-bit accumulator register 32329 32330 `I' 32331 Signed 12-bit integer constant, for use in MOVI instructions 32332 32333 `J' 32334 Signed 8-bit integer constant, for use in ADDI instructions 32335 32336 `K' 32337 Integer constant valid for BccI instructions 32338 32339 `L' 32340 Unsigned constant valid for BccUI instructions 32341 32342 32343 32344 32345File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: Using Assembly Language with C 32346 323476.43.4 Controlling Names Used in Assembler Code 32348----------------------------------------------- 32349 32350You can specify the name to be used in the assembler code for a C 32351function or variable by writing the `asm' (or `__asm__') keyword after 32352the declarator as follows: 32353 32354 int foo asm ("myfoo") = 2; 32355 32356This specifies that the name to be used for the variable `foo' in the 32357assembler code should be `myfoo' rather than the usual `_foo'. 32358 32359 On systems where an underscore is normally prepended to the name of a C 32360function or variable, this feature allows you to define names for the 32361linker that do not start with an underscore. 32362 32363 It does not make sense to use this feature with a non-static local 32364variable since such variables do not have assembler names. If you are 32365trying to put the variable in a particular register, see *note Explicit 32366Reg Vars::. GCC presently accepts such code with a warning, but will 32367probably be changed to issue an error, rather than a warning, in the 32368future. 32369 32370 You cannot use `asm' in this way in a function _definition_; but you 32371can get the same effect by writing a declaration for the function 32372before its definition and putting `asm' there, like this: 32373 32374 extern func () asm ("FUNC"); 32375 32376 func (x, y) 32377 int x, y; 32378 /* ... */ 32379 32380 It is up to you to make sure that the assembler names you choose do not 32381conflict with any other assembler symbols. Also, you must not use a 32382register name; that would produce completely invalid assembler code. 32383GCC does not as yet have the ability to store static variables in 32384registers. Perhaps that will be added. 32385 32386 32387File: gcc.info, Node: Explicit Reg Vars, Next: Size of an asm, Prev: Asm Labels, Up: Using Assembly Language with C 32388 323896.43.5 Variables in Specified Registers 32390--------------------------------------- 32391 32392GNU C allows you to put a few global variables into specified hardware 32393registers. You can also specify the register in which an ordinary 32394register variable should be allocated. 32395 32396 * Global register variables reserve registers throughout the program. 32397 This may be useful in programs such as programming language 32398 interpreters that have a couple of global variables that are 32399 accessed very often. 32400 32401 * Local register variables in specific registers do not reserve the 32402 registers, except at the point where they are used as input or 32403 output operands in an `asm' statement and the `asm' statement 32404 itself is not deleted. The compiler's data flow analysis is 32405 capable of determining where the specified registers contain live 32406 values, and where they are available for other uses. Stores into 32407 local register variables may be deleted when they appear to be 32408 dead according to dataflow analysis. References to local register 32409 variables may be deleted or moved or simplified. 32410 32411 These local variables are sometimes convenient for use with the 32412 extended `asm' feature (*note Extended Asm::), if you want to 32413 write one output of the assembler instruction directly into a 32414 particular register. (This works provided the register you 32415 specify fits the constraints specified for that operand in the 32416 `asm'.) 32417 32418* Menu: 32419 32420* Global Reg Vars:: 32421* Local Reg Vars:: 32422 32423 32424File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 32425 324266.43.5.1 Defining Global Register Variables 32427........................................... 32428 32429You can define a global register variable in GNU C like this: 32430 32431 register int *foo asm ("a5"); 32432 32433Here `a5' is the name of the register that should be used. Choose a 32434register that is normally saved and restored by function calls on your 32435machine, so that library routines will not clobber it. 32436 32437 Naturally the register name is CPU-dependent, so you need to 32438conditionalize your program according to CPU type. The register `a5' 32439is a good choice on a 68000 for a variable of pointer type. On 32440machines with register windows, be sure to choose a "global" register 32441that is not affected magically by the function call mechanism. 32442 32443 In addition, different operating systems on the same CPU may differ in 32444how they name the registers; then you need additional conditionals. For 32445example, some 68000 operating systems call this register `%a5'. 32446 32447 Eventually there may be a way of asking the compiler to choose a 32448register automatically, but first we need to figure out how it should 32449choose and how to enable you to guide the choice. No solution is 32450evident. 32451 32452 Defining a global register variable in a certain register reserves that 32453register entirely for this use, at least within the current compilation. 32454The register is not allocated for any other purpose in the functions in 32455the current compilation, and is not saved and restored by these 32456functions. Stores into this register are never deleted even if they 32457appear to be dead, but references may be deleted or moved or simplified. 32458 32459 It is not safe to access the global register variables from signal 32460handlers, or from more than one thread of control, because the system 32461library routines may temporarily use the register for other things 32462(unless you recompile them specially for the task at hand). 32463 32464 It is not safe for one function that uses a global register variable to 32465call another such function `foo' by way of a third function `lose' that 32466is compiled without knowledge of this variable (i.e. in a different 32467source file in which the variable isn't declared). This is because 32468`lose' might save the register and put some other value there. For 32469example, you can't expect a global register variable to be available in 32470the comparison-function that you pass to `qsort', since `qsort' might 32471have put something else in that register. (If you are prepared to 32472recompile `qsort' with the same global register variable, you can solve 32473this problem.) 32474 32475 If you want to recompile `qsort' or other source files that do not 32476actually use your global register variable, so that they do not use that 32477register for any other purpose, then it suffices to specify the compiler 32478option `-ffixed-REG'. You need not actually add a global register 32479declaration to their source code. 32480 32481 A function that can alter the value of a global register variable 32482cannot safely be called from a function compiled without this variable, 32483because it could clobber the value the caller expects to find there on 32484return. Therefore, the function that is the entry point into the part 32485of the program that uses the global register variable must explicitly 32486save and restore the value that belongs to its caller. 32487 32488 On most machines, `longjmp' restores to each global register variable 32489the value it had at the time of the `setjmp'. On some machines, 32490however, `longjmp' does not change the value of global register 32491variables. To be portable, the function that called `setjmp' should 32492make other arrangements to save the values of the global register 32493variables, and to restore them in a `longjmp'. This way, the same 32494thing happens regardless of what `longjmp' does. 32495 32496 All global register variable declarations must precede all function 32497definitions. If such a declaration could appear after function 32498definitions, the declaration would be too late to prevent the register 32499from being used for other purposes in the preceding functions. 32500 32501 Global register variables may not have initial values, because an 32502executable file has no means to supply initial contents for a register. 32503 32504 On the SPARC, there are reports that g3 ... g7 are suitable registers, 32505but certain library functions, such as `getwd', as well as the 32506subroutines for division and remainder, modify g3 and g4. g1 and g2 32507are local temporaries. 32508 32509 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 32510course, it does not do to use more than a few of those. 32511 32512 32513File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 32514 325156.43.5.2 Specifying Registers for Local Variables 32516................................................. 32517 32518You can define a local register variable with a specified register like 32519this: 32520 32521 register int *foo asm ("a5"); 32522 32523Here `a5' is the name of the register that should be used. Note that 32524this is the same syntax used for defining global register variables, 32525but for a local variable it appears within a function. 32526 32527 Naturally the register name is CPU-dependent, but this is not a 32528problem, since specific registers are most often useful with explicit 32529assembler instructions (*note Extended Asm::). Both of these things 32530generally require that you conditionalize your program according to CPU 32531type. 32532 32533 In addition, operating systems on one type of CPU may differ in how 32534they name the registers; then you need additional conditionals. For 32535example, some 68000 operating systems call this register `%a5'. 32536 32537 Defining such a register variable does not reserve the register; it 32538remains available for other uses in places where flow control determines 32539the variable's value is not live. 32540 32541 This option does not guarantee that GCC generates code that has this 32542variable in the register you specify at all times. You may not code an 32543explicit reference to this register in the assembler instruction 32544template part of an `asm' statement and assume it always refers to this 32545variable. However, using the variable as an input or output operand to 32546the `asm' guarantees that the specified register is used for that 32547operand. *Note Extended Asm::, for more information. 32548 32549 Stores into local register variables may be deleted when they appear 32550to be dead according to dataflow analysis. References to local 32551register variables may be deleted or moved or simplified. 32552 32553 As with global register variables, it is recommended that you choose a 32554register that is normally saved and restored by function calls on your 32555machine, so that library routines will not clobber it. 32556 32557 Sometimes when writing inline `asm' code, you need to make an operand 32558be a specific register, but there's no matching constraint letter for 32559that register. To force the operand into that register, create a local 32560variable and specify the register in the variable's declaration. Then 32561use the local variable for the asm operand and specify any constraint 32562letter that matches the register: 32563 32564 register int *p1 asm ("r0") = ...; 32565 register int *p2 asm ("r1") = ...; 32566 register int *result asm ("r0"); 32567 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 32568 32569 _Warning:_ In the above example, be aware that a register (for example 32570r0) can be call-clobbered by subsequent code, including function calls 32571and library calls for arithmetic operators on other variables (for 32572example the initialization of p2). In this case, use temporary 32573variables for expressions between the register assignments: 32574 32575 int t1 = ...; 32576 register int *p1 asm ("r0") = ...; 32577 register int *p2 asm ("r1") = t1; 32578 register int *result asm ("r0"); 32579 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 32580 32581 32582File: gcc.info, Node: Size of an asm, Prev: Explicit Reg Vars, Up: Using Assembly Language with C 32583 325846.43.6 Size of an `asm' 32585----------------------- 32586 32587Some targets require that GCC track the size of each instruction used 32588in order to generate correct code. Because the final length of the 32589code produced by an `asm' statement is only known by the assembler, GCC 32590must make an estimate as to how big it will be. It does this by 32591counting the number of instructions in the pattern of the `asm' and 32592multiplying that by the length of the longest instruction supported by 32593that processor. (When working out the number of instructions, it 32594assumes that any occurrence of a newline or of whatever statement 32595separator character is supported by the assembler - typically `;' -- 32596indicates the end of an instruction.) 32597 32598 Normally, GCC's estimate is adequate to ensure that correct code is 32599generated, but it is possible to confuse the compiler if you use pseudo 32600instructions or assembler macros that expand into multiple real 32601instructions, or if you use assembler directives that expand to more 32602space in the object file than is needed for a single instruction. If 32603this happens then the assembler may produce a diagnostic saying that a 32604label is unreachable. 32605 32606 32607File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Using Assembly Language with C, Up: C Extensions 32608 326096.44 Alternate Keywords 32610======================= 32611 32612`-ansi' and the various `-std' options disable certain keywords. This 32613causes trouble when you want to use GNU C extensions, or a 32614general-purpose header file that should be usable by all programs, 32615including ISO C programs. The keywords `asm', `typeof' and `inline' 32616are not available in programs compiled with `-ansi' or `-std' (although 32617`inline' can be used in a program compiled with `-std=c99' or 32618`-std=c11'). The ISO C99 keyword `restrict' is only available when 32619`-std=gnu99' (which will eventually be the default) or `-std=c99' (or 32620the equivalent `-std=iso9899:1999'), or an option for a later standard 32621version, is used. 32622 32623 The way to solve these problems is to put `__' at the beginning and 32624end of each problematical keyword. For example, use `__asm__' instead 32625of `asm', and `__inline__' instead of `inline'. 32626 32627 Other C compilers won't accept these alternative keywords; if you want 32628to compile with another compiler, you can define the alternate keywords 32629as macros to replace them with the customary keywords. It looks like 32630this: 32631 32632 #ifndef __GNUC__ 32633 #define __asm__ asm 32634 #endif 32635 32636 `-pedantic' and other options cause warnings for many GNU C extensions. 32637You can prevent such warnings within one expression by writing 32638`__extension__' before the expression. `__extension__' has no effect 32639aside from this. 32640 32641 32642File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 32643 326446.45 Incomplete `enum' Types 32645============================ 32646 32647You can define an `enum' tag without specifying its possible values. 32648This results in an incomplete type, much like what you get if you write 32649`struct foo' without describing the elements. A later declaration that 32650does specify the possible values completes the type. 32651 32652 You can't allocate variables or storage using the type while it is 32653incomplete. However, you can work with pointers to that type. 32654 32655 This extension may not be very useful, but it makes the handling of 32656`enum' more consistent with the way `struct' and `union' are handled. 32657 32658 This extension is not supported by GNU C++. 32659 32660 32661File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 32662 326636.46 Function Names as Strings 32664============================== 32665 32666GCC provides three magic variables that hold the name of the current 32667function, as a string. The first of these is `__func__', which is part 32668of the C99 standard: 32669 32670 The identifier `__func__' is implicitly declared by the translator as 32671if, immediately following the opening brace of each function 32672definition, the declaration 32673 32674 static const char __func__[] = "function-name"; 32675 32676appeared, where function-name is the name of the lexically-enclosing 32677function. This name is the unadorned name of the function. 32678 32679 `__FUNCTION__' is another name for `__func__', provided for backward 32680compatibility with old versions of GCC. 32681 32682 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 32683However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 32684the function as well as its bare name. For example, this program: 32685 32686 extern "C" { 32687 extern int printf (char *, ...); 32688 } 32689 32690 class a { 32691 public: 32692 void sub (int i) 32693 { 32694 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 32695 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 32696 } 32697 }; 32698 32699 int 32700 main (void) 32701 { 32702 a ax; 32703 ax.sub (0); 32704 return 0; 32705 } 32706 32707gives this output: 32708 32709 __FUNCTION__ = sub 32710 __PRETTY_FUNCTION__ = void a::sub(int) 32711 32712 These identifiers are variables, not preprocessor macros, and may not 32713be used to initialize `char' arrays or be concatenated with other string 32714literals. 32715 32716 32717File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 32718 327196.47 Getting the Return or Frame Address of a Function 32720====================================================== 32721 32722These functions may be used to get information about the callers of a 32723function. 32724 32725 -- Built-in Function: void * __builtin_return_address (unsigned int 32726 LEVEL) 32727 This function returns the return address of the current function, 32728 or of one of its callers. The LEVEL argument is number of frames 32729 to scan up the call stack. A value of `0' yields the return 32730 address of the current function, a value of `1' yields the return 32731 address of the caller of the current function, and so forth. When 32732 inlining the expected behavior is that the function returns the 32733 address of the function that is returned to. To work around this 32734 behavior use the `noinline' function attribute. 32735 32736 The LEVEL argument must be a constant integer. 32737 32738 On some machines it may be impossible to determine the return 32739 address of any function other than the current one; in such cases, 32740 or when the top of the stack has been reached, this function 32741 returns `0' or a random value. In addition, 32742 `__builtin_frame_address' may be used to determine if the top of 32743 the stack has been reached. 32744 32745 Additional post-processing of the returned value may be needed, see 32746 `__builtin_extract_return_addr'. 32747 32748 This function should only be used with a nonzero argument for 32749 debugging purposes. 32750 32751 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR) 32752 The address as returned by `__builtin_return_address' may have to 32753 be fed through this function to get the actual encoded address. 32754 For example, on the 31-bit S/390 platform the highest bit has to 32755 be masked out, or on SPARC platforms an offset has to be added for 32756 the true next instruction to be executed. 32757 32758 If no fixup is needed, this function simply passes through ADDR. 32759 32760 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR) 32761 This function does the reverse of `__builtin_extract_return_addr'. 32762 32763 -- Built-in Function: void * __builtin_frame_address (unsigned int 32764 LEVEL) 32765 This function is similar to `__builtin_return_address', but it 32766 returns the address of the function frame rather than the return 32767 address of the function. Calling `__builtin_frame_address' with a 32768 value of `0' yields the frame address of the current function, a 32769 value of `1' yields the frame address of the caller of the current 32770 function, and so forth. 32771 32772 The frame is the area on the stack that holds local variables and 32773 saved registers. The frame address is normally the address of the 32774 first word pushed on to the stack by the function. However, the 32775 exact definition depends upon the processor and the calling 32776 convention. If the processor has a dedicated frame pointer 32777 register, and the function has a frame, then 32778 `__builtin_frame_address' returns the value of the frame pointer 32779 register. 32780 32781 On some machines it may be impossible to determine the frame 32782 address of any function other than the current one; in such cases, 32783 or when the top of the stack has been reached, this function 32784 returns `0' if the first frame pointer is properly initialized by 32785 the startup code. 32786 32787 This function should only be used with a nonzero argument for 32788 debugging purposes. 32789 32790 32791File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 32792 327936.48 Using Vector Instructions through Built-in Functions 32794========================================================= 32795 32796On some targets, the instruction set contains SIMD vector instructions 32797which operate on multiple values contained in one large register at the 32798same time. For example, on the x86 the MMX, 3DNow! and SSE extensions 32799can be used this way. 32800 32801 The first step in using these extensions is to provide the necessary 32802data types. This should be done using an appropriate `typedef': 32803 32804 typedef int v4si __attribute__ ((vector_size (16))); 32805 32806The `int' type specifies the base type, while the attribute specifies 32807the vector size for the variable, measured in bytes. For example, the 32808declaration above causes the compiler to set the mode for the `v4si' 32809type to be 16 bytes wide and divided into `int' sized units. For a 3281032-bit `int' this means a vector of 4 units of 4 bytes, and the 32811corresponding mode of `foo' is V4SI. 32812 32813 The `vector_size' attribute is only applicable to integral and float 32814scalars, although arrays, pointers, and function return values are 32815allowed in conjunction with this construct. Only sizes that are a power 32816of two are currently allowed. 32817 32818 All the basic integer types can be used as base types, both as signed 32819and as unsigned: `char', `short', `int', `long', `long long'. In 32820addition, `float' and `double' can be used to build floating-point 32821vector types. 32822 32823 Specifying a combination that is not valid for the current architecture 32824causes GCC to synthesize the instructions using a narrower mode. For 32825example, if you specify a variable of type `V4SI' and your architecture 32826does not allow for this specific SIMD type, GCC produces code that uses 328274 `SIs'. 32828 32829 The types defined in this manner can be used with a subset of normal C 32830operations. Currently, GCC allows using the following operators on 32831these types: `+, -, *, /, unary minus, ^, |, &, ~, %'. 32832 32833 The operations behave like C++ `valarrays'. Addition is defined as 32834the addition of the corresponding elements of the operands. For 32835example, in the code below, each of the 4 elements in A is added to the 32836corresponding 4 elements in B and the resulting vector is stored in C. 32837 32838 typedef int v4si __attribute__ ((vector_size (16))); 32839 32840 v4si a, b, c; 32841 32842 c = a + b; 32843 32844 Subtraction, multiplication, division, and the logical operations 32845operate in a similar manner. Likewise, the result of using the unary 32846minus or complement operators on a vector type is a vector whose 32847elements are the negative or complemented values of the corresponding 32848elements in the operand. 32849 32850 It is possible to use shifting operators `<<', `>>' on integer-type 32851vectors. The operation is defined as following: `{a0, a1, ..., an} >> 32852{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector 32853operands must have the same number of elements. 32854 32855 For convenience, it is allowed to use a binary vector operation where 32856one operand is a scalar. In that case the compiler transforms the 32857scalar operand into a vector where each element is the scalar from the 32858operation. The transformation happens only if the scalar could be 32859safely converted to the vector-element type. Consider the following 32860code. 32861 32862 typedef int v4si __attribute__ ((vector_size (16))); 32863 32864 v4si a, b, c; 32865 long l; 32866 32867 a = b + 1; /* a = b + {1,1,1,1}; */ 32868 a = 2 * b; /* a = {2,2,2,2} * b; */ 32869 32870 a = l + a; /* Error, cannot convert long to int. */ 32871 32872 Vectors can be subscripted as if the vector were an array with the 32873same number of elements and base type. Out of bound accesses invoke 32874undefined behavior at run time. Warnings for out of bound accesses for 32875vector subscription can be enabled with `-Warray-bounds'. 32876 32877 Vector comparison is supported with standard comparison operators: 32878`==, !=, <, <=, >, >='. Comparison operands can be vector expressions 32879of integer-type or real-type. Comparison between integer-type vectors 32880and real-type vectors are not supported. The result of the comparison 32881is a vector of the same width and number of elements as the comparison 32882operands with a signed integral element type. 32883 32884 Vectors are compared element-wise producing 0 when comparison is false 32885and -1 (constant of the appropriate type where all bits are set) 32886otherwise. Consider the following example. 32887 32888 typedef int v4si __attribute__ ((vector_size (16))); 32889 32890 v4si a = {1,2,3,4}; 32891 v4si b = {3,2,1,4}; 32892 v4si c; 32893 32894 c = a > b; /* The result would be {0, 0,-1, 0} */ 32895 c = a == b; /* The result would be {0,-1, 0,-1} */ 32896 32897 In C++, the ternary operator `?:' is available. `a?b:c', where `b' and 32898`c' are vectors of the same type and `a' is an integer vector with the 32899same number of elements of the same size as `b' and `c', computes all 32900three arguments and creates a vector `{a[0]?b[0]:c[0], a[1]?b[1]:c[1], 32901...}'. Note that unlike in OpenCL, `a' is thus interpreted as `a != 0' 32902and not `a < 0'. As in the case of binary operations, this syntax is 32903also accepted when one of `b' or `c' is a scalar that is then 32904transformed into a vector. If both `b' and `c' are scalars and the type 32905of `true?b:c' has the same size as the element type of `a', then `b' 32906and `c' are converted to a vector type whose elements have this type 32907and with the same number of elements as `a'. 32908 32909 In C++, the logic operators `!, &&, ||' are available for vectors. 32910`!v' is equivalent to `v == 0', `a && b' is equivalent to `a!=0 & b!=0' 32911and `a || b' is equivalent to `a!=0 | b!=0'. For mixed operations 32912between a scalar `s' and a vector `v', `s && v' is equivalent to 32913`s?v!=0:0' (the evaluation is short-circuit) and `v && s' is equivalent 32914to `v!=0 & (s?-1:0)'. 32915 32916 Vector shuffling is available using functions `__builtin_shuffle (vec, 32917mask)' and `__builtin_shuffle (vec0, vec1, mask)'. Both functions 32918construct a permutation of elements from one or two vectors and return 32919a vector of the same type as the input vector(s). The MASK is an 32920integral vector with the same width (W) and element count (N) as the 32921output vector. 32922 32923 The elements of the input vectors are numbered in memory ordering of 32924VEC0 beginning at 0 and VEC1 beginning at N. The elements of MASK are 32925considered modulo N in the single-operand case and modulo 2*N in the 32926two-operand case. 32927 32928 Consider the following example, 32929 32930 typedef int v4si __attribute__ ((vector_size (16))); 32931 32932 v4si a = {1,2,3,4}; 32933 v4si b = {5,6,7,8}; 32934 v4si mask1 = {0,1,1,3}; 32935 v4si mask2 = {0,4,2,5}; 32936 v4si res; 32937 32938 res = __builtin_shuffle (a, mask1); /* res is {1,2,2,4} */ 32939 res = __builtin_shuffle (a, b, mask2); /* res is {1,5,3,6} */ 32940 32941 Note that `__builtin_shuffle' is intentionally semantically compatible 32942with the OpenCL `shuffle' and `shuffle2' functions. 32943 32944 You can declare variables and use them in function calls and returns, 32945as well as in assignments and some casts. You can specify a vector 32946type as a return type for a function. Vector types can also be used as 32947function arguments. It is possible to cast from one vector type to 32948another, provided they are of the same size (in fact, you can also cast 32949vectors to and from other datatypes of the same size). 32950 32951 You cannot operate between vectors of different lengths or different 32952signedness without a cast. 32953 32954 32955File: gcc.info, Node: Offsetof, Next: __sync Builtins, Prev: Vector Extensions, Up: C Extensions 32956 329576.49 Support for `offsetof' 32958=========================== 32959 32960GCC implements for both C and C++ a syntactic extension to implement 32961the `offsetof' macro. 32962 32963 primary: 32964 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")" 32965 32966 offsetof_member_designator: 32967 `identifier' 32968 | offsetof_member_designator "." `identifier' 32969 | offsetof_member_designator "[" `expr' "]" 32970 32971 This extension is sufficient such that 32972 32973 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 32974 32975is a suitable definition of the `offsetof' macro. In C++, TYPE may be 32976dependent. In either case, MEMBER may consist of a single identifier, 32977or a sequence of member accesses and array references. 32978 32979 32980File: gcc.info, Node: __sync Builtins, Next: __atomic Builtins, Prev: Offsetof, Up: C Extensions 32981 329826.50 Legacy `__sync' Built-in Functions for Atomic Memory Access 32983================================================================ 32984 32985The following built-in functions are intended to be compatible with 32986those described in the `Intel Itanium Processor-specific Application 32987Binary Interface', section 7.4. As such, they depart from the normal 32988GCC practice of using the `__builtin_' prefix, and further that they 32989are overloaded such that they work on multiple types. 32990 32991 The definition given in the Intel documentation allows only for the 32992use of the types `int', `long', `long long' as well as their unsigned 32993counterparts. GCC allows any integral scalar or pointer type that is 329941, 2, 4 or 8 bytes in length. 32995 32996 Not all operations are supported by all target processors. If a 32997particular operation cannot be implemented on the target processor, a 32998warning is generated and a call to an external function is generated. 32999The external function carries the same name as the built-in version, 33000with an additional suffix `_N' where N is the size of the data type. 33001 33002 In most cases, these built-in functions are considered a "full 33003barrier". That is, no memory operand is moved across the operation, 33004either forward or backward. Further, instructions are issued as 33005necessary to prevent the processor from speculating loads across the 33006operation and from queuing stores after the operation. 33007 33008 All of the routines are described in the Intel documentation to take 33009"an optional list of variables protected by the memory barrier". It's 33010not clear what is meant by that; it could mean that _only_ the 33011following variables are protected, or it could mean that these variables 33012should in addition be protected. At present GCC ignores this list and 33013protects all variables that are globally accessible. If in the future 33014we make some use of this list, an empty list will continue to mean all 33015globally accessible variables. 33016 33017`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 33018`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 33019`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 33020`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 33021`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 33022`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 33023 These built-in functions perform the operation suggested by the 33024 name, and returns the value that had previously been in memory. 33025 That is, 33026 33027 { tmp = *ptr; *ptr OP= value; return tmp; } 33028 { tmp = *ptr; *ptr = ~(tmp & value); return tmp; } // nand 33029 33030 _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' as 33031 `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & value'. 33032 33033`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 33034`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 33035`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 33036`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 33037`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 33038`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 33039 These built-in functions perform the operation suggested by the 33040 name, and return the new value. That is, 33041 33042 { *ptr OP= value; return *ptr; } 33043 { *ptr = ~(*ptr & value); return *ptr; } // nand 33044 33045 _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' as 33046 `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & value'. 33047 33048`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' 33049`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' 33050 These built-in functions perform an atomic compare and swap. That 33051 is, if the current value of `*PTR' is OLDVAL, then write NEWVAL 33052 into `*PTR'. 33053 33054 The "bool" version returns true if the comparison is successful and 33055 NEWVAL is written. The "val" version returns the contents of 33056 `*PTR' before the operation. 33057 33058`__sync_synchronize (...)' 33059 This built-in function issues a full memory barrier. 33060 33061`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 33062 This built-in function, as described by Intel, is not a 33063 traditional test-and-set operation, but rather an atomic exchange 33064 operation. It writes VALUE into `*PTR', and returns the previous 33065 contents of `*PTR'. 33066 33067 Many targets have only minimal support for such locks, and do not 33068 support a full exchange operation. In this case, a target may 33069 support reduced functionality here by which the _only_ valid value 33070 to store is the immediate constant 1. The exact value actually 33071 stored in `*PTR' is implementation defined. 33072 33073 This built-in function is not a full barrier, but rather an 33074 "acquire barrier". This means that references after the operation 33075 cannot move to (or be speculated to) before the operation, but 33076 previous memory stores may not be globally visible yet, and 33077 previous memory loads may not yet be satisfied. 33078 33079`void __sync_lock_release (TYPE *ptr, ...)' 33080 This built-in function releases the lock acquired by 33081 `__sync_lock_test_and_set'. Normally this means writing the 33082 constant 0 to `*PTR'. 33083 33084 This built-in function is not a full barrier, but rather a 33085 "release barrier". This means that all previous memory stores are 33086 globally visible, and all previous memory loads have been 33087 satisfied, but following memory reads are not prevented from being 33088 speculated to before the barrier. 33089 33090 33091File: gcc.info, Node: __atomic Builtins, Next: Integer Overflow Builtins, Prev: __sync Builtins, Up: C Extensions 33092 330936.51 Built-in Functions for Memory Model Aware Atomic Operations 33094================================================================ 33095 33096The following built-in functions approximately match the requirements 33097for C++11 memory model. Many are similar to the `__sync' prefixed 33098built-in functions, but all also have a memory model parameter. These 33099are all identified by being prefixed with `__atomic', and most are 33100overloaded such that they work with multiple types. 33101 33102 GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8 33103bytes in length. 16-byte integral types are also allowed if `__int128' 33104(*note __int128::) is supported by the architecture. 33105 33106 Target architectures are encouraged to provide their own patterns for 33107each of these built-in functions. If no target is provided, the 33108original non-memory model set of `__sync' atomic built-in functions are 33109utilized, along with any required synchronization fences surrounding it 33110in order to achieve the proper behavior. Execution in this case is 33111subject to the same restrictions as those built-in functions. 33112 33113 If there is no pattern or mechanism to provide a lock free instruction 33114sequence, a call is made to an external routine with the same parameters 33115to be resolved at run time. 33116 33117 The four non-arithmetic functions (load, store, exchange, and 33118compare_exchange) all have a generic version as well. This generic 33119version works on any data type. If the data type size maps to one of 33120the integral sizes that may have lock free support, the generic version 33121utilizes the lock free built-in function. Otherwise an external call 33122is left to be resolved at run time. This external call is the same 33123format with the addition of a `size_t' parameter inserted as the first 33124parameter indicating the size of the object being pointed to. All 33125objects must be the same size. 33126 33127 There are 6 different memory models that can be specified. These map 33128to the same names in the C++11 standard. Refer there or to the GCC 33129wiki on atomic synchronization 33130(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed 33131definitions. These memory models integrate both barriers to code 33132motion as well as synchronization requirements with other threads. 33133These are listed in approximately ascending order of strength. It is 33134also possible to use target specific flags for memory model flags, like 33135Hardware Lock Elision. 33136 33137`__ATOMIC_RELAXED' 33138 No barriers or synchronization. 33139 33140`__ATOMIC_CONSUME' 33141 Data dependency only for both barrier and synchronization with 33142 another thread. 33143 33144`__ATOMIC_ACQUIRE' 33145 Barrier to hoisting of code and synchronizes with release (or 33146 stronger) semantic stores from another thread. 33147 33148`__ATOMIC_RELEASE' 33149 Barrier to sinking of code and synchronizes with acquire (or 33150 stronger) semantic loads from another thread. 33151 33152`__ATOMIC_ACQ_REL' 33153 Full barrier in both directions and synchronizes with acquire 33154 loads and release stores in another thread. 33155 33156`__ATOMIC_SEQ_CST' 33157 Full barrier in both directions and synchronizes with acquire 33158 loads and release stores in all threads. 33159 33160 When implementing patterns for these built-in functions, the memory 33161model parameter can be ignored as long as the pattern implements the 33162most restrictive `__ATOMIC_SEQ_CST' model. Any of the other memory 33163models execute correctly with this memory model but they may not 33164execute as efficiently as they could with a more appropriate 33165implementation of the relaxed requirements. 33166 33167 Note that the C++11 standard allows for the memory model parameter to 33168be determined at run time rather than at compile time. These built-in 33169functions map any run-time value to `__ATOMIC_SEQ_CST' rather than 33170invoke a runtime library call or inline a switch statement. This is 33171standard compliant, safe, and the simplest approach for now. 33172 33173 The memory model parameter is a signed int, but only the lower 16 bits 33174are reserved for the memory model. The remainder of the signed int is 33175reserved for target use and should be 0. Use of the predefined atomic 33176values ensures proper usage. 33177 33178 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel) 33179 This built-in function implements an atomic load operation. It 33180 returns the contents of `*PTR'. 33181 33182 The valid memory model variants are `__ATOMIC_RELAXED', 33183 `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', and `__ATOMIC_CONSUME'. 33184 33185 33186 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int 33187 memmodel) 33188 This is the generic version of an atomic load. It returns the 33189 contents of `*PTR' in `*RET'. 33190 33191 33192 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int 33193 memmodel) 33194 This built-in function implements an atomic store operation. It 33195 writes `VAL' into `*PTR'. 33196 33197 The valid memory model variants are `__ATOMIC_RELAXED', 33198 `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'. 33199 33200 33201 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int 33202 memmodel) 33203 This is the generic version of an atomic store. It stores the 33204 value of `*VAL' into `*PTR'. 33205 33206 33207 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val, 33208 int memmodel) 33209 This built-in function implements an atomic exchange operation. 33210 It writes VAL into `*PTR', and returns the previous contents of 33211 `*PTR'. 33212 33213 The valid memory model variants are `__ATOMIC_RELAXED', 33214 `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', `__ATOMIC_RELEASE', and 33215 `__ATOMIC_ACQ_REL'. 33216 33217 33218 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val, 33219 TYPE *ret, int memmodel) 33220 This is the generic version of an atomic exchange. It stores the 33221 contents of `*VAL' into `*PTR'. The original value of `*PTR' is 33222 copied into `*RET'. 33223 33224 33225 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, 33226 TYPE *expected, TYPE desired, bool weak, int 33227 success_memmodel, int failure_memmodel) 33228 This built-in function implements an atomic compare and exchange 33229 operation. This compares the contents of `*PTR' with the contents 33230 of `*EXPECTED' and if equal, writes DESIRED into `*PTR'. If they 33231 are not equal, the current contents of `*PTR' is written into 33232 `*EXPECTED'. WEAK is true for weak compare_exchange, and false 33233 for the strong variation. Many targets only offer the strong 33234 variation and ignore the parameter. When in doubt, use the strong 33235 variation. 33236 33237 True is returned if DESIRED is written into `*PTR' and the 33238 execution is considered to conform to the memory model specified 33239 by SUCCESS_MEMMODEL. There are no restrictions on what memory 33240 model can be used here. 33241 33242 False is returned otherwise, and the execution is considered to 33243 conform to FAILURE_MEMMODEL. This memory model cannot be 33244 `__ATOMIC_RELEASE' nor `__ATOMIC_ACQ_REL'. It also cannot be a 33245 stronger model than that specified by SUCCESS_MEMMODEL. 33246 33247 33248 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE 33249 *expected, TYPE *desired, bool weak, int success_memmodel, 33250 int failure_memmodel) 33251 This built-in function implements the generic version of 33252 `__atomic_compare_exchange'. The function is virtually identical 33253 to `__atomic_compare_exchange_n', except the desired value is also 33254 a pointer. 33255 33256 33257 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, 33258 int memmodel) 33259 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, 33260 int memmodel) 33261 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, 33262 int memmodel) 33263 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, 33264 int memmodel) 33265 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int 33266 memmodel) 33267 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val, 33268 int memmodel) 33269 These built-in functions perform the operation suggested by the 33270 name, and return the result of the operation. That is, 33271 33272 { *ptr OP= val; return *ptr; } 33273 33274 All memory models are valid. 33275 33276 33277 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, 33278 int memmodel) 33279 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, 33280 int memmodel) 33281 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, 33282 int memmodel) 33283 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, 33284 int memmodel) 33285 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int 33286 memmodel) 33287 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val, 33288 int memmodel) 33289 These built-in functions perform the operation suggested by the 33290 name, and return the value that had previously been in `*PTR'. 33291 That is, 33292 33293 { tmp = *ptr; *ptr OP= val; return tmp; } 33294 33295 All memory models are valid. 33296 33297 33298 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int 33299 memmodel) 33300 This built-in function performs an atomic test-and-set operation on 33301 the byte at `*PTR'. The byte is set to some implementation 33302 defined nonzero "set" value and the return value is `true' if and 33303 only if the previous contents were "set". It should be only used 33304 for operands of type `bool' or `char'. For other types only part 33305 of the value may be set. 33306 33307 All memory models are valid. 33308 33309 33310 -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel) 33311 This built-in function performs an atomic clear operation on 33312 `*PTR'. After the operation, `*PTR' contains 0. It should be 33313 only used for operands of type `bool' or `char' and in conjunction 33314 with `__atomic_test_and_set'. For other types it may only clear 33315 partially. If the type is not `bool' prefer using `__atomic_store'. 33316 33317 The valid memory model variants are `__ATOMIC_RELAXED', 33318 `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'. 33319 33320 33321 -- Built-in Function: void __atomic_thread_fence (int memmodel) 33322 This built-in function acts as a synchronization fence between 33323 threads based on the specified memory model. 33324 33325 All memory orders are valid. 33326 33327 33328 -- Built-in Function: void __atomic_signal_fence (int memmodel) 33329 This built-in function acts as a synchronization fence between a 33330 thread and signal handlers based in the same thread. 33331 33332 All memory orders are valid. 33333 33334 33335 -- Built-in Function: bool __atomic_always_lock_free (size_t size, 33336 void *ptr) 33337 This built-in function returns true if objects of SIZE bytes always 33338 generate lock free atomic instructions for the target architecture. 33339 SIZE must resolve to a compile-time constant and the result also 33340 resolves to a compile-time constant. 33341 33342 PTR is an optional pointer to the object that may be used to 33343 determine alignment. A value of 0 indicates typical alignment 33344 should be used. The compiler may also ignore this parameter. 33345 33346 if (_atomic_always_lock_free (sizeof (long long), 0)) 33347 33348 33349 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void 33350 *ptr) 33351 This built-in function returns true if objects of SIZE bytes always 33352 generate lock free atomic instructions for the target 33353 architecture. If it is not known to be lock free a call is made 33354 to a runtime routine named `__atomic_is_lock_free'. 33355 33356 PTR is an optional pointer to the object that may be used to 33357 determine alignment. A value of 0 indicates typical alignment 33358 should be used. The compiler may also ignore this parameter. 33359 33360 33361File: gcc.info, Node: Integer Overflow Builtins, Next: x86 specific memory model extensions for transactional memory, Prev: __atomic Builtins, Up: C Extensions 33362 333636.52 Built-in Functions to Perform Arithmetic with Overflow Checking 33364==================================================================== 33365 33366The following built-in functions allow performing simple arithmetic 33367operations together with checking whether the operations overflowed. 33368 33369 -- Built-in Function: bool __builtin_add_overflow (TYPE1 a, TYPE2 b, 33370 TYPE3 *res) 33371 -- Built-in Function: bool __builtin_sadd_overflow (int a, int b, int 33372 *res) 33373 -- Built-in Function: bool __builtin_saddl_overflow (long int a, long 33374 int b, long int *res) 33375 -- Built-in Function: bool __builtin_saddll_overflow (long long int a, 33376 long long int b, long int *res) 33377 -- Built-in Function: bool __builtin_uadd_overflow (unsigned int a, 33378 unsigned int b, unsigned int *res) 33379 -- Built-in Function: bool __builtin_uaddl_overflow (unsigned long int 33380 a, unsigned long int b, unsigned long int *res) 33381 -- Built-in Function: bool __builtin_uaddll_overflow (unsigned long 33382 long int a, unsigned long long int b, unsigned long int *res) 33383 These built-in functions promote the first two operands into 33384 infinite precision signed type and perform addition on those 33385 promoted operands. The result is then cast to the type the third 33386 pointer argument points to and stored there. If the stored result 33387 is equal to the infinite precision result, the built-in functions 33388 return false, otherwise they return true. As the addition is 33389 performed in infinite signed precision, these built-in functions 33390 have fully defined behavior for all argument values. 33391 33392 The first built-in function allows arbitrary integral types for 33393 operands and the result type must be pointer to some integer type, 33394 the rest of the built-in functions have explicit integer types. 33395 33396 The compiler will attempt to use hardware instructions to implement 33397 these built-in functions where possible, like conditional jump on 33398 overflow after addition, conditional jump on carry etc. 33399 33400 33401 -- Built-in Function: bool __builtin_sub_overflow (TYPE1 a, TYPE2 b, 33402 TYPE3 *res) 33403 -- Built-in Function: bool __builtin_ssub_overflow (int a, int b, int 33404 *res) 33405 -- Built-in Function: bool __builtin_ssubl_overflow (long int a, long 33406 int b, long int *res) 33407 -- Built-in Function: bool __builtin_ssubll_overflow (long long int a, 33408 long long int b, long int *res) 33409 -- Built-in Function: bool __builtin_usub_overflow (unsigned int a, 33410 unsigned int b, unsigned int *res) 33411 -- Built-in Function: bool __builtin_usubl_overflow (unsigned long int 33412 a, unsigned long int b, unsigned long int *res) 33413 -- Built-in Function: bool __builtin_usubll_overflow (unsigned long 33414 long int a, unsigned long long int b, unsigned long int *res) 33415 These built-in functions are similar to the add overflow checking 33416 built-in functions above, except they perform subtraction, 33417 subtract the second argument from the first one, instead of 33418 addition. 33419 33420 33421 -- Built-in Function: bool __builtin_mul_overflow (TYPE1 a, TYPE2 b, 33422 TYPE3 *res) 33423 -- Built-in Function: bool __builtin_smul_overflow (int a, int b, int 33424 *res) 33425 -- Built-in Function: bool __builtin_smull_overflow (long int a, long 33426 int b, long int *res) 33427 -- Built-in Function: bool __builtin_smulll_overflow (long long int a, 33428 long long int b, long int *res) 33429 -- Built-in Function: bool __builtin_umul_overflow (unsigned int a, 33430 unsigned int b, unsigned int *res) 33431 -- Built-in Function: bool __builtin_umull_overflow (unsigned long int 33432 a, unsigned long int b, unsigned long int *res) 33433 -- Built-in Function: bool __builtin_umulll_overflow (unsigned long 33434 long int a, unsigned long long int b, unsigned long int *res) 33435 These built-in functions are similar to the add overflow checking 33436 built-in functions above, except they perform multiplication, 33437 instead of addition. 33438 33439 33440 33441File: gcc.info, Node: x86 specific memory model extensions for transactional memory, Next: Object Size Checking, Prev: Integer Overflow Builtins, Up: C Extensions 33442 334436.53 x86-Specific Memory Model Extensions for Transactional Memory 33444================================================================== 33445 33446The x86 architecture supports additional memory ordering flags to mark 33447lock critical sections for hardware lock elision. These must be 33448specified in addition to an existing memory model to atomic intrinsics. 33449 33450`__ATOMIC_HLE_ACQUIRE' 33451 Start lock elision on a lock variable. Memory model must be 33452 `__ATOMIC_ACQUIRE' or stronger. 33453 33454`__ATOMIC_HLE_RELEASE' 33455 End lock elision on a lock variable. Memory model must be 33456 `__ATOMIC_RELEASE' or stronger. 33457 33458 When a lock acquire fails it is required for good performance to abort 33459the transaction quickly. This can be done with a `_mm_pause' 33460 33461 #include <immintrin.h> // For _mm_pause 33462 33463 int lockvar; 33464 33465 /* Acquire lock with lock elision */ 33466 while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE)) 33467 _mm_pause(); /* Abort failed transaction */ 33468 ... 33469 /* Free lock with lock elision */ 33470 __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE); 33471 33472 33473File: gcc.info, Node: Object Size Checking, Next: Pointer Bounds Checker builtins, Prev: x86 specific memory model extensions for transactional memory, Up: C Extensions 33474 334756.54 Object Size Checking Built-in Functions 33476============================================ 33477 33478GCC implements a limited buffer overflow protection mechanism that can 33479prevent some buffer overflow attacks. 33480 33481 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 33482 TYPE) 33483 is a built-in construct that returns a constant number of bytes 33484 from PTR to the end of the object PTR pointer points to (if known 33485 at compile time). `__builtin_object_size' never evaluates its 33486 arguments for side-effects. If there are any side-effects in 33487 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0' 33488 for TYPE 2 or 3. If there are multiple objects PTR can point to 33489 and all of them are known at compile time, the returned number is 33490 the maximum of remaining byte counts in those objects if TYPE & 2 33491 is 0 and minimum if nonzero. If it is not possible to determine 33492 which objects PTR points to at compile time, 33493 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or 33494 1 and `(size_t) 0' for TYPE 2 or 3. 33495 33496 TYPE is an integer constant from 0 to 3. If the least significant 33497 bit is clear, objects are whole variables, if it is set, a closest 33498 surrounding subobject is considered the object a pointer points to. 33499 The second bit determines if maximum or minimum of remaining bytes 33500 is computed. 33501 33502 struct V { char buf1[10]; int b; char buf2[10]; } var; 33503 char *p = &var.buf1[1], *q = &var.b; 33504 33505 /* Here the object p points to is var. */ 33506 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 33507 /* The subobject p points to is var.buf1. */ 33508 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 33509 /* The object q points to is var. */ 33510 assert (__builtin_object_size (q, 0) 33511 == (char *) (&var + 1) - (char *) &var.b); 33512 /* The subobject q points to is var.b. */ 33513 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 33514 33515 There are built-in functions added for many common string operation 33516functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is 33517provided. This built-in has an additional last argument, which is the 33518number of bytes remaining in object the DEST argument points to or 33519`(size_t) -1' if the size is not known. 33520 33521 The built-in functions are optimized into the normal string functions 33522like `memcpy' if the last argument is `(size_t) -1' or if it is known 33523at compile time that the destination object will not be overflown. If 33524the compiler can determine at compile time the object will be always 33525overflown, it issues a warning. 33526 33527 The intended use can be e.g. 33528 33529 #undef memcpy 33530 #define bos0(dest) __builtin_object_size (dest, 0) 33531 #define memcpy(dest, src, n) \ 33532 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 33533 33534 char *volatile p; 33535 char buf[10]; 33536 /* It is unknown what object p points to, so this is optimized 33537 into plain memcpy - no checking is possible. */ 33538 memcpy (p, "abcde", n); 33539 /* Destination is known and length too. It is known at compile 33540 time there will be no overflow. */ 33541 memcpy (&buf[5], "abcde", 5); 33542 /* Destination is known, but the length is not known at compile time. 33543 This will result in __memcpy_chk call that can check for overflow 33544 at run time. */ 33545 memcpy (&buf[5], "abcde", n); 33546 /* Destination is known and it is known at compile time there will 33547 be overflow. There will be a warning and __memcpy_chk call that 33548 will abort the program at run time. */ 33549 memcpy (&buf[6], "abcde", 5); 33550 33551 Such built-in functions are provided for `memcpy', `mempcpy', 33552`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and 33553`strncat'. 33554 33555 There are also checking built-in functions for formatted output 33556functions. 33557 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 33558 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 33559 const char *fmt, ...); 33560 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 33561 va_list ap); 33562 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 33563 const char *fmt, va_list ap); 33564 33565 The added FLAG argument is passed unchanged to `__sprintf_chk' etc. 33566functions and can contain implementation specific flags on what 33567additional security measures the checking function might take, such as 33568handling `%n' differently. 33569 33570 The OS argument is the object size S points to, like in the other 33571built-in functions. There is a small difference in the behavior 33572though, if OS is `(size_t) -1', the built-in functions are optimized 33573into the non-checking functions only if FLAG is 0, otherwise the 33574checking function is called with OS argument set to `(size_t) -1'. 33575 33576 In addition to this, there are checking built-in functions 33577`__builtin___printf_chk', `__builtin___vprintf_chk', 33578`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have 33579just one additional argument, FLAG, right before format string FMT. If 33580the compiler is able to optimize them to `fputc' etc. functions, it 33581does, otherwise the checking function is called and the FLAG argument 33582passed to it. 33583 33584 33585File: gcc.info, Node: Pointer Bounds Checker builtins, Next: Cilk Plus Builtins, Prev: Object Size Checking, Up: C Extensions 33586 335876.55 Pointer Bounds Checker Built-in Functions 33588============================================== 33589 33590GCC provides a set of built-in functions to control Pointer Bounds 33591Checker instrumentation. Note that all Pointer Bounds Checker builtins 33592can be used even if you compile with Pointer Bounds Checker off 33593(`-fno-check-pointer-bounds'). The behavior may differ in such case as 33594documented below. 33595 33596 -- Built-in Function: void * __builtin___bnd_set_ptr_bounds (const 33597 void *Q, size_t SIZE) 33598 This built-in function returns a new pointer with the value of Q, 33599 and associate it with the bounds [Q, Q+SIZE-1]. With Pointer 33600 Bounds Checker off, the built-in function just returns the first 33601 argument. 33602 33603 extern void *__wrap_malloc (size_t n) 33604 { 33605 void *p = (void *)__real_malloc (n); 33606 if (!p) return __builtin___bnd_null_ptr_bounds (p); 33607 return __builtin___bnd_set_ptr_bounds (p, n); 33608 } 33609 33610 33611 -- Built-in Function: void * __builtin___bnd_narrow_ptr_bounds (const 33612 void *P, const void *Q, size_t SIZE) 33613 This built-in function returns a new pointer with the value of P 33614 and associates it with the narrowed bounds formed by the 33615 intersection of bounds associated with Q and the bounds [P, P + 33616 SIZE - 1]. With Pointer Bounds Checker off, the built-in function 33617 just returns the first argument. 33618 33619 void init_objects (object *objs, size_t size) 33620 { 33621 size_t i; 33622 /* Initialize objects one-by-one passing pointers with bounds of 33623 an object, not the full array of objects. */ 33624 for (i = 0; i < size; i++) 33625 init_object (__builtin___bnd_narrow_ptr_bounds (objs + i, objs, 33626 sizeof(object))); 33627 } 33628 33629 33630 -- Built-in Function: void * __builtin___bnd_copy_ptr_bounds (const 33631 void *Q, const void *R) 33632 This built-in function returns a new pointer with the value of Q, 33633 and associates it with the bounds already associated with pointer 33634 R. With Pointer Bounds Checker off, the built-in function just 33635 returns the first argument. 33636 33637 /* Here is a way to get pointer to object's field but 33638 still with the full object's bounds. */ 33639 int *field_ptr = __builtin___bnd_copy_ptr_bounds (&objptr->int_field, 33640 objptr); 33641 33642 33643 -- Built-in Function: void * __builtin___bnd_init_ptr_bounds (const 33644 void *Q) 33645 This built-in function returns a new pointer with the value of Q, 33646 and associates it with INIT (allowing full memory access) bounds. 33647 With Pointer Bounds Checker off, the built-in function just 33648 returns the first argument. 33649 33650 33651 -- Built-in Function: void * __builtin___bnd_null_ptr_bounds (const 33652 void *Q) 33653 This built-in function returns a new pointer with the value of Q, 33654 and associates it with NULL (allowing no memory access) bounds. 33655 With Pointer Bounds Checker off, the built-in function just 33656 returns the first argument. 33657 33658 33659 -- Built-in Function: void __builtin___bnd_store_ptr_bounds (const 33660 void **PTR_ADDR, const void *PTR_VAL) 33661 This built-in function stores the bounds associated with pointer 33662 PTR_VAL and location PTR_ADDR into Bounds Table. This can be 33663 useful to propagate bounds from legacy code without touching the 33664 associated pointer's memory when pointers are copied as integers. 33665 With Pointer Bounds Checker off, the built-in function call is 33666 ignored. 33667 33668 33669 -- Built-in Function: void __builtin___bnd_chk_ptr_lbounds (const void 33670 *Q) 33671 This built-in function checks if the pointer Q is within the lower 33672 bound of its associated bounds. With Pointer Bounds Checker off, 33673 the built-in function call is ignored. 33674 33675 extern void *__wrap_memset (void *dst, int c, size_t len) 33676 { 33677 if (len > 0) 33678 { 33679 __builtin___bnd_chk_ptr_lbounds (dst); 33680 __builtin___bnd_chk_ptr_ubounds ((char *)dst + len - 1); 33681 __real_memset (dst, c, len); 33682 } 33683 return dst; 33684 } 33685 33686 33687 -- Built-in Function: void __builtin___bnd_chk_ptr_ubounds (const void 33688 *Q) 33689 This built-in function checks if the pointer Q is within the upper 33690 bound of its associated bounds. With Pointer Bounds Checker off, 33691 the built-in function call is ignored. 33692 33693 33694 -- Built-in Function: void __builtin___bnd_chk_ptr_bounds (const void 33695 *Q, size_t SIZE) 33696 This built-in function checks if [Q, Q + SIZE - 1] is within the 33697 lower and upper bounds associated with Q. With Pointer Bounds 33698 Checker off, the built-in function call is ignored. 33699 33700 extern void *__wrap_memcpy (void *dst, const void *src, size_t n) 33701 { 33702 if (n > 0) 33703 { 33704 __bnd_chk_ptr_bounds (dst, n); 33705 __bnd_chk_ptr_bounds (src, n); 33706 __real_memcpy (dst, src, n); 33707 } 33708 return dst; 33709 } 33710 33711 33712 -- Built-in Function: const void * __builtin___bnd_get_ptr_lbound 33713 (const void *Q) 33714 This built-in function returns the lower bound associated with the 33715 pointer Q, as a pointer value. This is useful for debugging using 33716 `printf'. With Pointer Bounds Checker off, the built-in function 33717 returns 0. 33718 33719 void *lb = __builtin___bnd_get_ptr_lbound (q); 33720 void *ub = __builtin___bnd_get_ptr_ubound (q); 33721 printf ("q = %p lb(q) = %p ub(q) = %p", q, lb, ub); 33722 33723 33724 -- Built-in Function: const void * __builtin___bnd_get_ptr_ubound 33725 (const void *Q) 33726 This built-in function returns the upper bound (which is a 33727 pointer) associated with the pointer Q. With Pointer Bounds 33728 Checker off, the built-in function returns -1. 33729 33730 33731 33732File: gcc.info, Node: Cilk Plus Builtins, Next: Other Builtins, Prev: Pointer Bounds Checker builtins, Up: C Extensions 33733 337346.56 Cilk Plus C/C++ Language Extension Built-in Functions 33735========================================================== 33736 33737GCC provides support for the following built-in reduction functions if 33738Cilk Plus is enabled. Cilk Plus can be enabled using the `-fcilkplus' 33739flag. 33740 33741 * `__sec_implicit_index' 33742 33743 * `__sec_reduce' 33744 33745 * `__sec_reduce_add' 33746 33747 * `__sec_reduce_all_nonzero' 33748 33749 * `__sec_reduce_all_zero' 33750 33751 * `__sec_reduce_any_nonzero' 33752 33753 * `__sec_reduce_any_zero' 33754 33755 * `__sec_reduce_max' 33756 33757 * `__sec_reduce_min' 33758 33759 * `__sec_reduce_max_ind' 33760 33761 * `__sec_reduce_min_ind' 33762 33763 * `__sec_reduce_mul' 33764 33765 * `__sec_reduce_mutating' 33766 33767 Further details and examples about these built-in functions are 33768described in the Cilk Plus language manual which can be found at 33769`http://www.cilkplus.org'. 33770 33771 33772File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Cilk Plus Builtins, Up: C Extensions 33773 337746.57 Other Built-in Functions Provided by GCC 33775============================================= 33776 33777GCC provides a large number of built-in functions other than the ones 33778mentioned above. Some of these are for internal use in the processing 33779of exceptions or variable-length argument lists and are not documented 33780here because they may change from time to time; we do not recommend 33781general use of these functions. 33782 33783 The remaining functions are provided for optimization purposes. 33784 33785 GCC includes built-in versions of many of the functions in the standard 33786C library. The versions prefixed with `__builtin_' are always treated 33787as having the same meaning as the C library function even if you 33788specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 33789these functions are only optimized in certain cases; if they are not 33790optimized in a particular case, a call to the library function is 33791emitted. 33792 33793 Outside strict ISO C mode (`-ansi', `-std=c90', `-std=c99' or 33794`-std=c11'), the functions `_exit', `alloca', `bcmp', `bzero', 33795`dcgettext', `dgettext', `dremf', `dreml', `drem', `exp10f', `exp10l', 33796`exp10', `ffsll', `ffsl', `ffs', `fprintf_unlocked', `fputs_unlocked', 33797`gammaf', `gammal', `gamma', `gammaf_r', `gammal_r', `gamma_r', 33798`gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1', 33799`jnf', `jnl', `jn', `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy', 33800`pow10f', `pow10l', `pow10', `printf_unlocked', `rindex', `scalbf', 33801`scalbl', `scalb', `signbit', `signbitf', `signbitl', `signbitd32', 33802`signbitd64', `signbitd128', `significandf', `significandl', 33803`significand', `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy', 33804`strcasecmp', `strdup', `strfmon', `strncasecmp', `strndup', `toascii', 33805`y0f', `y0l', `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be 33806handled as built-in functions. All these functions have corresponding 33807versions prefixed with `__builtin_', which may be used even in strict 33808C90 mode. 33809 33810 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 33811`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 33812`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 33813`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 33814`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 33815`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 33816`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 33817`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj', 33818`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow', 33819`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf', 33820`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl', 33821`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan', 33822`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l', 33823`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf', 33824`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin', 33825`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs', 33826`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs', 33827`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 33828`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', 33829`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', 33830`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', 33831`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward', 33832`remainderf', `remainderl', `remainder', `remquof', `remquol', 33833`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round', 33834`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn', 33835`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc', 33836`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in 33837functions except in strict ISO C90 mode (`-ansi' or `-std=c90'). 33838 33839 There are also built-in versions of the ISO C99 functions `acosf', 33840`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 33841`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 33842`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 33843`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 33844`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 33845`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 33846recognized in any mode since ISO C90 reserves these names for the 33847purpose to which ISO C99 puts them. All these functions have 33848corresponding versions prefixed with `__builtin_'. 33849 33850 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit', 33851`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper', 33852`iswxdigit', `towlower' and `towupper' are handled as built-in functions 33853except in strict ISO C90 mode (`-ansi' or `-std=c90'). 33854 33855 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 33856`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 33857`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl', 33858`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace', 33859`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10', 33860`log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow', 33861`printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf', 33862`sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', 33863`strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk', 33864`strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and 33865`vsprintf' are all recognized as built-in functions unless 33866`-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified 33867for an individual function). All of these functions have corresponding 33868versions prefixed with `__builtin_'. 33869 33870 GCC provides built-in versions of the ISO C99 floating-point comparison 33871macros that avoid raising exceptions for unordered operands. They have 33872the same names as the standard macros ( `isgreater', `isgreaterequal', 33873`isless', `islessequal', `islessgreater', and `isunordered') , with 33874`__builtin_' prefixed. We intend for a library implementor to be able 33875to simply `#define' each standard macro to its built-in equivalent. In 33876the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign' 33877and `isnormal' built-ins used with `__builtin_' prefixed. The `isinf' 33878and `isnan' built-in functions appear both with and without the 33879`__builtin_' prefix. 33880 33881 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 33882 You can use the built-in function `__builtin_types_compatible_p' to 33883 determine whether two types are the same. 33884 33885 This built-in function returns 1 if the unqualified versions of the 33886 types TYPE1 and TYPE2 (which are types, not expressions) are 33887 compatible, 0 otherwise. The result of this built-in function can 33888 be used in integer constant expressions. 33889 33890 This built-in function ignores top level qualifiers (e.g., `const', 33891 `volatile'). For example, `int' is equivalent to `const int'. 33892 33893 The type `int[]' and `int[5]' are compatible. On the other hand, 33894 `int' and `char *' are not compatible, even if the size of their 33895 types, on the particular architecture are the same. Also, the 33896 amount of pointer indirection is taken into account when 33897 determining similarity. Consequently, `short *' is not similar to 33898 `short **'. Furthermore, two types that are typedefed are 33899 considered compatible if their underlying types are compatible. 33900 33901 An `enum' type is not considered to be compatible with another 33902 `enum' type even if both are compatible with the same integer 33903 type; this is what the C standard specifies. For example, `enum 33904 {foo, bar}' is not similar to `enum {hot, dog}'. 33905 33906 You typically use this function in code whose execution varies 33907 depending on the arguments' types. For example: 33908 33909 #define foo(x) \ 33910 ({ \ 33911 typeof (x) tmp = (x); \ 33912 if (__builtin_types_compatible_p (typeof (x), long double)) \ 33913 tmp = foo_long_double (tmp); \ 33914 else if (__builtin_types_compatible_p (typeof (x), double)) \ 33915 tmp = foo_double (tmp); \ 33916 else if (__builtin_types_compatible_p (typeof (x), float)) \ 33917 tmp = foo_float (tmp); \ 33918 else \ 33919 abort (); \ 33920 tmp; \ 33921 }) 33922 33923 _Note:_ This construct is only available for C. 33924 33925 33926 -- Built-in Function: TYPE __builtin_call_with_static_chain (CALL_EXP, 33927 POINTER_EXP) 33928 The CALL_EXP expression must be a function call, and the 33929 POINTER_EXP expression must be a pointer. The POINTER_EXP is 33930 passed to the function call in the target's static chain location. 33931 The result of builtin is the result of the function call. 33932 33933 _Note:_ This builtin is only available for C. This builtin can be 33934 used to call Go closures from C. 33935 33936 33937 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 33938 EXP2) 33939 You can use the built-in function `__builtin_choose_expr' to 33940 evaluate code depending on the value of a constant expression. 33941 This built-in function returns EXP1 if CONST_EXP, which is an 33942 integer constant expression, is nonzero. Otherwise it returns 33943 EXP2. 33944 33945 This built-in function is analogous to the `? :' operator in C, 33946 except that the expression returned has its type unaltered by 33947 promotion rules. Also, the built-in function does not evaluate 33948 the expression that is not chosen. For example, if CONST_EXP 33949 evaluates to true, EXP2 is not evaluated even if it has 33950 side-effects. 33951 33952 This built-in function can return an lvalue if the chosen argument 33953 is an lvalue. 33954 33955 If EXP1 is returned, the return type is the same as EXP1's type. 33956 Similarly, if EXP2 is returned, its return type is the same as 33957 EXP2. 33958 33959 Example: 33960 33961 #define foo(x) \ 33962 __builtin_choose_expr ( \ 33963 __builtin_types_compatible_p (typeof (x), double), \ 33964 foo_double (x), \ 33965 __builtin_choose_expr ( \ 33966 __builtin_types_compatible_p (typeof (x), float), \ 33967 foo_float (x), \ 33968 /* The void expression results in a compile-time error \ 33969 when assigning the result to something. */ \ 33970 (void)0)) 33971 33972 _Note:_ This construct is only available for C. Furthermore, the 33973 unused expression (EXP1 or EXP2 depending on the value of 33974 CONST_EXP) may still generate syntax errors. This may change in 33975 future revisions. 33976 33977 33978 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG) 33979 The built-in function `__builtin_complex' is provided for use in 33980 implementing the ISO C11 macros `CMPLXF', `CMPLX' and `CMPLXL'. 33981 REAL and IMAG must have the same type, a real binary 33982 floating-point type, and the result has the corresponding complex 33983 type with real and imaginary parts REAL and IMAG. Unlike `REAL + 33984 I * IMAG', this works even when infinities, NaNs and negative 33985 zeros are involved. 33986 33987 33988 -- Built-in Function: int __builtin_constant_p (EXP) 33989 You can use the built-in function `__builtin_constant_p' to 33990 determine if a value is known to be constant at compile time and 33991 hence that GCC can perform constant-folding on expressions 33992 involving that value. The argument of the function is the value 33993 to test. The function returns the integer 1 if the argument is 33994 known to be a compile-time constant and 0 if it is not known to be 33995 a compile-time constant. A return of 0 does not indicate that the 33996 value is _not_ a constant, but merely that GCC cannot prove it is 33997 a constant with the specified value of the `-O' option. 33998 33999 You typically use this function in an embedded application where 34000 memory is a critical resource. If you have some complex 34001 calculation, you may want it to be folded if it involves 34002 constants, but need to call a function if it does not. For 34003 example: 34004 34005 #define Scale_Value(X) \ 34006 (__builtin_constant_p (X) \ 34007 ? ((X) * SCALE + OFFSET) : Scale (X)) 34008 34009 You may use this built-in function in either a macro or an inline 34010 function. However, if you use it in an inlined function and pass 34011 an argument of the function as the argument to the built-in, GCC 34012 never returns 1 when you call the inline function with a string 34013 constant or compound literal (*note Compound Literals::) and does 34014 not return 1 when you pass a constant numeric value to the inline 34015 function unless you specify the `-O' option. 34016 34017 You may also use `__builtin_constant_p' in initializers for static 34018 data. For instance, you can write 34019 34020 static const int table[] = { 34021 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 34022 /* ... */ 34023 }; 34024 34025 This is an acceptable initializer even if EXPRESSION is not a 34026 constant expression, including the case where 34027 `__builtin_constant_p' returns 1 because EXPRESSION can be folded 34028 to a constant but EXPRESSION contains operands that are not 34029 otherwise permitted in a static initializer (for example, `0 && 34030 foo ()'). GCC must be more conservative about evaluating the 34031 built-in in this case, because it has no opportunity to perform 34032 optimization. 34033 34034 -- Built-in Function: long __builtin_expect (long EXP, long C) 34035 You may use `__builtin_expect' to provide the compiler with branch 34036 prediction information. In general, you should prefer to use 34037 actual profile feedback for this (`-fprofile-arcs'), as 34038 programmers are notoriously bad at predicting how their programs 34039 actually perform. However, there are applications in which this 34040 data is hard to collect. 34041 34042 The return value is the value of EXP, which should be an integral 34043 expression. The semantics of the built-in are that it is expected 34044 that EXP == C. For example: 34045 34046 if (__builtin_expect (x, 0)) 34047 foo (); 34048 34049 indicates that we do not expect to call `foo', since we expect `x' 34050 to be zero. Since you are limited to integral expressions for 34051 EXP, you should use constructions such as 34052 34053 if (__builtin_expect (ptr != NULL, 1)) 34054 foo (*ptr); 34055 34056 when testing pointer or floating-point values. 34057 34058 -- Built-in Function: void __builtin_trap (void) 34059 This function causes the program to exit abnormally. GCC 34060 implements this function by using a target-dependent mechanism 34061 (such as intentionally executing an illegal instruction) or by 34062 calling `abort'. The mechanism used may vary from release to 34063 release so you should not rely on any particular implementation. 34064 34065 -- Built-in Function: void __builtin_unreachable (void) 34066 If control flow reaches the point of the `__builtin_unreachable', 34067 the program is undefined. It is useful in situations where the 34068 compiler cannot deduce the unreachability of the code. 34069 34070 One such case is immediately following an `asm' statement that 34071 either never terminates, or one that transfers control elsewhere 34072 and never returns. In this example, without the 34073 `__builtin_unreachable', GCC issues a warning that control reaches 34074 the end of a non-void function. It also generates code to return 34075 after the `asm'. 34076 34077 int f (int c, int v) 34078 { 34079 if (c) 34080 { 34081 return v; 34082 } 34083 else 34084 { 34085 asm("jmp error_handler"); 34086 __builtin_unreachable (); 34087 } 34088 } 34089 34090 Because the `asm' statement unconditionally transfers control out 34091 of the function, control never reaches the end of the function 34092 body. The `__builtin_unreachable' is in fact unreachable and 34093 communicates this fact to the compiler. 34094 34095 Another use for `__builtin_unreachable' is following a call a 34096 function that never returns but that is not declared 34097 `__attribute__((noreturn))', as in this example: 34098 34099 void function_that_never_returns (void); 34100 34101 int g (int c) 34102 { 34103 if (c) 34104 { 34105 return 1; 34106 } 34107 else 34108 { 34109 function_that_never_returns (); 34110 __builtin_unreachable (); 34111 } 34112 } 34113 34114 34115 -- Built-in Function: void *__builtin_assume_aligned (const void *EXP, 34116 size_t ALIGN, ...) 34117 This function returns its first argument, and allows the compiler 34118 to assume that the returned pointer is at least ALIGN bytes 34119 aligned. This built-in can have either two or three arguments, if 34120 it has three, the third argument should have integer type, and if 34121 it is nonzero means misalignment offset. For example: 34122 34123 void *x = __builtin_assume_aligned (arg, 16); 34124 34125 means that the compiler can assume `x', set to `arg', is at least 34126 16-byte aligned, while: 34127 34128 void *x = __builtin_assume_aligned (arg, 32, 8); 34129 34130 means that the compiler can assume for `x', set to `arg', that 34131 `(char *) x - 8' is 32-byte aligned. 34132 34133 -- Built-in Function: int __builtin_LINE () 34134 This function is the equivalent to the preprocessor `__LINE__' 34135 macro and returns the line number of the invocation of the 34136 built-in. In a C++ default argument for a function F, it gets the 34137 line number of the call to F. 34138 34139 -- Built-in Function: const char * __builtin_FUNCTION () 34140 This function is the equivalent to the preprocessor `__FUNCTION__' 34141 macro and returns the function name the invocation of the built-in 34142 is in. 34143 34144 -- Built-in Function: const char * __builtin_FILE () 34145 This function is the equivalent to the preprocessor `__FILE__' 34146 macro and returns the file name the invocation of the built-in is 34147 in. In a C++ default argument for a function F, it gets the file 34148 name of the call to F. 34149 34150 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char 34151 *END) 34152 This function is used to flush the processor's instruction cache 34153 for the region of memory between BEGIN inclusive and END 34154 exclusive. Some targets require that the instruction cache be 34155 flushed, after modifying memory containing code, in order to obtain 34156 deterministic behavior. 34157 34158 If the target does not require instruction cache flushes, 34159 `__builtin___clear_cache' has no effect. Otherwise either 34160 instructions are emitted in-line to clear the instruction cache or 34161 a call to the `__clear_cache' function in libgcc is made. 34162 34163 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 34164 This function is used to minimize cache-miss latency by moving 34165 data into a cache before it is accessed. You can insert calls to 34166 `__builtin_prefetch' into code for which you know addresses of 34167 data in memory that is likely to be accessed soon. If the target 34168 supports them, data prefetch instructions are generated. If the 34169 prefetch is done early enough before the access then the data will 34170 be in the cache by the time it is accessed. 34171 34172 The value of ADDR is the address of the memory to prefetch. There 34173 are two optional arguments, RW and LOCALITY. The value of RW is a 34174 compile-time constant one or zero; one means that the prefetch is 34175 preparing for a write to the memory address and zero, the default, 34176 means that the prefetch is preparing for a read. The value 34177 LOCALITY must be a compile-time constant integer between zero and 34178 three. A value of zero means that the data has no temporal 34179 locality, so it need not be left in the cache after the access. A 34180 value of three means that the data has a high degree of temporal 34181 locality and should be left in all levels of cache possible. 34182 Values of one and two mean, respectively, a low or moderate degree 34183 of temporal locality. The default is three. 34184 34185 for (i = 0; i < n; i++) 34186 { 34187 a[i] = a[i] + b[i]; 34188 __builtin_prefetch (&a[i+j], 1, 1); 34189 __builtin_prefetch (&b[i+j], 0, 1); 34190 /* ... */ 34191 } 34192 34193 Data prefetch does not generate faults if ADDR is invalid, but the 34194 address expression itself must be valid. For example, a prefetch 34195 of `p->next' does not fault if `p->next' is not a valid address, 34196 but evaluation faults if `p' is not a valid address. 34197 34198 If the target does not support data prefetch, the address 34199 expression is evaluated if it includes side effects but no other 34200 code is generated and GCC does not issue a warning. 34201 34202 -- Built-in Function: double __builtin_huge_val (void) 34203 Returns a positive infinity, if supported by the floating-point 34204 format, else `DBL_MAX'. This function is suitable for 34205 implementing the ISO C macro `HUGE_VAL'. 34206 34207 -- Built-in Function: float __builtin_huge_valf (void) 34208 Similar to `__builtin_huge_val', except the return type is `float'. 34209 34210 -- Built-in Function: long double __builtin_huge_vall (void) 34211 Similar to `__builtin_huge_val', except the return type is `long 34212 double'. 34213 34214 -- Built-in Function: int __builtin_fpclassify (int, int, int, int, 34215 int, ...) 34216 This built-in implements the C99 fpclassify functionality. The 34217 first five int arguments should be the target library's notion of 34218 the possible FP classes and are used for return values. They must 34219 be constant values and they must appear in this order: `FP_NAN', 34220 `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'. The 34221 ellipsis is for exactly one floating-point value to classify. GCC 34222 treats the last argument as type-generic, which means it does not 34223 do default promotion from float to double. 34224 34225 -- Built-in Function: double __builtin_inf (void) 34226 Similar to `__builtin_huge_val', except a warning is generated if 34227 the target floating-point format does not support infinities. 34228 34229 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 34230 Similar to `__builtin_inf', except the return type is `_Decimal32'. 34231 34232 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 34233 Similar to `__builtin_inf', except the return type is `_Decimal64'. 34234 34235 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 34236 Similar to `__builtin_inf', except the return type is 34237 `_Decimal128'. 34238 34239 -- Built-in Function: float __builtin_inff (void) 34240 Similar to `__builtin_inf', except the return type is `float'. 34241 This function is suitable for implementing the ISO C99 macro 34242 `INFINITY'. 34243 34244 -- Built-in Function: long double __builtin_infl (void) 34245 Similar to `__builtin_inf', except the return type is `long 34246 double'. 34247 34248 -- Built-in Function: int __builtin_isinf_sign (...) 34249 Similar to `isinf', except the return value is -1 for an argument 34250 of `-Inf' and 1 for an argument of `+Inf'. Note while the 34251 parameter list is an ellipsis, this function only accepts exactly 34252 one floating-point argument. GCC treats this parameter as 34253 type-generic, which means it does not do default promotion from 34254 float to double. 34255 34256 -- Built-in Function: double __builtin_nan (const char *str) 34257 This is an implementation of the ISO C99 function `nan'. 34258 34259 Since ISO C99 defines this function in terms of `strtod', which we 34260 do not implement, a description of the parsing is in order. The 34261 string is parsed as by `strtol'; that is, the base is recognized by 34262 leading `0' or `0x' prefixes. The number parsed is placed in the 34263 significand such that the least significant bit of the number is 34264 at the least significant bit of the significand. The number is 34265 truncated to fit the significand field provided. The significand 34266 is forced to be a quiet NaN. 34267 34268 This function, if given a string literal all of which would have 34269 been consumed by `strtol', is evaluated early enough that it is 34270 considered a compile-time constant. 34271 34272 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 34273 Similar to `__builtin_nan', except the return type is `_Decimal32'. 34274 34275 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 34276 Similar to `__builtin_nan', except the return type is `_Decimal64'. 34277 34278 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 34279 Similar to `__builtin_nan', except the return type is 34280 `_Decimal128'. 34281 34282 -- Built-in Function: float __builtin_nanf (const char *str) 34283 Similar to `__builtin_nan', except the return type is `float'. 34284 34285 -- Built-in Function: long double __builtin_nanl (const char *str) 34286 Similar to `__builtin_nan', except the return type is `long 34287 double'. 34288 34289 -- Built-in Function: double __builtin_nans (const char *str) 34290 Similar to `__builtin_nan', except the significand is forced to be 34291 a signaling NaN. The `nans' function is proposed by WG14 N965. 34292 34293 -- Built-in Function: float __builtin_nansf (const char *str) 34294 Similar to `__builtin_nans', except the return type is `float'. 34295 34296 -- Built-in Function: long double __builtin_nansl (const char *str) 34297 Similar to `__builtin_nans', except the return type is `long 34298 double'. 34299 34300 -- Built-in Function: int __builtin_ffs (int x) 34301 Returns one plus the index of the least significant 1-bit of X, or 34302 if X is zero, returns zero. 34303 34304 -- Built-in Function: int __builtin_clz (unsigned int x) 34305 Returns the number of leading 0-bits in X, starting at the most 34306 significant bit position. If X is 0, the result is undefined. 34307 34308 -- Built-in Function: int __builtin_ctz (unsigned int x) 34309 Returns the number of trailing 0-bits in X, starting at the least 34310 significant bit position. If X is 0, the result is undefined. 34311 34312 -- Built-in Function: int __builtin_clrsb (int x) 34313 Returns the number of leading redundant sign bits in X, i.e. the 34314 number of bits following the most significant bit that are 34315 identical to it. There are no special cases for 0 or other values. 34316 34317 -- Built-in Function: int __builtin_popcount (unsigned int x) 34318 Returns the number of 1-bits in X. 34319 34320 -- Built-in Function: int __builtin_parity (unsigned int x) 34321 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 34322 34323 -- Built-in Function: int __builtin_ffsl (long) 34324 Similar to `__builtin_ffs', except the argument type is `long'. 34325 34326 -- Built-in Function: int __builtin_clzl (unsigned long) 34327 Similar to `__builtin_clz', except the argument type is `unsigned 34328 long'. 34329 34330 -- Built-in Function: int __builtin_ctzl (unsigned long) 34331 Similar to `__builtin_ctz', except the argument type is `unsigned 34332 long'. 34333 34334 -- Built-in Function: int __builtin_clrsbl (long) 34335 Similar to `__builtin_clrsb', except the argument type is `long'. 34336 34337 -- Built-in Function: int __builtin_popcountl (unsigned long) 34338 Similar to `__builtin_popcount', except the argument type is 34339 `unsigned long'. 34340 34341 -- Built-in Function: int __builtin_parityl (unsigned long) 34342 Similar to `__builtin_parity', except the argument type is 34343 `unsigned long'. 34344 34345 -- Built-in Function: int __builtin_ffsll (long long) 34346 Similar to `__builtin_ffs', except the argument type is `long 34347 long'. 34348 34349 -- Built-in Function: int __builtin_clzll (unsigned long long) 34350 Similar to `__builtin_clz', except the argument type is `unsigned 34351 long long'. 34352 34353 -- Built-in Function: int __builtin_ctzll (unsigned long long) 34354 Similar to `__builtin_ctz', except the argument type is `unsigned 34355 long long'. 34356 34357 -- Built-in Function: int __builtin_clrsbll (long long) 34358 Similar to `__builtin_clrsb', except the argument type is `long 34359 long'. 34360 34361 -- Built-in Function: int __builtin_popcountll (unsigned long long) 34362 Similar to `__builtin_popcount', except the argument type is 34363 `unsigned long long'. 34364 34365 -- Built-in Function: int __builtin_parityll (unsigned long long) 34366 Similar to `__builtin_parity', except the argument type is 34367 `unsigned long long'. 34368 34369 -- Built-in Function: double __builtin_powi (double, int) 34370 Returns the first argument raised to the power of the second. 34371 Unlike the `pow' function no guarantees about precision and 34372 rounding are made. 34373 34374 -- Built-in Function: float __builtin_powif (float, int) 34375 Similar to `__builtin_powi', except the argument and return types 34376 are `float'. 34377 34378 -- Built-in Function: long double __builtin_powil (long double, int) 34379 Similar to `__builtin_powi', except the argument and return types 34380 are `long double'. 34381 34382 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x) 34383 Returns X with the order of the bytes reversed; for example, 34384 `0xaabb' becomes `0xbbaa'. Byte here always means exactly 8 bits. 34385 34386 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x) 34387 Similar to `__builtin_bswap16', except the argument and return 34388 types are 32 bit. 34389 34390 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x) 34391 Similar to `__builtin_bswap32', except the argument and return 34392 types are 64 bit. 34393 34394 34395File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 34396 343976.58 Built-in Functions Specific to Particular Target Machines 34398============================================================== 34399 34400On some target machines, GCC supports many built-in functions specific 34401to those machines. Generally these generate calls to specific machine 34402instructions, but allow the compiler to schedule those calls. 34403 34404* Menu: 34405 34406* AArch64 Built-in Functions:: 34407* Alpha Built-in Functions:: 34408* Altera Nios II Built-in Functions:: 34409* ARC Built-in Functions:: 34410* ARC SIMD Built-in Functions:: 34411* ARM iWMMXt Built-in Functions:: 34412* ARM C Language Extensions (ACLE):: 34413* ARM Floating Point Status and Control Intrinsics:: 34414* AVR Built-in Functions:: 34415* Blackfin Built-in Functions:: 34416* FR-V Built-in Functions:: 34417* MIPS DSP Built-in Functions:: 34418* MIPS Paired-Single Support:: 34419* MIPS Loongson Built-in Functions:: 34420* Other MIPS Built-in Functions:: 34421* MSP430 Built-in Functions:: 34422* NDS32 Built-in Functions:: 34423* picoChip Built-in Functions:: 34424* PowerPC Built-in Functions:: 34425* PowerPC AltiVec/VSX Built-in Functions:: 34426* PowerPC Hardware Transactional Memory Built-in Functions:: 34427* RX Built-in Functions:: 34428* S/390 System z Built-in Functions:: 34429* SH Built-in Functions:: 34430* SPARC VIS Built-in Functions:: 34431* SPU Built-in Functions:: 34432* TI C6X Built-in Functions:: 34433* TILE-Gx Built-in Functions:: 34434* TILEPro Built-in Functions:: 34435* x86 Built-in Functions:: 34436* x86 transactional memory intrinsics:: 34437 34438 34439File: gcc.info, Node: AArch64 Built-in Functions, Next: Alpha Built-in Functions, Up: Target Builtins 34440 344416.58.1 AArch64 Built-in Functions 34442--------------------------------- 34443 34444These built-in functions are available for the AArch64 family of 34445processors. 34446 unsigned int __builtin_aarch64_get_fpcr () 34447 void __builtin_aarch64_set_fpcr (unsigned int) 34448 unsigned int __builtin_aarch64_get_fpsr () 34449 void __builtin_aarch64_set_fpsr (unsigned int) 34450 34451 34452File: gcc.info, Node: Alpha Built-in Functions, Next: Altera Nios II Built-in Functions, Prev: AArch64 Built-in Functions, Up: Target Builtins 34453 344546.58.2 Alpha Built-in Functions 34455------------------------------- 34456 34457These built-in functions are available for the Alpha family of 34458processors, depending on the command-line switches used. 34459 34460 The following built-in functions are always available. They all 34461generate the machine instruction that is part of the name. 34462 34463 long __builtin_alpha_implver (void) 34464 long __builtin_alpha_rpcc (void) 34465 long __builtin_alpha_amask (long) 34466 long __builtin_alpha_cmpbge (long, long) 34467 long __builtin_alpha_extbl (long, long) 34468 long __builtin_alpha_extwl (long, long) 34469 long __builtin_alpha_extll (long, long) 34470 long __builtin_alpha_extql (long, long) 34471 long __builtin_alpha_extwh (long, long) 34472 long __builtin_alpha_extlh (long, long) 34473 long __builtin_alpha_extqh (long, long) 34474 long __builtin_alpha_insbl (long, long) 34475 long __builtin_alpha_inswl (long, long) 34476 long __builtin_alpha_insll (long, long) 34477 long __builtin_alpha_insql (long, long) 34478 long __builtin_alpha_inswh (long, long) 34479 long __builtin_alpha_inslh (long, long) 34480 long __builtin_alpha_insqh (long, long) 34481 long __builtin_alpha_mskbl (long, long) 34482 long __builtin_alpha_mskwl (long, long) 34483 long __builtin_alpha_mskll (long, long) 34484 long __builtin_alpha_mskql (long, long) 34485 long __builtin_alpha_mskwh (long, long) 34486 long __builtin_alpha_msklh (long, long) 34487 long __builtin_alpha_mskqh (long, long) 34488 long __builtin_alpha_umulh (long, long) 34489 long __builtin_alpha_zap (long, long) 34490 long __builtin_alpha_zapnot (long, long) 34491 34492 The following built-in functions are always with `-mmax' or 34493`-mcpu=CPU' where CPU is `pca56' or later. They all generate the 34494machine instruction that is part of the name. 34495 34496 long __builtin_alpha_pklb (long) 34497 long __builtin_alpha_pkwb (long) 34498 long __builtin_alpha_unpkbl (long) 34499 long __builtin_alpha_unpkbw (long) 34500 long __builtin_alpha_minub8 (long, long) 34501 long __builtin_alpha_minsb8 (long, long) 34502 long __builtin_alpha_minuw4 (long, long) 34503 long __builtin_alpha_minsw4 (long, long) 34504 long __builtin_alpha_maxub8 (long, long) 34505 long __builtin_alpha_maxsb8 (long, long) 34506 long __builtin_alpha_maxuw4 (long, long) 34507 long __builtin_alpha_maxsw4 (long, long) 34508 long __builtin_alpha_perr (long, long) 34509 34510 The following built-in functions are always with `-mcix' or 34511`-mcpu=CPU' where CPU is `ev67' or later. They all generate the 34512machine instruction that is part of the name. 34513 34514 long __builtin_alpha_cttz (long) 34515 long __builtin_alpha_ctlz (long) 34516 long __builtin_alpha_ctpop (long) 34517 34518 The following built-in functions are available on systems that use the 34519OSF/1 PALcode. Normally they invoke the `rduniq' and `wruniq' PAL 34520calls, but when invoked with `-mtls-kernel', they invoke `rdval' and 34521`wrval'. 34522 34523 void *__builtin_thread_pointer (void) 34524 void __builtin_set_thread_pointer (void *) 34525 34526 34527File: gcc.info, Node: Altera Nios II Built-in Functions, Next: ARC Built-in Functions, Prev: Alpha Built-in Functions, Up: Target Builtins 34528 345296.58.3 Altera Nios II Built-in Functions 34530---------------------------------------- 34531 34532These built-in functions are available for the Altera Nios II family of 34533processors. 34534 34535 The following built-in functions are always available. They all 34536generate the machine instruction that is part of the name. 34537 34538 int __builtin_ldbio (volatile const void *) 34539 int __builtin_ldbuio (volatile const void *) 34540 int __builtin_ldhio (volatile const void *) 34541 int __builtin_ldhuio (volatile const void *) 34542 int __builtin_ldwio (volatile const void *) 34543 void __builtin_stbio (volatile void *, int) 34544 void __builtin_sthio (volatile void *, int) 34545 void __builtin_stwio (volatile void *, int) 34546 void __builtin_sync (void) 34547 int __builtin_rdctl (int) 34548 void __builtin_wrctl (int, int) 34549 34550 The following built-in functions are always available. They all 34551generate a Nios II Custom Instruction. The name of the function 34552represents the types that the function takes and returns. The letter 34553before the `n' is the return type or void if absent. The `n' represents 34554the first parameter to all the custom instructions, the custom 34555instruction number. The two letters after the `n' represent the up to 34556two parameters to the function. 34557 34558 The letters represent the following data types: 34559`<no letter>' 34560 `void' for return type and no parameter for parameter types. 34561 34562`i' 34563 `int' for return type and parameter type 34564 34565`f' 34566 `float' for return type and parameter type 34567 34568`p' 34569 `void *' for return type and parameter type 34570 34571 34572 And the function names are: 34573 void __builtin_custom_n (void) 34574 void __builtin_custom_ni (int) 34575 void __builtin_custom_nf (float) 34576 void __builtin_custom_np (void *) 34577 void __builtin_custom_nii (int, int) 34578 void __builtin_custom_nif (int, float) 34579 void __builtin_custom_nip (int, void *) 34580 void __builtin_custom_nfi (float, int) 34581 void __builtin_custom_nff (float, float) 34582 void __builtin_custom_nfp (float, void *) 34583 void __builtin_custom_npi (void *, int) 34584 void __builtin_custom_npf (void *, float) 34585 void __builtin_custom_npp (void *, void *) 34586 int __builtin_custom_in (void) 34587 int __builtin_custom_ini (int) 34588 int __builtin_custom_inf (float) 34589 int __builtin_custom_inp (void *) 34590 int __builtin_custom_inii (int, int) 34591 int __builtin_custom_inif (int, float) 34592 int __builtin_custom_inip (int, void *) 34593 int __builtin_custom_infi (float, int) 34594 int __builtin_custom_inff (float, float) 34595 int __builtin_custom_infp (float, void *) 34596 int __builtin_custom_inpi (void *, int) 34597 int __builtin_custom_inpf (void *, float) 34598 int __builtin_custom_inpp (void *, void *) 34599 float __builtin_custom_fn (void) 34600 float __builtin_custom_fni (int) 34601 float __builtin_custom_fnf (float) 34602 float __builtin_custom_fnp (void *) 34603 float __builtin_custom_fnii (int, int) 34604 float __builtin_custom_fnif (int, float) 34605 float __builtin_custom_fnip (int, void *) 34606 float __builtin_custom_fnfi (float, int) 34607 float __builtin_custom_fnff (float, float) 34608 float __builtin_custom_fnfp (float, void *) 34609 float __builtin_custom_fnpi (void *, int) 34610 float __builtin_custom_fnpf (void *, float) 34611 float __builtin_custom_fnpp (void *, void *) 34612 void * __builtin_custom_pn (void) 34613 void * __builtin_custom_pni (int) 34614 void * __builtin_custom_pnf (float) 34615 void * __builtin_custom_pnp (void *) 34616 void * __builtin_custom_pnii (int, int) 34617 void * __builtin_custom_pnif (int, float) 34618 void * __builtin_custom_pnip (int, void *) 34619 void * __builtin_custom_pnfi (float, int) 34620 void * __builtin_custom_pnff (float, float) 34621 void * __builtin_custom_pnfp (float, void *) 34622 void * __builtin_custom_pnpi (void *, int) 34623 void * __builtin_custom_pnpf (void *, float) 34624 void * __builtin_custom_pnpp (void *, void *) 34625 34626 34627File: gcc.info, Node: ARC Built-in Functions, Next: ARC SIMD Built-in Functions, Prev: Altera Nios II Built-in Functions, Up: Target Builtins 34628 346296.58.4 ARC Built-in Functions 34630----------------------------- 34631 34632The following built-in functions are provided for ARC targets. The 34633built-ins generate the corresponding assembly instructions. In the 34634examples given below, the generated code often requires an operand or 34635result to be in a register. Where necessary further code will be 34636generated to ensure this is true, but for brevity this is not described 34637in each case. 34638 34639 _Note:_ Using a built-in to generate an instruction not supported by a 34640target may cause problems. At present the compiler is not guaranteed to 34641detect such misuse, and as a result an internal compiler error may be 34642generated. 34643 34644 -- Built-in Function: int __builtin_arc_aligned (void *VAL, int 34645 ALIGNVAL) 34646 Return 1 if VAL is known to have the byte alignment given by 34647 ALIGNVAL, otherwise return 0. Note that this is different from 34648 __alignof__(*(char *)VAL) >= alignval 34649 because __alignof__ sees only the type of the dereference, whereas 34650 __builtin_arc_align uses alignment information from the pointer as 34651 well as from the pointed-to type. The information available will 34652 depend on optimization level. 34653 34654 -- Built-in Function: void __builtin_arc_brk (void) 34655 Generates 34656 brk 34657 34658 -- Built-in Function: unsigned int __builtin_arc_core_read (unsigned 34659 int REGNO) 34660 The operand is the number of a register to be read. Generates: 34661 mov DEST, rREGNO 34662 where the value in DEST will be the result returned from the 34663 built-in. 34664 34665 -- Built-in Function: void __builtin_arc_core_write (unsigned int 34666 REGNO, unsigned int VAL) 34667 The first operand is the number of a register to be written, the 34668 second operand is a compile time constant to write into that 34669 register. Generates: 34670 mov rREGNO, VAL 34671 34672 -- Built-in Function: int __builtin_arc_divaw (int A, int B) 34673 Only available if either `-mcpu=ARC700' or `-meA' is set. 34674 Generates: 34675 divaw DEST, A, B 34676 where the value in DEST will be the result returned from the 34677 built-in. 34678 34679 -- Built-in Function: void __builtin_arc_flag (unsigned int A) 34680 Generates 34681 flag A 34682 34683 -- Built-in Function: unsigned int __builtin_arc_lr (unsigned int AUXR) 34684 The operand, AUXV, is the address of an auxiliary register and 34685 must be a compile time constant. Generates: 34686 lr DEST, [AUXR] 34687 Where the value in DEST will be the result returned from the 34688 built-in. 34689 34690 -- Built-in Function: void __builtin_arc_mul64 (int A, int B) 34691 Only available with `-mmul64'. Generates: 34692 mul64 A, B 34693 34694 -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A, 34695 unsigned int B) 34696 Only available with `-mmul64'. Generates: 34697 mulu64 A, B 34698 34699 -- Built-in Function: void __builtin_arc_nop (void) 34700 Generates: 34701 nop 34702 34703 -- Built-in Function: int __builtin_arc_norm (int SRC) 34704 Only valid if the `norm' instruction is available through the 34705 `-mnorm' option or by default with `-mcpu=ARC700'. Generates: 34706 norm DEST, SRC 34707 Where the value in DEST will be the result returned from the 34708 built-in. 34709 34710 -- Built-in Function: short int __builtin_arc_normw (short int SRC) 34711 Only valid if the `normw' instruction is available through the 34712 `-mnorm' option or by default with `-mcpu=ARC700'. Generates: 34713 normw DEST, SRC 34714 Where the value in DEST will be the result returned from the 34715 built-in. 34716 34717 -- Built-in Function: void __builtin_arc_rtie (void) 34718 Generates: 34719 rtie 34720 34721 -- Built-in Function: void __builtin_arc_sleep (int A 34722 Generates: 34723 sleep A 34724 34725 -- Built-in Function: void __builtin_arc_sr (unsigned int AUXR, 34726 unsigned int VAL) 34727 The first argument, AUXV, is the address of an auxiliary register, 34728 the second argument, VAL, is a compile time constant to be written 34729 to the register. Generates: 34730 sr AUXR, [VAL] 34731 34732 -- Built-in Function: int __builtin_arc_swap (int SRC) 34733 Only valid with `-mswap'. Generates: 34734 swap DEST, SRC 34735 Where the value in DEST will be the result returned from the 34736 built-in. 34737 34738 -- Built-in Function: void __builtin_arc_swi (void) 34739 Generates: 34740 swi 34741 34742 -- Built-in Function: void __builtin_arc_sync (void) 34743 Only available with `-mcpu=ARC700'. Generates: 34744 sync 34745 34746 -- Built-in Function: void __builtin_arc_trap_s (unsigned int C) 34747 Only available with `-mcpu=ARC700'. Generates: 34748 trap_s C 34749 34750 -- Built-in Function: void __builtin_arc_unimp_s (void) 34751 Only available with `-mcpu=ARC700'. Generates: 34752 unimp_s 34753 34754 The instructions generated by the following builtins are not 34755considered as candidates for scheduling. They are not moved around by 34756the compiler during scheduling, and thus can be expected to appear 34757where they are put in the C code: 34758 __builtin_arc_brk() 34759 __builtin_arc_core_read() 34760 __builtin_arc_core_write() 34761 __builtin_arc_flag() 34762 __builtin_arc_lr() 34763 __builtin_arc_sleep() 34764 __builtin_arc_sr() 34765 __builtin_arc_swi() 34766 34767 34768File: gcc.info, Node: ARC SIMD Built-in Functions, Next: ARM iWMMXt Built-in Functions, Prev: ARC Built-in Functions, Up: Target Builtins 34769 347706.58.5 ARC SIMD Built-in Functions 34771---------------------------------- 34772 34773SIMD builtins provided by the compiler can be used to generate the 34774vector instructions. This section describes the available builtins and 34775their usage in programs. With the `-msimd' option, the compiler 34776provides 128-bit vector types, which can be specified using the 34777`vector_size' attribute. The header file `arc-simd.h' can be included 34778to use the following predefined types: 34779 typedef int __v4si __attribute__((vector_size(16))); 34780 typedef short __v8hi __attribute__((vector_size(16))); 34781 34782 These types can be used to define 128-bit variables. The built-in 34783functions listed in the following section can be used on these 34784variables to generate the vector operations. 34785 34786 For all builtins, `__builtin_arc_SOMEINSN', the header file 34787`arc-simd.h' also provides equivalent macros called `_SOMEINSN' that 34788can be used for programming ease and improved readability. The 34789following macros for DMA control are also provided: 34790 #define _setup_dma_in_channel_reg _vdiwr 34791 #define _setup_dma_out_channel_reg _vdowr 34792 34793 The following is a complete list of all the SIMD built-ins provided 34794for ARC, grouped by calling signature. 34795 34796 The following take two `__v8hi' arguments and return a `__v8hi' result: 34797 __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi) 34798 __v8hi __builtin_arc_vaddw (__v8hi, __v8hi) 34799 __v8hi __builtin_arc_vand (__v8hi, __v8hi) 34800 __v8hi __builtin_arc_vandaw (__v8hi, __v8hi) 34801 __v8hi __builtin_arc_vavb (__v8hi, __v8hi) 34802 __v8hi __builtin_arc_vavrb (__v8hi, __v8hi) 34803 __v8hi __builtin_arc_vbic (__v8hi, __v8hi) 34804 __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi) 34805 __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi) 34806 __v8hi __builtin_arc_vdifw (__v8hi, __v8hi) 34807 __v8hi __builtin_arc_veqw (__v8hi, __v8hi) 34808 __v8hi __builtin_arc_vh264f (__v8hi, __v8hi) 34809 __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi) 34810 __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi) 34811 __v8hi __builtin_arc_vlew (__v8hi, __v8hi) 34812 __v8hi __builtin_arc_vltw (__v8hi, __v8hi) 34813 __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi) 34814 __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi) 34815 __v8hi __builtin_arc_vminaw (__v8hi, __v8hi) 34816 __v8hi __builtin_arc_vminw (__v8hi, __v8hi) 34817 __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi) 34818 __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi) 34819 __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi) 34820 __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi) 34821 __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi) 34822 __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi) 34823 __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi) 34824 __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi) 34825 __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi) 34826 __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi) 34827 __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi) 34828 __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi) 34829 __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi) 34830 __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi) 34831 __v8hi __builtin_arc_vmrb (__v8hi, __v8hi) 34832 __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi) 34833 __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi) 34834 __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi) 34835 __v8hi __builtin_arc_vmulw (__v8hi, __v8hi) 34836 __v8hi __builtin_arc_vnew (__v8hi, __v8hi) 34837 __v8hi __builtin_arc_vor (__v8hi, __v8hi) 34838 __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi) 34839 __v8hi __builtin_arc_vsubw (__v8hi, __v8hi) 34840 __v8hi __builtin_arc_vsummw (__v8hi, __v8hi) 34841 __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi) 34842 __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi) 34843 __v8hi __builtin_arc_vxor (__v8hi, __v8hi) 34844 __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi) 34845 34846 The following take one `__v8hi' and one `int' argument and return a 34847`__v8hi' result: 34848 34849 __v8hi __builtin_arc_vbaddw (__v8hi, int) 34850 __v8hi __builtin_arc_vbmaxw (__v8hi, int) 34851 __v8hi __builtin_arc_vbminw (__v8hi, int) 34852 __v8hi __builtin_arc_vbmulaw (__v8hi, int) 34853 __v8hi __builtin_arc_vbmulfw (__v8hi, int) 34854 __v8hi __builtin_arc_vbmulw (__v8hi, int) 34855 __v8hi __builtin_arc_vbrsubw (__v8hi, int) 34856 __v8hi __builtin_arc_vbsubw (__v8hi, int) 34857 34858 The following take one `__v8hi' argument and one `int' argument which 34859must be a 3-bit compile time constant indicating a register number 34860I0-I7. They return a `__v8hi' result. 34861 __v8hi __builtin_arc_vasrw (__v8hi, const int) 34862 __v8hi __builtin_arc_vsr8 (__v8hi, const int) 34863 __v8hi __builtin_arc_vsr8aw (__v8hi, const int) 34864 34865 The following take one `__v8hi' argument and one `int' argument which 34866must be a 6-bit compile time constant. They return a `__v8hi' result. 34867 __v8hi __builtin_arc_vasrpwbi (__v8hi, const int) 34868 __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int) 34869 __v8hi __builtin_arc_vasrrwi (__v8hi, const int) 34870 __v8hi __builtin_arc_vasrsrwi (__v8hi, const int) 34871 __v8hi __builtin_arc_vasrwi (__v8hi, const int) 34872 __v8hi __builtin_arc_vsr8awi (__v8hi, const int) 34873 __v8hi __builtin_arc_vsr8i (__v8hi, const int) 34874 34875 The following take one `__v8hi' argument and one `int' argument which 34876must be a 8-bit compile time constant. They return a `__v8hi' result. 34877 __v8hi __builtin_arc_vd6tapf (__v8hi, const int) 34878 __v8hi __builtin_arc_vmvaw (__v8hi, const int) 34879 __v8hi __builtin_arc_vmvw (__v8hi, const int) 34880 __v8hi __builtin_arc_vmvzw (__v8hi, const int) 34881 34882 The following take two `int' arguments, the second of which which must 34883be a 8-bit compile time constant. They return a `__v8hi' result: 34884 __v8hi __builtin_arc_vmovaw (int, const int) 34885 __v8hi __builtin_arc_vmovw (int, const int) 34886 __v8hi __builtin_arc_vmovzw (int, const int) 34887 34888 The following take a single `__v8hi' argument and return a `__v8hi' 34889result: 34890 __v8hi __builtin_arc_vabsaw (__v8hi) 34891 __v8hi __builtin_arc_vabsw (__v8hi) 34892 __v8hi __builtin_arc_vaddsuw (__v8hi) 34893 __v8hi __builtin_arc_vexch1 (__v8hi) 34894 __v8hi __builtin_arc_vexch2 (__v8hi) 34895 __v8hi __builtin_arc_vexch4 (__v8hi) 34896 __v8hi __builtin_arc_vsignw (__v8hi) 34897 __v8hi __builtin_arc_vupbaw (__v8hi) 34898 __v8hi __builtin_arc_vupbw (__v8hi) 34899 __v8hi __builtin_arc_vupsbaw (__v8hi) 34900 __v8hi __builtin_arc_vupsbw (__v8hi) 34901 34902 The following take two `int' arguments and return no result: 34903 void __builtin_arc_vdirun (int, int) 34904 void __builtin_arc_vdorun (int, int) 34905 34906 The following take two `int' arguments and return no result. The 34907first argument must a 3-bit compile time constant indicating one of the 34908DR0-DR7 DMA setup channels: 34909 void __builtin_arc_vdiwr (const int, int) 34910 void __builtin_arc_vdowr (const int, int) 34911 34912 The following take an `int' argument and return no result: 34913 void __builtin_arc_vendrec (int) 34914 void __builtin_arc_vrec (int) 34915 void __builtin_arc_vrecrun (int) 34916 void __builtin_arc_vrun (int) 34917 34918 The following take a `__v8hi' argument and two `int' arguments and 34919return a `__v8hi' result. The second argument must be a 3-bit compile 34920time constants, indicating one the registers I0-I7, and the third 34921argument must be an 8-bit compile time constant. 34922 34923 _Note:_ Although the equivalent hardware instructions do not take an 34924SIMD register as an operand, these builtins overwrite the relevant bits 34925of the `__v8hi' register provided as the first argument with the value 34926loaded from the `[Ib, u8]' location in the SDM. 34927 34928 __v8hi __builtin_arc_vld32 (__v8hi, const int, const int) 34929 __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int) 34930 __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int) 34931 __v8hi __builtin_arc_vld64 (__v8hi, const int, const int) 34932 34933 The following take two `int' arguments and return a `__v8hi' result. 34934The first argument must be a 3-bit compile time constants, indicating 34935one the registers I0-I7, and the second argument must be an 8-bit 34936compile time constant. 34937 34938 __v8hi __builtin_arc_vld128 (const int, const int) 34939 __v8hi __builtin_arc_vld64w (const int, const int) 34940 34941 The following take a `__v8hi' argument and two `int' arguments and 34942return no result. The second argument must be a 3-bit compile time 34943constants, indicating one the registers I0-I7, and the third argument 34944must be an 8-bit compile time constant. 34945 34946 void __builtin_arc_vst128 (__v8hi, const int, const int) 34947 void __builtin_arc_vst64 (__v8hi, const int, const int) 34948 34949 The following take a `__v8hi' argument and three `int' arguments and 34950return no result. The second argument must be a 3-bit compile-time 34951constant, identifying the 16-bit sub-register to be stored, the third 34952argument must be a 3-bit compile time constants, indicating one the 34953registers I0-I7, and the fourth argument must be an 8-bit compile time 34954constant. 34955 34956 void __builtin_arc_vst16_n (__v8hi, const int, const int, const int) 34957 void __builtin_arc_vst32_n (__v8hi, const int, const int, const int) 34958 34959 34960File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM C Language Extensions (ACLE), Prev: ARC SIMD Built-in Functions, Up: Target Builtins 34961 349626.58.6 ARM iWMMXt Built-in Functions 34963------------------------------------ 34964 34965These built-in functions are available for the ARM family of processors 34966when the `-mcpu=iwmmxt' switch is used: 34967 34968 typedef int v2si __attribute__ ((vector_size (8))); 34969 typedef short v4hi __attribute__ ((vector_size (8))); 34970 typedef char v8qi __attribute__ ((vector_size (8))); 34971 34972 int __builtin_arm_getwcgr0 (void) 34973 void __builtin_arm_setwcgr0 (int) 34974 int __builtin_arm_getwcgr1 (void) 34975 void __builtin_arm_setwcgr1 (int) 34976 int __builtin_arm_getwcgr2 (void) 34977 void __builtin_arm_setwcgr2 (int) 34978 int __builtin_arm_getwcgr3 (void) 34979 void __builtin_arm_setwcgr3 (int) 34980 int __builtin_arm_textrmsb (v8qi, int) 34981 int __builtin_arm_textrmsh (v4hi, int) 34982 int __builtin_arm_textrmsw (v2si, int) 34983 int __builtin_arm_textrmub (v8qi, int) 34984 int __builtin_arm_textrmuh (v4hi, int) 34985 int __builtin_arm_textrmuw (v2si, int) 34986 v8qi __builtin_arm_tinsrb (v8qi, int, int) 34987 v4hi __builtin_arm_tinsrh (v4hi, int, int) 34988 v2si __builtin_arm_tinsrw (v2si, int, int) 34989 long long __builtin_arm_tmia (long long, int, int) 34990 long long __builtin_arm_tmiabb (long long, int, int) 34991 long long __builtin_arm_tmiabt (long long, int, int) 34992 long long __builtin_arm_tmiaph (long long, int, int) 34993 long long __builtin_arm_tmiatb (long long, int, int) 34994 long long __builtin_arm_tmiatt (long long, int, int) 34995 int __builtin_arm_tmovmskb (v8qi) 34996 int __builtin_arm_tmovmskh (v4hi) 34997 int __builtin_arm_tmovmskw (v2si) 34998 long long __builtin_arm_waccb (v8qi) 34999 long long __builtin_arm_wacch (v4hi) 35000 long long __builtin_arm_waccw (v2si) 35001 v8qi __builtin_arm_waddb (v8qi, v8qi) 35002 v8qi __builtin_arm_waddbss (v8qi, v8qi) 35003 v8qi __builtin_arm_waddbus (v8qi, v8qi) 35004 v4hi __builtin_arm_waddh (v4hi, v4hi) 35005 v4hi __builtin_arm_waddhss (v4hi, v4hi) 35006 v4hi __builtin_arm_waddhus (v4hi, v4hi) 35007 v2si __builtin_arm_waddw (v2si, v2si) 35008 v2si __builtin_arm_waddwss (v2si, v2si) 35009 v2si __builtin_arm_waddwus (v2si, v2si) 35010 v8qi __builtin_arm_walign (v8qi, v8qi, int) 35011 long long __builtin_arm_wand(long long, long long) 35012 long long __builtin_arm_wandn (long long, long long) 35013 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 35014 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 35015 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 35016 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 35017 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 35018 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 35019 v2si __builtin_arm_wcmpeqw (v2si, v2si) 35020 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 35021 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 35022 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 35023 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 35024 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 35025 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 35026 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 35027 long long __builtin_arm_wmacsz (v4hi, v4hi) 35028 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 35029 long long __builtin_arm_wmacuz (v4hi, v4hi) 35030 v4hi __builtin_arm_wmadds (v4hi, v4hi) 35031 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 35032 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 35033 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 35034 v2si __builtin_arm_wmaxsw (v2si, v2si) 35035 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 35036 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 35037 v2si __builtin_arm_wmaxuw (v2si, v2si) 35038 v8qi __builtin_arm_wminsb (v8qi, v8qi) 35039 v4hi __builtin_arm_wminsh (v4hi, v4hi) 35040 v2si __builtin_arm_wminsw (v2si, v2si) 35041 v8qi __builtin_arm_wminub (v8qi, v8qi) 35042 v4hi __builtin_arm_wminuh (v4hi, v4hi) 35043 v2si __builtin_arm_wminuw (v2si, v2si) 35044 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 35045 v4hi __builtin_arm_wmulul (v4hi, v4hi) 35046 v4hi __builtin_arm_wmulum (v4hi, v4hi) 35047 long long __builtin_arm_wor (long long, long long) 35048 v2si __builtin_arm_wpackdss (long long, long long) 35049 v2si __builtin_arm_wpackdus (long long, long long) 35050 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 35051 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 35052 v4hi __builtin_arm_wpackwss (v2si, v2si) 35053 v4hi __builtin_arm_wpackwus (v2si, v2si) 35054 long long __builtin_arm_wrord (long long, long long) 35055 long long __builtin_arm_wrordi (long long, int) 35056 v4hi __builtin_arm_wrorh (v4hi, long long) 35057 v4hi __builtin_arm_wrorhi (v4hi, int) 35058 v2si __builtin_arm_wrorw (v2si, long long) 35059 v2si __builtin_arm_wrorwi (v2si, int) 35060 v2si __builtin_arm_wsadb (v2si, v8qi, v8qi) 35061 v2si __builtin_arm_wsadbz (v8qi, v8qi) 35062 v2si __builtin_arm_wsadh (v2si, v4hi, v4hi) 35063 v2si __builtin_arm_wsadhz (v4hi, v4hi) 35064 v4hi __builtin_arm_wshufh (v4hi, int) 35065 long long __builtin_arm_wslld (long long, long long) 35066 long long __builtin_arm_wslldi (long long, int) 35067 v4hi __builtin_arm_wsllh (v4hi, long long) 35068 v4hi __builtin_arm_wsllhi (v4hi, int) 35069 v2si __builtin_arm_wsllw (v2si, long long) 35070 v2si __builtin_arm_wsllwi (v2si, int) 35071 long long __builtin_arm_wsrad (long long, long long) 35072 long long __builtin_arm_wsradi (long long, int) 35073 v4hi __builtin_arm_wsrah (v4hi, long long) 35074 v4hi __builtin_arm_wsrahi (v4hi, int) 35075 v2si __builtin_arm_wsraw (v2si, long long) 35076 v2si __builtin_arm_wsrawi (v2si, int) 35077 long long __builtin_arm_wsrld (long long, long long) 35078 long long __builtin_arm_wsrldi (long long, int) 35079 v4hi __builtin_arm_wsrlh (v4hi, long long) 35080 v4hi __builtin_arm_wsrlhi (v4hi, int) 35081 v2si __builtin_arm_wsrlw (v2si, long long) 35082 v2si __builtin_arm_wsrlwi (v2si, int) 35083 v8qi __builtin_arm_wsubb (v8qi, v8qi) 35084 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 35085 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 35086 v4hi __builtin_arm_wsubh (v4hi, v4hi) 35087 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 35088 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 35089 v2si __builtin_arm_wsubw (v2si, v2si) 35090 v2si __builtin_arm_wsubwss (v2si, v2si) 35091 v2si __builtin_arm_wsubwus (v2si, v2si) 35092 v4hi __builtin_arm_wunpckehsb (v8qi) 35093 v2si __builtin_arm_wunpckehsh (v4hi) 35094 long long __builtin_arm_wunpckehsw (v2si) 35095 v4hi __builtin_arm_wunpckehub (v8qi) 35096 v2si __builtin_arm_wunpckehuh (v4hi) 35097 long long __builtin_arm_wunpckehuw (v2si) 35098 v4hi __builtin_arm_wunpckelsb (v8qi) 35099 v2si __builtin_arm_wunpckelsh (v4hi) 35100 long long __builtin_arm_wunpckelsw (v2si) 35101 v4hi __builtin_arm_wunpckelub (v8qi) 35102 v2si __builtin_arm_wunpckeluh (v4hi) 35103 long long __builtin_arm_wunpckeluw (v2si) 35104 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 35105 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 35106 v2si __builtin_arm_wunpckihw (v2si, v2si) 35107 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 35108 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 35109 v2si __builtin_arm_wunpckilw (v2si, v2si) 35110 long long __builtin_arm_wxor (long long, long long) 35111 long long __builtin_arm_wzero () 35112 35113 35114File: gcc.info, Node: ARM C Language Extensions (ACLE), Next: ARM Floating Point Status and Control Intrinsics, Prev: ARM iWMMXt Built-in Functions, Up: Target Builtins 35115 351166.58.7 ARM C Language Extensions (ACLE) 35117--------------------------------------- 35118 35119GCC implements extensions for C as described in the ARM C Language 35120Extensions (ACLE) specification, which can be found at 35121`http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf'. 35122 35123 As a part of ACLE, GCC implements extensions for Advanced SIMD as 35124described in the ARM C Language Extensions Specification. The complete 35125list of Advanced SIMD intrinsics can be found at 35126`http://infocenter.arm.com/help/topic/com.arm.doc.ihi0073a/IHI0073A_arm_neon_intrinsics_ref.pdf'. 35127The built-in intrinsics for the Advanced SIMD extension are available 35128when NEON is enabled. 35129 35130 Currently, ARM and AArch64 back ends do not support ACLE 2.0 fully. 35131Both back ends support CRC32 intrinsics from `arm_acle.h'. The ARM 35132back end's 16-bit floating-point Advanced SIMD intrinsics currently 35133comply to ACLE v1.1. AArch64's back end does not have support for 3513416-bit floating point Advanced SIMD intrinsics yet. 35135 35136 See *note ARM Options:: and *note AArch64 Options:: for more 35137information on the availability of extensions. 35138 35139 35140File: gcc.info, Node: ARM Floating Point Status and Control Intrinsics, Next: AVR Built-in Functions, Prev: ARM C Language Extensions (ACLE), Up: Target Builtins 35141 351426.58.8 ARM Floating Point Status and Control Intrinsics 35143------------------------------------------------------- 35144 35145These built-in functions are available for the ARM family of processors 35146with floating-point unit. 35147 35148 unsigned int __builtin_arm_get_fpscr () 35149 void __builtin_arm_set_fpscr (unsigned int) 35150 35151 35152File: gcc.info, Node: AVR Built-in Functions, Next: Blackfin Built-in Functions, Prev: ARM Floating Point Status and Control Intrinsics, Up: Target Builtins 35153 351546.58.9 AVR Built-in Functions 35155----------------------------- 35156 35157For each built-in function for AVR, there is an equally named, 35158uppercase built-in macro defined. That way users can easily query if or 35159if not a specific built-in is implemented or not. For example, if 35160`__builtin_avr_nop' is available the macro `__BUILTIN_AVR_NOP' is 35161defined to `1' and undefined otherwise. 35162 35163 The following built-in functions map to the respective machine 35164instruction, i.e. `nop', `sei', `cli', `sleep', `wdr', `swap', `fmul', 35165`fmuls' resp. `fmulsu'. The three `fmul*' built-ins are implemented as 35166library call if no hardware multiplier is available. 35167 35168 void __builtin_avr_nop (void) 35169 void __builtin_avr_sei (void) 35170 void __builtin_avr_cli (void) 35171 void __builtin_avr_sleep (void) 35172 void __builtin_avr_wdr (void) 35173 unsigned char __builtin_avr_swap (unsigned char) 35174 unsigned int __builtin_avr_fmul (unsigned char, unsigned char) 35175 int __builtin_avr_fmuls (char, char) 35176 int __builtin_avr_fmulsu (char, unsigned char) 35177 35178 In order to delay execution for a specific number of cycles, GCC 35179implements 35180 void __builtin_avr_delay_cycles (unsigned long ticks) 35181 35182`ticks' is the number of ticks to delay execution. Note that this 35183built-in does not take into account the effect of interrupts that might 35184increase delay time. `ticks' must be a compile-time integer constant; 35185delays with a variable number of cycles are not supported. 35186 35187 char __builtin_avr_flash_segment (const __memx void*) 35188 35189This built-in takes a byte address to the 24-bit *note address space: 35190AVR Named Address Spaces. `__memx' and returns the number of the flash 35191segment (the 64 KiB chunk) where the address points to. Counting 35192starts at `0'. If the address does not point to flash memory, return 35193`-1'. 35194 35195 unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val) 35196 35197Insert bits from BITS into VAL and return the resulting value. The 35198nibbles of MAP determine how the insertion is performed: Let X be the 35199N-th nibble of MAP 35200 1. If X is `0xf', then the N-th bit of VAL is returned unaltered. 35201 35202 2. If X is in the range 0...7, then the N-th result bit is set to the 35203 X-th bit of BITS 35204 35205 3. If X is in the range 8...`0xe', then the N-th result bit is 35206 undefined. 35207 35208One typical use case for this built-in is adjusting input and output 35209values to non-contiguous port layouts. Some examples: 35210 35211 // same as val, bits is unused 35212 __builtin_avr_insert_bits (0xffffffff, bits, val) 35213 35214 // same as bits, val is unused 35215 __builtin_avr_insert_bits (0x76543210, bits, val) 35216 35217 // same as rotating bits by 4 35218 __builtin_avr_insert_bits (0x32107654, bits, 0) 35219 35220 // high nibble of result is the high nibble of val 35221 // low nibble of result is the low nibble of bits 35222 __builtin_avr_insert_bits (0xffff3210, bits, val) 35223 35224 // reverse the bit order of bits 35225 __builtin_avr_insert_bits (0x01234567, bits, 0) 35226 35227 35228File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: AVR Built-in Functions, Up: Target Builtins 35229 352306.58.10 Blackfin Built-in Functions 35231----------------------------------- 35232 35233Currently, there are two Blackfin-specific built-in functions. These 35234are used for generating `CSYNC' and `SSYNC' machine insns without using 35235inline assembly; by using these built-in functions the compiler can 35236automatically add workarounds for hardware errata involving these 35237instructions. These functions are named as follows: 35238 35239 void __builtin_bfin_csync (void) 35240 void __builtin_bfin_ssync (void) 35241 35242 35243File: gcc.info, Node: FR-V Built-in Functions, Next: MIPS DSP Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 35244 352456.58.11 FR-V Built-in Functions 35246------------------------------- 35247 35248GCC provides many FR-V-specific built-in functions. In general, these 35249functions are intended to be compatible with those described by `FR-V 35250Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. 35251The two exceptions are `__MDUNPACKH' and `__MBTOHE', the GCC forms of 35252which pass 128-bit values by pointer rather than by value. 35253 35254 Most of the functions are named after specific FR-V instructions. 35255Such functions are said to be "directly mapped" and are summarized here 35256in tabular form. 35257 35258* Menu: 35259 35260* Argument Types:: 35261* Directly-mapped Integer Functions:: 35262* Directly-mapped Media Functions:: 35263* Raw read/write Functions:: 35264* Other Built-in Functions:: 35265 35266 35267File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 35268 352696.58.11.1 Argument Types 35270........................ 35271 35272The arguments to the built-in functions can be divided into three 35273groups: register numbers, compile-time constants and run-time values. 35274In order to make this classification clear at a glance, the arguments 35275and return values are given the following pseudo types: 35276 35277Pseudo type Real C type Constant? Description 35278`uh' `unsigned short' No an unsigned halfword 35279`uw1' `unsigned int' No an unsigned word 35280`sw1' `int' No a signed word 35281`uw2' `unsigned long long' No an unsigned doubleword 35282`sw2' `long long' No a signed doubleword 35283`const' `int' Yes an integer constant 35284`acc' `int' Yes an ACC register number 35285`iacc' `int' Yes an IACC register number 35286 35287 These pseudo types are not defined by GCC, they are simply a notational 35288convenience used in this manual. 35289 35290 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at 35291run time. They correspond to register operands in the underlying FR-V 35292instructions. 35293 35294 `const' arguments represent immediate operands in the underlying FR-V 35295instructions. They must be compile-time constants. 35296 35297 `acc' arguments are evaluated at compile time and specify the number 35298of an accumulator register. For example, an `acc' argument of 2 35299selects the ACC2 register. 35300 35301 `iacc' arguments are similar to `acc' arguments but specify the number 35302of an IACC register. See *note Other Built-in Functions:: for more 35303details. 35304 35305 35306File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 35307 353086.58.11.2 Directly-Mapped Integer Functions 35309........................................... 35310 35311The functions listed below map directly to FR-V I-type instructions. 35312 35313Function prototype Example usage Assembly output 35314`sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C' 35315`sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C' 35316`sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B' 35317`sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C' 35318`void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B' 35319`void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B' 35320`void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B' 35321`sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C' 35322`sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C' 35323`uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C' 35324 35325 35326File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 35327 353286.58.11.3 Directly-Mapped Media Functions 35329......................................... 35330 35331The functions listed below map directly to FR-V M-type instructions. 35332 35333Function prototype Example usage Assembly output 35334`uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B' 35335`void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B' 35336`sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C' 35337`uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C' 35338`uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C' 35339`void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B' 35340`uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C' 35341`uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B' 35342`void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B' 35343`void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A' 35344`void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA' 35345`uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C' 35346`uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C' 35347`uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C' 35348`uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C' 35349`void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C' 35350`void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C' 35351`void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C' 35352`void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C' 35353`uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C' 35354`uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C' 35355`void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B' 35356`void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B' 35357`uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C' 35358`uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C' 35359`uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C' 35360`void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B' 35361`void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B' 35362`uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C' 35363`uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C' 35364`uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C' 35365`sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B' 35366`uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B' 35367`sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B' 35368`uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B' 35369`sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B' 35370`uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B' 35371`void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C' 35372`void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C' 35373`void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C' 35374`void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C' 35375`void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C' 35376`void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C' 35377`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C' 35378`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C' 35379`uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B' 35380`uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C' 35381`uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C' 35382`sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C' 35383`uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C' 35384`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C' 35385`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C' 35386`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C' 35387`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C' 35388`sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C' 35389`sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C' 35390`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C' 35391`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C' 35392`void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C' 35393sw2)' 35394`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C' 35395`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C' 35396`void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C' 35397sw2)' 35398`void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C' 35399uw2)' 35400`sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C' 35401`uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C' 35402`sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C' 35403`sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C' 35404`uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C' 35405`void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C' 35406sw2)' 35407`void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C' 35408sw2)' 35409`uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B' 35410`uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B' 35411`uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C' 35412`uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C' 35413`sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C' 35414`uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C' 35415`uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C' 35416`sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C' 35417`uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C' 35418`void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B' 35419`sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C' 35420`uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C' 35421`void __MTRAP (void)' `__MTRAP ()' `MTRAP' 35422`uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B' 35423`uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C' 35424`void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B' 35425`void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B' 35426`uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C' 35427 35428 35429File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 35430 354316.58.11.4 Raw Read/Write Functions 35432.................................. 35433 35434This sections describes built-in functions related to read and write 35435instructions to access memory. These functions generate `membar' 35436instructions to flush the I/O load and stores where appropriate, as 35437described in Fujitsu's manual described above. 35438 35439`unsigned char __builtin_read8 (void *DATA)' 35440 35441`unsigned short __builtin_read16 (void *DATA)' 35442 35443`unsigned long __builtin_read32 (void *DATA)' 35444 35445`unsigned long long __builtin_read64 (void *DATA)' 35446 35447`void __builtin_write8 (void *DATA, unsigned char DATUM)' 35448 35449`void __builtin_write16 (void *DATA, unsigned short DATUM)' 35450 35451`void __builtin_write32 (void *DATA, unsigned long DATUM)' 35452 35453`void __builtin_write64 (void *DATA, unsigned long long DATUM)' 35454 35455 35456File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 35457 354586.58.11.5 Other Built-in Functions 35459.................................. 35460 35461This section describes built-in functions that are not named after a 35462specific FR-V instruction. 35463 35464`sw2 __IACCreadll (iacc REG)' 35465 Return the full 64-bit value of IACC0. The REG argument is 35466 reserved for future expansion and must be 0. 35467 35468`sw1 __IACCreadl (iacc REG)' 35469 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 35470 Other values of REG are rejected as invalid. 35471 35472`void __IACCsetll (iacc REG, sw2 X)' 35473 Set the full 64-bit value of IACC0 to X. The REG argument is 35474 reserved for future expansion and must be 0. 35475 35476`void __IACCsetl (iacc REG, sw1 X)' 35477 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 35478 values of REG are rejected as invalid. 35479 35480`void __data_prefetch0 (const void *X)' 35481 Use the `dcpl' instruction to load the contents of address X into 35482 the data cache. 35483 35484`void __data_prefetch (const void *X)' 35485 Use the `nldub' instruction to load the contents of address X into 35486 the data cache. The instruction is issued in slot I1. 35487 35488 35489File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: FR-V Built-in Functions, Up: Target Builtins 35490 354916.58.12 MIPS DSP Built-in Functions 35492----------------------------------- 35493 35494The MIPS DSP Application-Specific Extension (ASE) includes new 35495instructions that are designed to improve the performance of DSP and 35496media applications. It provides instructions that operate on packed 354978-bit/16-bit integer data, Q7, Q15 and Q31 fractional data. 35498 35499 GCC supports MIPS DSP operations using both the generic vector 35500extensions (*note Vector Extensions::) and a collection of 35501MIPS-specific built-in functions. Both kinds of support are enabled by 35502the `-mdsp' command-line option. 35503 35504 Revision 2 of the ASE was introduced in the second half of 2006. This 35505revision adds extra instructions to the original ASE, but is otherwise 35506backwards-compatible with it. You can select revision 2 using the 35507command-line option `-mdspr2'; this option implies `-mdsp'. 35508 35509 The SCOUNT and POS bits of the DSP control register are global. The 35510WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and 35511POS bits. During optimization, the compiler does not delete these 35512instructions and it does not delete calls to functions containing these 35513instructions. 35514 35515 At present, GCC only provides support for operations on 32-bit 35516vectors. The vector type associated with 8-bit integer data is usually 35517called `v4i8', the vector type associated with Q7 is usually called 35518`v4q7', the vector type associated with 16-bit integer data is usually 35519called `v2i16', and the vector type associated with Q15 is usually 35520called `v2q15'. They can be defined in C as follows: 35521 35522 typedef signed char v4i8 __attribute__ ((vector_size(4))); 35523 typedef signed char v4q7 __attribute__ ((vector_size(4))); 35524 typedef short v2i16 __attribute__ ((vector_size(4))); 35525 typedef short v2q15 __attribute__ ((vector_size(4))); 35526 35527 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same 35528way as aggregates. For example: 35529 35530 v4i8 a = {1, 2, 3, 4}; 35531 v4i8 b; 35532 b = (v4i8) {5, 6, 7, 8}; 35533 35534 v2q15 c = {0x0fcb, 0x3a75}; 35535 v2q15 d; 35536 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 35537 35538 _Note:_ The CPU's endianness determines the order in which values are 35539packed. On little-endian targets, the first value is the least 35540significant and the last value is the most significant. The opposite 35541order applies to big-endian targets. For example, the code above sets 35542the lowest byte of `a' to `1' on little-endian targets and `4' on 35543big-endian targets. 35544 35545 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer 35546representation. As shown in this example, the integer representation 35547of a Q7 value can be obtained by multiplying the fractional value by 35548`0x1.0p7'. The equivalent for Q15 values is to multiply by `0x1.0p15'. 35549The equivalent for Q31 values is to multiply by `0x1.0p31'. 35550 35551 The table below lists the `v4i8' and `v2q15' operations for which 35552hardware support exists. `a' and `b' are `v4i8' values, and `c' and 35553`d' are `v2q15' values. 35554 35555C code MIPS instruction 35556`a + b' `addu.qb' 35557`c + d' `addq.ph' 35558`a - b' `subu.qb' 35559`c - d' `subq.ph' 35560 35561 The table below lists the `v2i16' operation for which hardware support 35562exists for the DSP ASE REV 2. `e' and `f' are `v2i16' values. 35563 35564C code MIPS instruction 35565`e * f' `mul.ph' 35566 35567 It is easier to describe the DSP built-in functions if we first define 35568the following types: 35569 35570 typedef int q31; 35571 typedef int i32; 35572 typedef unsigned int ui32; 35573 typedef long long a64; 35574 35575 `q31' and `i32' are actually the same as `int', but we use `q31' to 35576indicate a Q31 fractional value and `i32' to indicate a 32-bit integer 35577value. Similarly, `a64' is the same as `long long', but we use `a64' 35578to indicate values that are placed in one of the four DSP accumulators 35579(`$ac0', `$ac1', `$ac2' or `$ac3'). 35580 35581 Also, some built-in functions prefer or require immediate numbers as 35582parameters, because the corresponding DSP instructions accept both 35583immediate numbers and register operands, or accept immediate numbers 35584only. The immediate parameters are listed as follows. 35585 35586 imm0_3: 0 to 3. 35587 imm0_7: 0 to 7. 35588 imm0_15: 0 to 15. 35589 imm0_31: 0 to 31. 35590 imm0_63: 0 to 63. 35591 imm0_255: 0 to 255. 35592 imm_n32_31: -32 to 31. 35593 imm_n512_511: -512 to 511. 35594 35595 The following built-in functions map directly to a particular MIPS DSP 35596instruction. Please refer to the architecture specification for 35597details on what each instruction does. 35598 35599 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 35600 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 35601 q31 __builtin_mips_addq_s_w (q31, q31) 35602 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 35603 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 35604 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 35605 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 35606 q31 __builtin_mips_subq_s_w (q31, q31) 35607 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 35608 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 35609 i32 __builtin_mips_addsc (i32, i32) 35610 i32 __builtin_mips_addwc (i32, i32) 35611 i32 __builtin_mips_modsub (i32, i32) 35612 i32 __builtin_mips_raddu_w_qb (v4i8) 35613 v2q15 __builtin_mips_absq_s_ph (v2q15) 35614 q31 __builtin_mips_absq_s_w (q31) 35615 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 35616 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 35617 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 35618 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 35619 q31 __builtin_mips_preceq_w_phl (v2q15) 35620 q31 __builtin_mips_preceq_w_phr (v2q15) 35621 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 35622 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 35623 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 35624 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 35625 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 35626 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 35627 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 35628 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 35629 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 35630 v4i8 __builtin_mips_shll_qb (v4i8, i32) 35631 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 35632 v2q15 __builtin_mips_shll_ph (v2q15, i32) 35633 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 35634 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 35635 q31 __builtin_mips_shll_s_w (q31, imm0_31) 35636 q31 __builtin_mips_shll_s_w (q31, i32) 35637 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 35638 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 35639 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 35640 v2q15 __builtin_mips_shra_ph (v2q15, i32) 35641 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 35642 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 35643 q31 __builtin_mips_shra_r_w (q31, imm0_31) 35644 q31 __builtin_mips_shra_r_w (q31, i32) 35645 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 35646 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 35647 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 35648 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 35649 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 35650 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 35651 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 35652 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 35653 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 35654 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 35655 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 35656 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 35657 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 35658 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 35659 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 35660 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 35661 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 35662 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 35663 i32 __builtin_mips_bitrev (i32) 35664 i32 __builtin_mips_insv (i32, i32) 35665 v4i8 __builtin_mips_repl_qb (imm0_255) 35666 v4i8 __builtin_mips_repl_qb (i32) 35667 v2q15 __builtin_mips_repl_ph (imm_n512_511) 35668 v2q15 __builtin_mips_repl_ph (i32) 35669 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 35670 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 35671 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 35672 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 35673 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 35674 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 35675 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 35676 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 35677 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 35678 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 35679 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 35680 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 35681 i32 __builtin_mips_extr_w (a64, imm0_31) 35682 i32 __builtin_mips_extr_w (a64, i32) 35683 i32 __builtin_mips_extr_r_w (a64, imm0_31) 35684 i32 __builtin_mips_extr_s_h (a64, i32) 35685 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 35686 i32 __builtin_mips_extr_rs_w (a64, i32) 35687 i32 __builtin_mips_extr_s_h (a64, imm0_31) 35688 i32 __builtin_mips_extr_r_w (a64, i32) 35689 i32 __builtin_mips_extp (a64, imm0_31) 35690 i32 __builtin_mips_extp (a64, i32) 35691 i32 __builtin_mips_extpdp (a64, imm0_31) 35692 i32 __builtin_mips_extpdp (a64, i32) 35693 a64 __builtin_mips_shilo (a64, imm_n32_31) 35694 a64 __builtin_mips_shilo (a64, i32) 35695 a64 __builtin_mips_mthlip (a64, i32) 35696 void __builtin_mips_wrdsp (i32, imm0_63) 35697 i32 __builtin_mips_rddsp (imm0_63) 35698 i32 __builtin_mips_lbux (void *, i32) 35699 i32 __builtin_mips_lhx (void *, i32) 35700 i32 __builtin_mips_lwx (void *, i32) 35701 a64 __builtin_mips_ldx (void *, i32) [MIPS64 only] 35702 i32 __builtin_mips_bposge32 (void) 35703 a64 __builtin_mips_madd (a64, i32, i32); 35704 a64 __builtin_mips_maddu (a64, ui32, ui32); 35705 a64 __builtin_mips_msub (a64, i32, i32); 35706 a64 __builtin_mips_msubu (a64, ui32, ui32); 35707 a64 __builtin_mips_mult (i32, i32); 35708 a64 __builtin_mips_multu (ui32, ui32); 35709 35710 The following built-in functions map directly to a particular MIPS DSP 35711REV 2 instruction. Please refer to the architecture specification for 35712details on what each instruction does. 35713 35714 v4q7 __builtin_mips_absq_s_qb (v4q7); 35715 v2i16 __builtin_mips_addu_ph (v2i16, v2i16); 35716 v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16); 35717 v4i8 __builtin_mips_adduh_qb (v4i8, v4i8); 35718 v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8); 35719 i32 __builtin_mips_append (i32, i32, imm0_31); 35720 i32 __builtin_mips_balign (i32, i32, imm0_3); 35721 i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8); 35722 i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8); 35723 i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8); 35724 a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16); 35725 a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16); 35726 v2i16 __builtin_mips_mul_ph (v2i16, v2i16); 35727 v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16); 35728 q31 __builtin_mips_mulq_rs_w (q31, q31); 35729 v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15); 35730 q31 __builtin_mips_mulq_s_w (q31, q31); 35731 a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16); 35732 v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16); 35733 v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31); 35734 v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31); 35735 i32 __builtin_mips_prepend (i32, i32, imm0_31); 35736 v4i8 __builtin_mips_shra_qb (v4i8, imm0_7); 35737 v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7); 35738 v4i8 __builtin_mips_shra_qb (v4i8, i32); 35739 v4i8 __builtin_mips_shra_r_qb (v4i8, i32); 35740 v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15); 35741 v2i16 __builtin_mips_shrl_ph (v2i16, i32); 35742 v2i16 __builtin_mips_subu_ph (v2i16, v2i16); 35743 v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16); 35744 v4i8 __builtin_mips_subuh_qb (v4i8, v4i8); 35745 v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8); 35746 v2q15 __builtin_mips_addqh_ph (v2q15, v2q15); 35747 v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15); 35748 q31 __builtin_mips_addqh_w (q31, q31); 35749 q31 __builtin_mips_addqh_r_w (q31, q31); 35750 v2q15 __builtin_mips_subqh_ph (v2q15, v2q15); 35751 v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15); 35752 q31 __builtin_mips_subqh_w (q31, q31); 35753 q31 __builtin_mips_subqh_r_w (q31, q31); 35754 a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16); 35755 a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16); 35756 a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15); 35757 a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15); 35758 a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15); 35759 a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15); 35760 35761 35762File: gcc.info, Node: MIPS Paired-Single Support, Next: MIPS Loongson Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 35763 357646.58.13 MIPS Paired-Single Support 35765---------------------------------- 35766 35767The MIPS64 architecture includes a number of instructions that operate 35768on pairs of single-precision floating-point values. Each pair is 35769packed into a 64-bit floating-point register, with one element being 35770designated the "upper half" and the other being designated the "lower 35771half". 35772 35773 GCC supports paired-single operations using both the generic vector 35774extensions (*note Vector Extensions::) and a collection of 35775MIPS-specific built-in functions. Both kinds of support are enabled by 35776the `-mpaired-single' command-line option. 35777 35778 The vector type associated with paired-single values is usually called 35779`v2sf'. It can be defined in C as follows: 35780 35781 typedef float v2sf __attribute__ ((vector_size (8))); 35782 35783 `v2sf' values are initialized in the same way as aggregates. For 35784example: 35785 35786 v2sf a = {1.5, 9.1}; 35787 v2sf b; 35788 float e, f; 35789 b = (v2sf) {e, f}; 35790 35791 _Note:_ The CPU's endianness determines which value is stored in the 35792upper half of a register and which value is stored in the lower half. 35793On little-endian targets, the first value is the lower one and the 35794second value is the upper one. The opposite order applies to 35795big-endian targets. For example, the code above sets the lower half of 35796`a' to `1.5' on little-endian targets and `9.1' on big-endian targets. 35797 35798 35799File: gcc.info, Node: MIPS Loongson Built-in Functions, Next: Other MIPS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 35800 358016.58.14 MIPS Loongson Built-in Functions 35802---------------------------------------- 35803 35804GCC provides intrinsics to access the SIMD instructions provided by the 35805ST Microelectronics Loongson-2E and -2F processors. These intrinsics, 35806available after inclusion of the `loongson.h' header file, operate on 35807the following 64-bit vector types: 35808 35809 * `uint8x8_t', a vector of eight unsigned 8-bit integers; 35810 35811 * `uint16x4_t', a vector of four unsigned 16-bit integers; 35812 35813 * `uint32x2_t', a vector of two unsigned 32-bit integers; 35814 35815 * `int8x8_t', a vector of eight signed 8-bit integers; 35816 35817 * `int16x4_t', a vector of four signed 16-bit integers; 35818 35819 * `int32x2_t', a vector of two signed 32-bit integers. 35820 35821 The intrinsics provided are listed below; each is named after the 35822machine instruction to which it corresponds, with suffixes added as 35823appropriate to distinguish intrinsics that expand to the same machine 35824instruction yet have different argument types. Refer to the 35825architecture documentation for a description of the functionality of 35826each instruction. 35827 35828 int16x4_t packsswh (int32x2_t s, int32x2_t t); 35829 int8x8_t packsshb (int16x4_t s, int16x4_t t); 35830 uint8x8_t packushb (uint16x4_t s, uint16x4_t t); 35831 uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t); 35832 uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t); 35833 uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t); 35834 int32x2_t paddw_s (int32x2_t s, int32x2_t t); 35835 int16x4_t paddh_s (int16x4_t s, int16x4_t t); 35836 int8x8_t paddb_s (int8x8_t s, int8x8_t t); 35837 uint64_t paddd_u (uint64_t s, uint64_t t); 35838 int64_t paddd_s (int64_t s, int64_t t); 35839 int16x4_t paddsh (int16x4_t s, int16x4_t t); 35840 int8x8_t paddsb (int8x8_t s, int8x8_t t); 35841 uint16x4_t paddush (uint16x4_t s, uint16x4_t t); 35842 uint8x8_t paddusb (uint8x8_t s, uint8x8_t t); 35843 uint64_t pandn_ud (uint64_t s, uint64_t t); 35844 uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t); 35845 uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t); 35846 uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t); 35847 int64_t pandn_sd (int64_t s, int64_t t); 35848 int32x2_t pandn_sw (int32x2_t s, int32x2_t t); 35849 int16x4_t pandn_sh (int16x4_t s, int16x4_t t); 35850 int8x8_t pandn_sb (int8x8_t s, int8x8_t t); 35851 uint16x4_t pavgh (uint16x4_t s, uint16x4_t t); 35852 uint8x8_t pavgb (uint8x8_t s, uint8x8_t t); 35853 uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t); 35854 uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t); 35855 uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t); 35856 int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t); 35857 int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t); 35858 int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t); 35859 uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t); 35860 uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t); 35861 uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t); 35862 int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t); 35863 int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t); 35864 int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t); 35865 uint16x4_t pextrh_u (uint16x4_t s, int field); 35866 int16x4_t pextrh_s (int16x4_t s, int field); 35867 uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t); 35868 uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t); 35869 uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t); 35870 uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t); 35871 int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t); 35872 int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t); 35873 int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t); 35874 int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t); 35875 int32x2_t pmaddhw (int16x4_t s, int16x4_t t); 35876 int16x4_t pmaxsh (int16x4_t s, int16x4_t t); 35877 uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t); 35878 int16x4_t pminsh (int16x4_t s, int16x4_t t); 35879 uint8x8_t pminub (uint8x8_t s, uint8x8_t t); 35880 uint8x8_t pmovmskb_u (uint8x8_t s); 35881 int8x8_t pmovmskb_s (int8x8_t s); 35882 uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t); 35883 int16x4_t pmulhh (int16x4_t s, int16x4_t t); 35884 int16x4_t pmullh (int16x4_t s, int16x4_t t); 35885 int64_t pmuluw (uint32x2_t s, uint32x2_t t); 35886 uint8x8_t pasubub (uint8x8_t s, uint8x8_t t); 35887 uint16x4_t biadd (uint8x8_t s); 35888 uint16x4_t psadbh (uint8x8_t s, uint8x8_t t); 35889 uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order); 35890 int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order); 35891 uint16x4_t psllh_u (uint16x4_t s, uint8_t amount); 35892 int16x4_t psllh_s (int16x4_t s, uint8_t amount); 35893 uint32x2_t psllw_u (uint32x2_t s, uint8_t amount); 35894 int32x2_t psllw_s (int32x2_t s, uint8_t amount); 35895 uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount); 35896 int16x4_t psrlh_s (int16x4_t s, uint8_t amount); 35897 uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount); 35898 int32x2_t psrlw_s (int32x2_t s, uint8_t amount); 35899 uint16x4_t psrah_u (uint16x4_t s, uint8_t amount); 35900 int16x4_t psrah_s (int16x4_t s, uint8_t amount); 35901 uint32x2_t psraw_u (uint32x2_t s, uint8_t amount); 35902 int32x2_t psraw_s (int32x2_t s, uint8_t amount); 35903 uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t); 35904 uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t); 35905 uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t); 35906 int32x2_t psubw_s (int32x2_t s, int32x2_t t); 35907 int16x4_t psubh_s (int16x4_t s, int16x4_t t); 35908 int8x8_t psubb_s (int8x8_t s, int8x8_t t); 35909 uint64_t psubd_u (uint64_t s, uint64_t t); 35910 int64_t psubd_s (int64_t s, int64_t t); 35911 int16x4_t psubsh (int16x4_t s, int16x4_t t); 35912 int8x8_t psubsb (int8x8_t s, int8x8_t t); 35913 uint16x4_t psubush (uint16x4_t s, uint16x4_t t); 35914 uint8x8_t psubusb (uint8x8_t s, uint8x8_t t); 35915 uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t); 35916 uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t); 35917 uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t); 35918 int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t); 35919 int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t); 35920 int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t); 35921 uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t); 35922 uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t); 35923 uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t); 35924 int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t); 35925 int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t); 35926 int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t); 35927 35928* Menu: 35929 35930* Paired-Single Arithmetic:: 35931* Paired-Single Built-in Functions:: 35932* MIPS-3D Built-in Functions:: 35933 35934 35935File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 35936 359376.58.14.1 Paired-Single Arithmetic 35938.................................. 35939 35940The table below lists the `v2sf' operations for which hardware support 35941exists. `a', `b' and `c' are `v2sf' values and `x' is an integral 35942value. 35943 35944C code MIPS instruction 35945`a + b' `add.ps' 35946`a - b' `sub.ps' 35947`-a' `neg.ps' 35948`a * b' `mul.ps' 35949`a * b + c' `madd.ps' 35950`a * b - c' `msub.ps' 35951`-(a * b + c)' `nmadd.ps' 35952`-(a * b - c)' `nmsub.ps' 35953`x ? a : b' `movn.ps'/`movz.ps' 35954 35955 Note that the multiply-accumulate instructions can be disabled using 35956the command-line option `-mno-fused-madd'. 35957 35958 35959File: gcc.info, Node: Paired-Single Built-in Functions, Next: MIPS-3D Built-in Functions, Prev: Paired-Single Arithmetic, Up: MIPS Loongson Built-in Functions 35960 359616.58.14.2 Paired-Single Built-in Functions 35962.......................................... 35963 35964The following paired-single functions map directly to a particular MIPS 35965instruction. Please refer to the architecture specification for 35966details on what each instruction does. 35967 35968`v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 35969 Pair lower lower (`pll.ps'). 35970 35971`v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 35972 Pair upper lower (`pul.ps'). 35973 35974`v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 35975 Pair lower upper (`plu.ps'). 35976 35977`v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 35978 Pair upper upper (`puu.ps'). 35979 35980`v2sf __builtin_mips_cvt_ps_s (float, float)' 35981 Convert pair to paired single (`cvt.ps.s'). 35982 35983`float __builtin_mips_cvt_s_pl (v2sf)' 35984 Convert pair lower to single (`cvt.s.pl'). 35985 35986`float __builtin_mips_cvt_s_pu (v2sf)' 35987 Convert pair upper to single (`cvt.s.pu'). 35988 35989`v2sf __builtin_mips_abs_ps (v2sf)' 35990 Absolute value (`abs.ps'). 35991 35992`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 35993 Align variable (`alnv.ps'). 35994 35995 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 35996 otherwise the result is unpredictable. Please read the 35997 instruction description for details. 35998 35999 The following multi-instruction functions are also available. In each 36000case, COND can be any of the 16 floating-point conditions: `f', `un', 36001`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 36002`lt', `nge', `le' or `ngt'. 36003 36004`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 36005`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 36006 Conditional move based on floating-point comparison (`c.COND.ps', 36007 `movt.ps'/`movf.ps'). 36008 36009 The `movt' functions return the value X computed by: 36010 36011 c.COND.ps CC,A,B 36012 mov.ps X,C 36013 movt.ps X,D,CC 36014 36015 The `movf' functions are similar but use `movf.ps' instead of 36016 `movt.ps'. 36017 36018`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 36019`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 36020 Comparison of two paired-single values (`c.COND.ps', 36021 `bc1t'/`bc1f'). 36022 36023 These functions compare A and B using `c.COND.ps' and return 36024 either the upper or lower half of the result. For example: 36025 36026 v2sf a, b; 36027 if (__builtin_mips_upper_c_eq_ps (a, b)) 36028 upper_halves_are_equal (); 36029 else 36030 upper_halves_are_unequal (); 36031 36032 if (__builtin_mips_lower_c_eq_ps (a, b)) 36033 lower_halves_are_equal (); 36034 else 36035 lower_halves_are_unequal (); 36036 36037 36038File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 36039 360406.58.14.3 MIPS-3D Built-in Functions 36041.................................... 36042 36043The MIPS-3D Application-Specific Extension (ASE) includes additional 36044paired-single instructions that are designed to improve the performance 36045of 3D graphics operations. Support for these instructions is controlled 36046by the `-mips3d' command-line option. 36047 36048 The functions listed below map directly to a particular MIPS-3D 36049instruction. Please refer to the architecture specification for more 36050details on what each instruction does. 36051 36052`v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 36053 Reduction add (`addr.ps'). 36054 36055`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 36056 Reduction multiply (`mulr.ps'). 36057 36058`v2sf __builtin_mips_cvt_pw_ps (v2sf)' 36059 Convert paired single to paired word (`cvt.pw.ps'). 36060 36061`v2sf __builtin_mips_cvt_ps_pw (v2sf)' 36062 Convert paired word to paired single (`cvt.ps.pw'). 36063 36064`float __builtin_mips_recip1_s (float)' 36065`double __builtin_mips_recip1_d (double)' 36066`v2sf __builtin_mips_recip1_ps (v2sf)' 36067 Reduced-precision reciprocal (sequence step 1) (`recip1.FMT'). 36068 36069`float __builtin_mips_recip2_s (float, float)' 36070`double __builtin_mips_recip2_d (double, double)' 36071`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 36072 Reduced-precision reciprocal (sequence step 2) (`recip2.FMT'). 36073 36074`float __builtin_mips_rsqrt1_s (float)' 36075`double __builtin_mips_rsqrt1_d (double)' 36076`v2sf __builtin_mips_rsqrt1_ps (v2sf)' 36077 Reduced-precision reciprocal square root (sequence step 1) 36078 (`rsqrt1.FMT'). 36079 36080`float __builtin_mips_rsqrt2_s (float, float)' 36081`double __builtin_mips_rsqrt2_d (double, double)' 36082`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 36083 Reduced-precision reciprocal square root (sequence step 2) 36084 (`rsqrt2.FMT'). 36085 36086 The following multi-instruction functions are also available. In each 36087case, COND can be any of the 16 floating-point conditions: `f', `un', 36088`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 36089`lt', `nge', `le' or `ngt'. 36090 36091`int __builtin_mips_cabs_COND_s (float A, float B)' 36092`int __builtin_mips_cabs_COND_d (double A, double B)' 36093 Absolute comparison of two scalar values (`cabs.COND.FMT', 36094 `bc1t'/`bc1f'). 36095 36096 These functions compare A and B using `cabs.COND.s' or 36097 `cabs.COND.d' and return the result as a boolean value. For 36098 example: 36099 36100 float a, b; 36101 if (__builtin_mips_cabs_eq_s (a, b)) 36102 true (); 36103 else 36104 false (); 36105 36106`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 36107`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 36108 Absolute comparison of two paired-single values (`cabs.COND.ps', 36109 `bc1t'/`bc1f'). 36110 36111 These functions compare A and B using `cabs.COND.ps' and return 36112 either the upper or lower half of the result. For example: 36113 36114 v2sf a, b; 36115 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 36116 upper_halves_are_equal (); 36117 else 36118 upper_halves_are_unequal (); 36119 36120 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 36121 lower_halves_are_equal (); 36122 else 36123 lower_halves_are_unequal (); 36124 36125`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 36126`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 36127 Conditional move based on absolute comparison (`cabs.COND.ps', 36128 `movt.ps'/`movf.ps'). 36129 36130 The `movt' functions return the value X computed by: 36131 36132 cabs.COND.ps CC,A,B 36133 mov.ps X,C 36134 movt.ps X,D,CC 36135 36136 The `movf' functions are similar but use `movf.ps' instead of 36137 `movt.ps'. 36138 36139`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 36140`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 36141`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 36142`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 36143 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps', 36144 `bc1any2t'/`bc1any2f'). 36145 36146 These functions compare A and B using `c.COND.ps' or 36147 `cabs.COND.ps'. The `any' forms return true if either result is 36148 true and the `all' forms return true if both results are true. 36149 For example: 36150 36151 v2sf a, b; 36152 if (__builtin_mips_any_c_eq_ps (a, b)) 36153 one_is_true (); 36154 else 36155 both_are_false (); 36156 36157 if (__builtin_mips_all_c_eq_ps (a, b)) 36158 both_are_true (); 36159 else 36160 one_is_false (); 36161 36162`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 36163`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 36164`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 36165`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 36166 Comparison of four paired-single values 36167 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f'). 36168 36169 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A 36170 with B and to compare C with D. The `any' forms return true if 36171 any of the four results are true and the `all' forms return true 36172 if all four results are true. For example: 36173 36174 v2sf a, b, c, d; 36175 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 36176 some_are_true (); 36177 else 36178 all_are_false (); 36179 36180 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 36181 all_are_true (); 36182 else 36183 some_are_false (); 36184 36185 36186File: gcc.info, Node: Other MIPS Built-in Functions, Next: MSP430 Built-in Functions, Prev: MIPS Loongson Built-in Functions, Up: Target Builtins 36187 361886.58.15 Other MIPS Built-in Functions 36189------------------------------------- 36190 36191GCC provides other MIPS-specific built-in functions: 36192 36193`void __builtin_mips_cache (int OP, const volatile void *ADDR)' 36194 Insert a `cache' instruction with operands OP and ADDR. GCC 36195 defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE' 36196 when this function is available. 36197 36198`unsigned int __builtin_mips_get_fcsr (void)' 36199`void __builtin_mips_set_fcsr (unsigned int VALUE)' 36200 Get and set the contents of the floating-point control and status 36201 register (FPU control register 31). These functions are only 36202 available in hard-float code but can be called in both MIPS16 and 36203 non-MIPS16 contexts. 36204 36205 `__builtin_mips_set_fcsr' can be used to change any bit of the 36206 register except the condition codes, which GCC assumes are 36207 preserved. 36208 36209 36210File: gcc.info, Node: MSP430 Built-in Functions, Next: NDS32 Built-in Functions, Prev: Other MIPS Built-in Functions, Up: Target Builtins 36211 362126.58.16 MSP430 Built-in Functions 36213--------------------------------- 36214 36215GCC provides a couple of special builtin functions to aid in the 36216writing of interrupt handlers in C. 36217 36218`__bic_SR_register_on_exit (int MASK)' 36219 This clears the indicated bits in the saved copy of the status 36220 register currently residing on the stack. This only works inside 36221 interrupt handlers and the changes to the status register will 36222 only take affect once the handler returns. 36223 36224`__bis_SR_register_on_exit (int MASK)' 36225 This sets the indicated bits in the saved copy of the status 36226 register currently residing on the stack. This only works inside 36227 interrupt handlers and the changes to the status register will 36228 only take affect once the handler returns. 36229 36230`__delay_cycles (long long CYCLES)' 36231 This inserts an instruction sequence that takes exactly CYCLES 36232 cycles (between 0 and about 17E9) to complete. The inserted 36233 sequence may use jumps, loops, or no-ops, and does not interfere 36234 with any other instructions. Note that CYCLES must be a 36235 compile-time constant integer - that is, you must pass a number, 36236 not a variable that may be optimized to a constant later. The 36237 number of cycles delayed by this builtin is exact. 36238 36239 36240File: gcc.info, Node: NDS32 Built-in Functions, Next: picoChip Built-in Functions, Prev: MSP430 Built-in Functions, Up: Target Builtins 36241 362426.58.17 NDS32 Built-in Functions 36243-------------------------------- 36244 36245These built-in functions are available for the NDS32 target: 36246 36247 -- Built-in Function: void __builtin_nds32_isync (int *ADDR) 36248 Insert an ISYNC instruction into the instruction stream where ADDR 36249 is an instruction address for serialization. 36250 36251 -- Built-in Function: void __builtin_nds32_isb (void) 36252 Insert an ISB instruction into the instruction stream. 36253 36254 -- Built-in Function: int __builtin_nds32_mfsr (int SR) 36255 Return the content of a system register which is mapped by SR. 36256 36257 -- Built-in Function: int __builtin_nds32_mfusr (int USR) 36258 Return the content of a user space register which is mapped by USR. 36259 36260 -- Built-in Function: void __builtin_nds32_mtsr (int VALUE, int SR) 36261 Move the VALUE to a system register which is mapped by SR. 36262 36263 -- Built-in Function: void __builtin_nds32_mtusr (int VALUE, int USR) 36264 Move the VALUE to a user space register which is mapped by USR. 36265 36266 -- Built-in Function: void __builtin_nds32_setgie_en (void) 36267 Enable global interrupt. 36268 36269 -- Built-in Function: void __builtin_nds32_setgie_dis (void) 36270 Disable global interrupt. 36271 36272 36273File: gcc.info, Node: picoChip Built-in Functions, Next: PowerPC Built-in Functions, Prev: NDS32 Built-in Functions, Up: Target Builtins 36274 362756.58.18 picoChip Built-in Functions 36276----------------------------------- 36277 36278GCC provides an interface to selected machine instructions from the 36279picoChip instruction set. 36280 36281`int __builtin_sbc (int VALUE)' 36282 Sign bit count. Return the number of consecutive bits in VALUE 36283 that have the same value as the sign bit. The result is the 36284 number of leading sign bits minus one, giving the number of 36285 redundant sign bits in VALUE. 36286 36287`int __builtin_byteswap (int VALUE)' 36288 Byte swap. Return the result of swapping the upper and lower 36289 bytes of VALUE. 36290 36291`int __builtin_brev (int VALUE)' 36292 Bit reversal. Return the result of reversing the bits in VALUE. 36293 Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so 36294 on. 36295 36296`int __builtin_adds (int X, int Y)' 36297 Saturating addition. Return the result of adding X and Y, storing 36298 the value 32767 if the result overflows. 36299 36300`int __builtin_subs (int X, int Y)' 36301 Saturating subtraction. Return the result of subtracting Y from 36302 X, storing the value -32768 if the result overflows. 36303 36304`void __builtin_halt (void)' 36305 Halt. The processor stops execution. This built-in is useful for 36306 implementing assertions. 36307 36308 36309 36310File: gcc.info, Node: PowerPC Built-in Functions, Next: PowerPC AltiVec/VSX Built-in Functions, Prev: picoChip Built-in Functions, Up: Target Builtins 36311 363126.58.19 PowerPC Built-in Functions 36313---------------------------------- 36314 36315These built-in functions are available for the PowerPC family of 36316processors: 36317 float __builtin_recipdivf (float, float); 36318 float __builtin_rsqrtf (float); 36319 double __builtin_recipdiv (double, double); 36320 double __builtin_rsqrt (double); 36321 uint64_t __builtin_ppc_get_timebase (); 36322 unsigned long __builtin_ppc_mftb (); 36323 double __builtin_unpack_longdouble (long double, int); 36324 long double __builtin_pack_longdouble (double, double); 36325 36326 The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions 36327generate multiple instructions to implement the reciprocal sqrt 36328functionality using reciprocal sqrt estimate instructions. 36329 36330 The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate 36331multiple instructions to implement division using the reciprocal 36332estimate instructions. 36333 36334 The `__builtin_ppc_get_timebase' and `__builtin_ppc_mftb' functions 36335generate instructions to read the Time Base Register. The 36336`__builtin_ppc_get_timebase' function may generate multiple 36337instructions and always returns the 64 bits of the Time Base Register. 36338The `__builtin_ppc_mftb' function always generates one instruction and 36339returns the Time Base Register value as an unsigned long, throwing away 36340the most significant word on 32-bit environments. 36341 36342 The following built-in functions are available for the PowerPC family 36343of processors, starting with ISA 2.06 or later (`-mcpu=power7' or 36344`-mpopcntd'): 36345 long __builtin_bpermd (long, long); 36346 int __builtin_divwe (int, int); 36347 int __builtin_divweo (int, int); 36348 unsigned int __builtin_divweu (unsigned int, unsigned int); 36349 unsigned int __builtin_divweuo (unsigned int, unsigned int); 36350 long __builtin_divde (long, long); 36351 long __builtin_divdeo (long, long); 36352 unsigned long __builtin_divdeu (unsigned long, unsigned long); 36353 unsigned long __builtin_divdeuo (unsigned long, unsigned long); 36354 unsigned int cdtbcd (unsigned int); 36355 unsigned int cbcdtd (unsigned int); 36356 unsigned int addg6s (unsigned int, unsigned int); 36357 36358 The `__builtin_divde', `__builtin_divdeo', `__builtin_divdeu', 36359`__builtin_divdeou' functions require a 64-bit environment support ISA 363602.06 or later. 36361 36362 The following built-in functions are available for the PowerPC family 36363of processors when hardware decimal floating point (`-mhard-dfp') is 36364available: 36365 _Decimal64 __builtin_dxex (_Decimal64); 36366 _Decimal128 __builtin_dxexq (_Decimal128); 36367 _Decimal64 __builtin_ddedpd (int, _Decimal64); 36368 _Decimal128 __builtin_ddedpdq (int, _Decimal128); 36369 _Decimal64 __builtin_denbcd (int, _Decimal64); 36370 _Decimal128 __builtin_denbcdq (int, _Decimal128); 36371 _Decimal64 __builtin_diex (_Decimal64, _Decimal64); 36372 _Decimal128 _builtin_diexq (_Decimal128, _Decimal128); 36373 _Decimal64 __builtin_dscli (_Decimal64, int); 36374 _Decimal128 __builtin_dscliq (_Decimal128, int); 36375 _Decimal64 __builtin_dscri (_Decimal64, int); 36376 _Decimal128 __builtin_dscriq (_Decimal128, int); 36377 unsigned long long __builtin_unpack_dec128 (_Decimal128, int); 36378 _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long); 36379 36380 The following built-in functions are available for the PowerPC family 36381of processors when the Vector Scalar (vsx) instruction set is available: 36382 unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int); 36383 vector __int128_t __builtin_pack_vector_int128 (unsigned long long, 36384 unsigned long long); 36385 36386 36387File: gcc.info, Node: PowerPC AltiVec/VSX Built-in Functions, Next: PowerPC Hardware Transactional Memory Built-in Functions, Prev: PowerPC Built-in Functions, Up: Target Builtins 36388 363896.58.20 PowerPC AltiVec Built-in Functions 36390------------------------------------------ 36391 36392GCC provides an interface for the PowerPC family of processors to access 36393the AltiVec operations described in Motorola's AltiVec Programming 36394Interface Manual. The interface is made available by including 36395`<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 36396supports the following vector types. 36397 36398 vector unsigned char 36399 vector signed char 36400 vector bool char 36401 36402 vector unsigned short 36403 vector signed short 36404 vector bool short 36405 vector pixel 36406 36407 vector unsigned int 36408 vector signed int 36409 vector bool int 36410 vector float 36411 36412 If `-mvsx' is used the following additional vector types are 36413implemented. 36414 36415 vector unsigned long 36416 vector signed long 36417 vector double 36418 36419 The long types are only implemented for 64-bit code generation, and 36420the long type is only used in the floating point/integer conversion 36421instructions. 36422 36423 GCC's implementation of the high-level language interface available 36424from C and C++ code differs from Motorola's documentation in several 36425ways. 36426 36427 * A vector constant is a list of constant expressions within curly 36428 braces. 36429 36430 * A vector initializer requires no cast if the vector constant is of 36431 the same type as the variable it is initializing. 36432 36433 * If `signed' or `unsigned' is omitted, the signedness of the vector 36434 type is the default signedness of the base type. The default 36435 varies depending on the operating system, so a portable program 36436 should always specify the signedness. 36437 36438 * Compiling with `-maltivec' adds keywords `__vector', `vector', 36439 `__pixel', `pixel', `__bool' and `bool'. When compiling ISO C, 36440 the context-sensitive substitution of the keywords `vector', 36441 `pixel' and `bool' is disabled. To use them, you must include 36442 `<altivec.h>' instead. 36443 36444 * GCC allows using a `typedef' name as the type specifier for a 36445 vector type. 36446 36447 * For C, overloaded functions are implemented with macros so the 36448 following does not work: 36449 36450 vec_add ((vector signed int){1, 2, 3, 4}, foo); 36451 36452 Since `vec_add' is a macro, the vector constant in the example is 36453 treated as four separate arguments. Wrap the entire argument in 36454 parentheses for this to work. 36455 36456 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 36457GCC uses built-in functions to achieve the functionality in the 36458aforementioned header file, but they are not supported and are subject 36459to change without notice. 36460 36461 The following interfaces are supported for the generic and specific 36462AltiVec operations and the AltiVec predicates. In cases where there is 36463a direct mapping between generic and specific operations, only the 36464generic names are shown here, although the specific operations can also 36465be used. 36466 36467 Arguments that are documented as `const int' require literal integral 36468values within the range required for that operation. 36469 36470 vector signed char vec_abs (vector signed char); 36471 vector signed short vec_abs (vector signed short); 36472 vector signed int vec_abs (vector signed int); 36473 vector float vec_abs (vector float); 36474 36475 vector signed char vec_abss (vector signed char); 36476 vector signed short vec_abss (vector signed short); 36477 vector signed int vec_abss (vector signed int); 36478 36479 vector signed char vec_add (vector bool char, vector signed char); 36480 vector signed char vec_add (vector signed char, vector bool char); 36481 vector signed char vec_add (vector signed char, vector signed char); 36482 vector unsigned char vec_add (vector bool char, vector unsigned char); 36483 vector unsigned char vec_add (vector unsigned char, vector bool char); 36484 vector unsigned char vec_add (vector unsigned char, 36485 vector unsigned char); 36486 vector signed short vec_add (vector bool short, vector signed short); 36487 vector signed short vec_add (vector signed short, vector bool short); 36488 vector signed short vec_add (vector signed short, vector signed short); 36489 vector unsigned short vec_add (vector bool short, 36490 vector unsigned short); 36491 vector unsigned short vec_add (vector unsigned short, 36492 vector bool short); 36493 vector unsigned short vec_add (vector unsigned short, 36494 vector unsigned short); 36495 vector signed int vec_add (vector bool int, vector signed int); 36496 vector signed int vec_add (vector signed int, vector bool int); 36497 vector signed int vec_add (vector signed int, vector signed int); 36498 vector unsigned int vec_add (vector bool int, vector unsigned int); 36499 vector unsigned int vec_add (vector unsigned int, vector bool int); 36500 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 36501 vector float vec_add (vector float, vector float); 36502 36503 vector float vec_vaddfp (vector float, vector float); 36504 36505 vector signed int vec_vadduwm (vector bool int, vector signed int); 36506 vector signed int vec_vadduwm (vector signed int, vector bool int); 36507 vector signed int vec_vadduwm (vector signed int, vector signed int); 36508 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 36509 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 36510 vector unsigned int vec_vadduwm (vector unsigned int, 36511 vector unsigned int); 36512 36513 vector signed short vec_vadduhm (vector bool short, 36514 vector signed short); 36515 vector signed short vec_vadduhm (vector signed short, 36516 vector bool short); 36517 vector signed short vec_vadduhm (vector signed short, 36518 vector signed short); 36519 vector unsigned short vec_vadduhm (vector bool short, 36520 vector unsigned short); 36521 vector unsigned short vec_vadduhm (vector unsigned short, 36522 vector bool short); 36523 vector unsigned short vec_vadduhm (vector unsigned short, 36524 vector unsigned short); 36525 36526 vector signed char vec_vaddubm (vector bool char, vector signed char); 36527 vector signed char vec_vaddubm (vector signed char, vector bool char); 36528 vector signed char vec_vaddubm (vector signed char, vector signed char); 36529 vector unsigned char vec_vaddubm (vector bool char, 36530 vector unsigned char); 36531 vector unsigned char vec_vaddubm (vector unsigned char, 36532 vector bool char); 36533 vector unsigned char vec_vaddubm (vector unsigned char, 36534 vector unsigned char); 36535 36536 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 36537 36538 vector unsigned char vec_adds (vector bool char, vector unsigned char); 36539 vector unsigned char vec_adds (vector unsigned char, vector bool char); 36540 vector unsigned char vec_adds (vector unsigned char, 36541 vector unsigned char); 36542 vector signed char vec_adds (vector bool char, vector signed char); 36543 vector signed char vec_adds (vector signed char, vector bool char); 36544 vector signed char vec_adds (vector signed char, vector signed char); 36545 vector unsigned short vec_adds (vector bool short, 36546 vector unsigned short); 36547 vector unsigned short vec_adds (vector unsigned short, 36548 vector bool short); 36549 vector unsigned short vec_adds (vector unsigned short, 36550 vector unsigned short); 36551 vector signed short vec_adds (vector bool short, vector signed short); 36552 vector signed short vec_adds (vector signed short, vector bool short); 36553 vector signed short vec_adds (vector signed short, vector signed short); 36554 vector unsigned int vec_adds (vector bool int, vector unsigned int); 36555 vector unsigned int vec_adds (vector unsigned int, vector bool int); 36556 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 36557 vector signed int vec_adds (vector bool int, vector signed int); 36558 vector signed int vec_adds (vector signed int, vector bool int); 36559 vector signed int vec_adds (vector signed int, vector signed int); 36560 36561 vector signed int vec_vaddsws (vector bool int, vector signed int); 36562 vector signed int vec_vaddsws (vector signed int, vector bool int); 36563 vector signed int vec_vaddsws (vector signed int, vector signed int); 36564 36565 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 36566 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 36567 vector unsigned int vec_vadduws (vector unsigned int, 36568 vector unsigned int); 36569 36570 vector signed short vec_vaddshs (vector bool short, 36571 vector signed short); 36572 vector signed short vec_vaddshs (vector signed short, 36573 vector bool short); 36574 vector signed short vec_vaddshs (vector signed short, 36575 vector signed short); 36576 36577 vector unsigned short vec_vadduhs (vector bool short, 36578 vector unsigned short); 36579 vector unsigned short vec_vadduhs (vector unsigned short, 36580 vector bool short); 36581 vector unsigned short vec_vadduhs (vector unsigned short, 36582 vector unsigned short); 36583 36584 vector signed char vec_vaddsbs (vector bool char, vector signed char); 36585 vector signed char vec_vaddsbs (vector signed char, vector bool char); 36586 vector signed char vec_vaddsbs (vector signed char, vector signed char); 36587 36588 vector unsigned char vec_vaddubs (vector bool char, 36589 vector unsigned char); 36590 vector unsigned char vec_vaddubs (vector unsigned char, 36591 vector bool char); 36592 vector unsigned char vec_vaddubs (vector unsigned char, 36593 vector unsigned char); 36594 36595 vector float vec_and (vector float, vector float); 36596 vector float vec_and (vector float, vector bool int); 36597 vector float vec_and (vector bool int, vector float); 36598 vector bool int vec_and (vector bool int, vector bool int); 36599 vector signed int vec_and (vector bool int, vector signed int); 36600 vector signed int vec_and (vector signed int, vector bool int); 36601 vector signed int vec_and (vector signed int, vector signed int); 36602 vector unsigned int vec_and (vector bool int, vector unsigned int); 36603 vector unsigned int vec_and (vector unsigned int, vector bool int); 36604 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 36605 vector bool short vec_and (vector bool short, vector bool short); 36606 vector signed short vec_and (vector bool short, vector signed short); 36607 vector signed short vec_and (vector signed short, vector bool short); 36608 vector signed short vec_and (vector signed short, vector signed short); 36609 vector unsigned short vec_and (vector bool short, 36610 vector unsigned short); 36611 vector unsigned short vec_and (vector unsigned short, 36612 vector bool short); 36613 vector unsigned short vec_and (vector unsigned short, 36614 vector unsigned short); 36615 vector signed char vec_and (vector bool char, vector signed char); 36616 vector bool char vec_and (vector bool char, vector bool char); 36617 vector signed char vec_and (vector signed char, vector bool char); 36618 vector signed char vec_and (vector signed char, vector signed char); 36619 vector unsigned char vec_and (vector bool char, vector unsigned char); 36620 vector unsigned char vec_and (vector unsigned char, vector bool char); 36621 vector unsigned char vec_and (vector unsigned char, 36622 vector unsigned char); 36623 36624 vector float vec_andc (vector float, vector float); 36625 vector float vec_andc (vector float, vector bool int); 36626 vector float vec_andc (vector bool int, vector float); 36627 vector bool int vec_andc (vector bool int, vector bool int); 36628 vector signed int vec_andc (vector bool int, vector signed int); 36629 vector signed int vec_andc (vector signed int, vector bool int); 36630 vector signed int vec_andc (vector signed int, vector signed int); 36631 vector unsigned int vec_andc (vector bool int, vector unsigned int); 36632 vector unsigned int vec_andc (vector unsigned int, vector bool int); 36633 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 36634 vector bool short vec_andc (vector bool short, vector bool short); 36635 vector signed short vec_andc (vector bool short, vector signed short); 36636 vector signed short vec_andc (vector signed short, vector bool short); 36637 vector signed short vec_andc (vector signed short, vector signed short); 36638 vector unsigned short vec_andc (vector bool short, 36639 vector unsigned short); 36640 vector unsigned short vec_andc (vector unsigned short, 36641 vector bool short); 36642 vector unsigned short vec_andc (vector unsigned short, 36643 vector unsigned short); 36644 vector signed char vec_andc (vector bool char, vector signed char); 36645 vector bool char vec_andc (vector bool char, vector bool char); 36646 vector signed char vec_andc (vector signed char, vector bool char); 36647 vector signed char vec_andc (vector signed char, vector signed char); 36648 vector unsigned char vec_andc (vector bool char, vector unsigned char); 36649 vector unsigned char vec_andc (vector unsigned char, vector bool char); 36650 vector unsigned char vec_andc (vector unsigned char, 36651 vector unsigned char); 36652 36653 vector unsigned char vec_avg (vector unsigned char, 36654 vector unsigned char); 36655 vector signed char vec_avg (vector signed char, vector signed char); 36656 vector unsigned short vec_avg (vector unsigned short, 36657 vector unsigned short); 36658 vector signed short vec_avg (vector signed short, vector signed short); 36659 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 36660 vector signed int vec_avg (vector signed int, vector signed int); 36661 36662 vector signed int vec_vavgsw (vector signed int, vector signed int); 36663 36664 vector unsigned int vec_vavguw (vector unsigned int, 36665 vector unsigned int); 36666 36667 vector signed short vec_vavgsh (vector signed short, 36668 vector signed short); 36669 36670 vector unsigned short vec_vavguh (vector unsigned short, 36671 vector unsigned short); 36672 36673 vector signed char vec_vavgsb (vector signed char, vector signed char); 36674 36675 vector unsigned char vec_vavgub (vector unsigned char, 36676 vector unsigned char); 36677 36678 vector float vec_copysign (vector float); 36679 36680 vector float vec_ceil (vector float); 36681 36682 vector signed int vec_cmpb (vector float, vector float); 36683 36684 vector bool char vec_cmpeq (vector signed char, vector signed char); 36685 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 36686 vector bool short vec_cmpeq (vector signed short, vector signed short); 36687 vector bool short vec_cmpeq (vector unsigned short, 36688 vector unsigned short); 36689 vector bool int vec_cmpeq (vector signed int, vector signed int); 36690 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 36691 vector bool int vec_cmpeq (vector float, vector float); 36692 36693 vector bool int vec_vcmpeqfp (vector float, vector float); 36694 36695 vector bool int vec_vcmpequw (vector signed int, vector signed int); 36696 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 36697 36698 vector bool short vec_vcmpequh (vector signed short, 36699 vector signed short); 36700 vector bool short vec_vcmpequh (vector unsigned short, 36701 vector unsigned short); 36702 36703 vector bool char vec_vcmpequb (vector signed char, vector signed char); 36704 vector bool char vec_vcmpequb (vector unsigned char, 36705 vector unsigned char); 36706 36707 vector bool int vec_cmpge (vector float, vector float); 36708 36709 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 36710 vector bool char vec_cmpgt (vector signed char, vector signed char); 36711 vector bool short vec_cmpgt (vector unsigned short, 36712 vector unsigned short); 36713 vector bool short vec_cmpgt (vector signed short, vector signed short); 36714 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 36715 vector bool int vec_cmpgt (vector signed int, vector signed int); 36716 vector bool int vec_cmpgt (vector float, vector float); 36717 36718 vector bool int vec_vcmpgtfp (vector float, vector float); 36719 36720 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 36721 36722 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 36723 36724 vector bool short vec_vcmpgtsh (vector signed short, 36725 vector signed short); 36726 36727 vector bool short vec_vcmpgtuh (vector unsigned short, 36728 vector unsigned short); 36729 36730 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 36731 36732 vector bool char vec_vcmpgtub (vector unsigned char, 36733 vector unsigned char); 36734 36735 vector bool int vec_cmple (vector float, vector float); 36736 36737 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 36738 vector bool char vec_cmplt (vector signed char, vector signed char); 36739 vector bool short vec_cmplt (vector unsigned short, 36740 vector unsigned short); 36741 vector bool short vec_cmplt (vector signed short, vector signed short); 36742 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 36743 vector bool int vec_cmplt (vector signed int, vector signed int); 36744 vector bool int vec_cmplt (vector float, vector float); 36745 36746 vector float vec_cpsgn (vector float, vector float); 36747 36748 vector float vec_ctf (vector unsigned int, const int); 36749 vector float vec_ctf (vector signed int, const int); 36750 vector double vec_ctf (vector unsigned long, const int); 36751 vector double vec_ctf (vector signed long, const int); 36752 36753 vector float vec_vcfsx (vector signed int, const int); 36754 36755 vector float vec_vcfux (vector unsigned int, const int); 36756 36757 vector signed int vec_cts (vector float, const int); 36758 vector signed long vec_cts (vector double, const int); 36759 36760 vector unsigned int vec_ctu (vector float, const int); 36761 vector unsigned long vec_ctu (vector double, const int); 36762 36763 void vec_dss (const int); 36764 36765 void vec_dssall (void); 36766 36767 void vec_dst (const vector unsigned char *, int, const int); 36768 void vec_dst (const vector signed char *, int, const int); 36769 void vec_dst (const vector bool char *, int, const int); 36770 void vec_dst (const vector unsigned short *, int, const int); 36771 void vec_dst (const vector signed short *, int, const int); 36772 void vec_dst (const vector bool short *, int, const int); 36773 void vec_dst (const vector pixel *, int, const int); 36774 void vec_dst (const vector unsigned int *, int, const int); 36775 void vec_dst (const vector signed int *, int, const int); 36776 void vec_dst (const vector bool int *, int, const int); 36777 void vec_dst (const vector float *, int, const int); 36778 void vec_dst (const unsigned char *, int, const int); 36779 void vec_dst (const signed char *, int, const int); 36780 void vec_dst (const unsigned short *, int, const int); 36781 void vec_dst (const short *, int, const int); 36782 void vec_dst (const unsigned int *, int, const int); 36783 void vec_dst (const int *, int, const int); 36784 void vec_dst (const unsigned long *, int, const int); 36785 void vec_dst (const long *, int, const int); 36786 void vec_dst (const float *, int, const int); 36787 36788 void vec_dstst (const vector unsigned char *, int, const int); 36789 void vec_dstst (const vector signed char *, int, const int); 36790 void vec_dstst (const vector bool char *, int, const int); 36791 void vec_dstst (const vector unsigned short *, int, const int); 36792 void vec_dstst (const vector signed short *, int, const int); 36793 void vec_dstst (const vector bool short *, int, const int); 36794 void vec_dstst (const vector pixel *, int, const int); 36795 void vec_dstst (const vector unsigned int *, int, const int); 36796 void vec_dstst (const vector signed int *, int, const int); 36797 void vec_dstst (const vector bool int *, int, const int); 36798 void vec_dstst (const vector float *, int, const int); 36799 void vec_dstst (const unsigned char *, int, const int); 36800 void vec_dstst (const signed char *, int, const int); 36801 void vec_dstst (const unsigned short *, int, const int); 36802 void vec_dstst (const short *, int, const int); 36803 void vec_dstst (const unsigned int *, int, const int); 36804 void vec_dstst (const int *, int, const int); 36805 void vec_dstst (const unsigned long *, int, const int); 36806 void vec_dstst (const long *, int, const int); 36807 void vec_dstst (const float *, int, const int); 36808 36809 void vec_dststt (const vector unsigned char *, int, const int); 36810 void vec_dststt (const vector signed char *, int, const int); 36811 void vec_dststt (const vector bool char *, int, const int); 36812 void vec_dststt (const vector unsigned short *, int, const int); 36813 void vec_dststt (const vector signed short *, int, const int); 36814 void vec_dststt (const vector bool short *, int, const int); 36815 void vec_dststt (const vector pixel *, int, const int); 36816 void vec_dststt (const vector unsigned int *, int, const int); 36817 void vec_dststt (const vector signed int *, int, const int); 36818 void vec_dststt (const vector bool int *, int, const int); 36819 void vec_dststt (const vector float *, int, const int); 36820 void vec_dststt (const unsigned char *, int, const int); 36821 void vec_dststt (const signed char *, int, const int); 36822 void vec_dststt (const unsigned short *, int, const int); 36823 void vec_dststt (const short *, int, const int); 36824 void vec_dststt (const unsigned int *, int, const int); 36825 void vec_dststt (const int *, int, const int); 36826 void vec_dststt (const unsigned long *, int, const int); 36827 void vec_dststt (const long *, int, const int); 36828 void vec_dststt (const float *, int, const int); 36829 36830 void vec_dstt (const vector unsigned char *, int, const int); 36831 void vec_dstt (const vector signed char *, int, const int); 36832 void vec_dstt (const vector bool char *, int, const int); 36833 void vec_dstt (const vector unsigned short *, int, const int); 36834 void vec_dstt (const vector signed short *, int, const int); 36835 void vec_dstt (const vector bool short *, int, const int); 36836 void vec_dstt (const vector pixel *, int, const int); 36837 void vec_dstt (const vector unsigned int *, int, const int); 36838 void vec_dstt (const vector signed int *, int, const int); 36839 void vec_dstt (const vector bool int *, int, const int); 36840 void vec_dstt (const vector float *, int, const int); 36841 void vec_dstt (const unsigned char *, int, const int); 36842 void vec_dstt (const signed char *, int, const int); 36843 void vec_dstt (const unsigned short *, int, const int); 36844 void vec_dstt (const short *, int, const int); 36845 void vec_dstt (const unsigned int *, int, const int); 36846 void vec_dstt (const int *, int, const int); 36847 void vec_dstt (const unsigned long *, int, const int); 36848 void vec_dstt (const long *, int, const int); 36849 void vec_dstt (const float *, int, const int); 36850 36851 vector float vec_expte (vector float); 36852 36853 vector float vec_floor (vector float); 36854 36855 vector float vec_ld (int, const vector float *); 36856 vector float vec_ld (int, const float *); 36857 vector bool int vec_ld (int, const vector bool int *); 36858 vector signed int vec_ld (int, const vector signed int *); 36859 vector signed int vec_ld (int, const int *); 36860 vector signed int vec_ld (int, const long *); 36861 vector unsigned int vec_ld (int, const vector unsigned int *); 36862 vector unsigned int vec_ld (int, const unsigned int *); 36863 vector unsigned int vec_ld (int, const unsigned long *); 36864 vector bool short vec_ld (int, const vector bool short *); 36865 vector pixel vec_ld (int, const vector pixel *); 36866 vector signed short vec_ld (int, const vector signed short *); 36867 vector signed short vec_ld (int, const short *); 36868 vector unsigned short vec_ld (int, const vector unsigned short *); 36869 vector unsigned short vec_ld (int, const unsigned short *); 36870 vector bool char vec_ld (int, const vector bool char *); 36871 vector signed char vec_ld (int, const vector signed char *); 36872 vector signed char vec_ld (int, const signed char *); 36873 vector unsigned char vec_ld (int, const vector unsigned char *); 36874 vector unsigned char vec_ld (int, const unsigned char *); 36875 36876 vector signed char vec_lde (int, const signed char *); 36877 vector unsigned char vec_lde (int, const unsigned char *); 36878 vector signed short vec_lde (int, const short *); 36879 vector unsigned short vec_lde (int, const unsigned short *); 36880 vector float vec_lde (int, const float *); 36881 vector signed int vec_lde (int, const int *); 36882 vector unsigned int vec_lde (int, const unsigned int *); 36883 vector signed int vec_lde (int, const long *); 36884 vector unsigned int vec_lde (int, const unsigned long *); 36885 36886 vector float vec_lvewx (int, float *); 36887 vector signed int vec_lvewx (int, int *); 36888 vector unsigned int vec_lvewx (int, unsigned int *); 36889 vector signed int vec_lvewx (int, long *); 36890 vector unsigned int vec_lvewx (int, unsigned long *); 36891 36892 vector signed short vec_lvehx (int, short *); 36893 vector unsigned short vec_lvehx (int, unsigned short *); 36894 36895 vector signed char vec_lvebx (int, char *); 36896 vector unsigned char vec_lvebx (int, unsigned char *); 36897 36898 vector float vec_ldl (int, const vector float *); 36899 vector float vec_ldl (int, const float *); 36900 vector bool int vec_ldl (int, const vector bool int *); 36901 vector signed int vec_ldl (int, const vector signed int *); 36902 vector signed int vec_ldl (int, const int *); 36903 vector signed int vec_ldl (int, const long *); 36904 vector unsigned int vec_ldl (int, const vector unsigned int *); 36905 vector unsigned int vec_ldl (int, const unsigned int *); 36906 vector unsigned int vec_ldl (int, const unsigned long *); 36907 vector bool short vec_ldl (int, const vector bool short *); 36908 vector pixel vec_ldl (int, const vector pixel *); 36909 vector signed short vec_ldl (int, const vector signed short *); 36910 vector signed short vec_ldl (int, const short *); 36911 vector unsigned short vec_ldl (int, const vector unsigned short *); 36912 vector unsigned short vec_ldl (int, const unsigned short *); 36913 vector bool char vec_ldl (int, const vector bool char *); 36914 vector signed char vec_ldl (int, const vector signed char *); 36915 vector signed char vec_ldl (int, const signed char *); 36916 vector unsigned char vec_ldl (int, const vector unsigned char *); 36917 vector unsigned char vec_ldl (int, const unsigned char *); 36918 36919 vector float vec_loge (vector float); 36920 36921 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 36922 vector unsigned char vec_lvsl (int, const volatile signed char *); 36923 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 36924 vector unsigned char vec_lvsl (int, const volatile short *); 36925 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 36926 vector unsigned char vec_lvsl (int, const volatile int *); 36927 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 36928 vector unsigned char vec_lvsl (int, const volatile long *); 36929 vector unsigned char vec_lvsl (int, const volatile float *); 36930 36931 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 36932 vector unsigned char vec_lvsr (int, const volatile signed char *); 36933 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 36934 vector unsigned char vec_lvsr (int, const volatile short *); 36935 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 36936 vector unsigned char vec_lvsr (int, const volatile int *); 36937 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 36938 vector unsigned char vec_lvsr (int, const volatile long *); 36939 vector unsigned char vec_lvsr (int, const volatile float *); 36940 36941 vector float vec_madd (vector float, vector float, vector float); 36942 36943 vector signed short vec_madds (vector signed short, 36944 vector signed short, 36945 vector signed short); 36946 36947 vector unsigned char vec_max (vector bool char, vector unsigned char); 36948 vector unsigned char vec_max (vector unsigned char, vector bool char); 36949 vector unsigned char vec_max (vector unsigned char, 36950 vector unsigned char); 36951 vector signed char vec_max (vector bool char, vector signed char); 36952 vector signed char vec_max (vector signed char, vector bool char); 36953 vector signed char vec_max (vector signed char, vector signed char); 36954 vector unsigned short vec_max (vector bool short, 36955 vector unsigned short); 36956 vector unsigned short vec_max (vector unsigned short, 36957 vector bool short); 36958 vector unsigned short vec_max (vector unsigned short, 36959 vector unsigned short); 36960 vector signed short vec_max (vector bool short, vector signed short); 36961 vector signed short vec_max (vector signed short, vector bool short); 36962 vector signed short vec_max (vector signed short, vector signed short); 36963 vector unsigned int vec_max (vector bool int, vector unsigned int); 36964 vector unsigned int vec_max (vector unsigned int, vector bool int); 36965 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 36966 vector signed int vec_max (vector bool int, vector signed int); 36967 vector signed int vec_max (vector signed int, vector bool int); 36968 vector signed int vec_max (vector signed int, vector signed int); 36969 vector float vec_max (vector float, vector float); 36970 36971 vector float vec_vmaxfp (vector float, vector float); 36972 36973 vector signed int vec_vmaxsw (vector bool int, vector signed int); 36974 vector signed int vec_vmaxsw (vector signed int, vector bool int); 36975 vector signed int vec_vmaxsw (vector signed int, vector signed int); 36976 36977 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 36978 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 36979 vector unsigned int vec_vmaxuw (vector unsigned int, 36980 vector unsigned int); 36981 36982 vector signed short vec_vmaxsh (vector bool short, vector signed short); 36983 vector signed short vec_vmaxsh (vector signed short, vector bool short); 36984 vector signed short vec_vmaxsh (vector signed short, 36985 vector signed short); 36986 36987 vector unsigned short vec_vmaxuh (vector bool short, 36988 vector unsigned short); 36989 vector unsigned short vec_vmaxuh (vector unsigned short, 36990 vector bool short); 36991 vector unsigned short vec_vmaxuh (vector unsigned short, 36992 vector unsigned short); 36993 36994 vector signed char vec_vmaxsb (vector bool char, vector signed char); 36995 vector signed char vec_vmaxsb (vector signed char, vector bool char); 36996 vector signed char vec_vmaxsb (vector signed char, vector signed char); 36997 36998 vector unsigned char vec_vmaxub (vector bool char, 36999 vector unsigned char); 37000 vector unsigned char vec_vmaxub (vector unsigned char, 37001 vector bool char); 37002 vector unsigned char vec_vmaxub (vector unsigned char, 37003 vector unsigned char); 37004 37005 vector bool char vec_mergeh (vector bool char, vector bool char); 37006 vector signed char vec_mergeh (vector signed char, vector signed char); 37007 vector unsigned char vec_mergeh (vector unsigned char, 37008 vector unsigned char); 37009 vector bool short vec_mergeh (vector bool short, vector bool short); 37010 vector pixel vec_mergeh (vector pixel, vector pixel); 37011 vector signed short vec_mergeh (vector signed short, 37012 vector signed short); 37013 vector unsigned short vec_mergeh (vector unsigned short, 37014 vector unsigned short); 37015 vector float vec_mergeh (vector float, vector float); 37016 vector bool int vec_mergeh (vector bool int, vector bool int); 37017 vector signed int vec_mergeh (vector signed int, vector signed int); 37018 vector unsigned int vec_mergeh (vector unsigned int, 37019 vector unsigned int); 37020 37021 vector float vec_vmrghw (vector float, vector float); 37022 vector bool int vec_vmrghw (vector bool int, vector bool int); 37023 vector signed int vec_vmrghw (vector signed int, vector signed int); 37024 vector unsigned int vec_vmrghw (vector unsigned int, 37025 vector unsigned int); 37026 37027 vector bool short vec_vmrghh (vector bool short, vector bool short); 37028 vector signed short vec_vmrghh (vector signed short, 37029 vector signed short); 37030 vector unsigned short vec_vmrghh (vector unsigned short, 37031 vector unsigned short); 37032 vector pixel vec_vmrghh (vector pixel, vector pixel); 37033 37034 vector bool char vec_vmrghb (vector bool char, vector bool char); 37035 vector signed char vec_vmrghb (vector signed char, vector signed char); 37036 vector unsigned char vec_vmrghb (vector unsigned char, 37037 vector unsigned char); 37038 37039 vector bool char vec_mergel (vector bool char, vector bool char); 37040 vector signed char vec_mergel (vector signed char, vector signed char); 37041 vector unsigned char vec_mergel (vector unsigned char, 37042 vector unsigned char); 37043 vector bool short vec_mergel (vector bool short, vector bool short); 37044 vector pixel vec_mergel (vector pixel, vector pixel); 37045 vector signed short vec_mergel (vector signed short, 37046 vector signed short); 37047 vector unsigned short vec_mergel (vector unsigned short, 37048 vector unsigned short); 37049 vector float vec_mergel (vector float, vector float); 37050 vector bool int vec_mergel (vector bool int, vector bool int); 37051 vector signed int vec_mergel (vector signed int, vector signed int); 37052 vector unsigned int vec_mergel (vector unsigned int, 37053 vector unsigned int); 37054 37055 vector float vec_vmrglw (vector float, vector float); 37056 vector signed int vec_vmrglw (vector signed int, vector signed int); 37057 vector unsigned int vec_vmrglw (vector unsigned int, 37058 vector unsigned int); 37059 vector bool int vec_vmrglw (vector bool int, vector bool int); 37060 37061 vector bool short vec_vmrglh (vector bool short, vector bool short); 37062 vector signed short vec_vmrglh (vector signed short, 37063 vector signed short); 37064 vector unsigned short vec_vmrglh (vector unsigned short, 37065 vector unsigned short); 37066 vector pixel vec_vmrglh (vector pixel, vector pixel); 37067 37068 vector bool char vec_vmrglb (vector bool char, vector bool char); 37069 vector signed char vec_vmrglb (vector signed char, vector signed char); 37070 vector unsigned char vec_vmrglb (vector unsigned char, 37071 vector unsigned char); 37072 37073 vector unsigned short vec_mfvscr (void); 37074 37075 vector unsigned char vec_min (vector bool char, vector unsigned char); 37076 vector unsigned char vec_min (vector unsigned char, vector bool char); 37077 vector unsigned char vec_min (vector unsigned char, 37078 vector unsigned char); 37079 vector signed char vec_min (vector bool char, vector signed char); 37080 vector signed char vec_min (vector signed char, vector bool char); 37081 vector signed char vec_min (vector signed char, vector signed char); 37082 vector unsigned short vec_min (vector bool short, 37083 vector unsigned short); 37084 vector unsigned short vec_min (vector unsigned short, 37085 vector bool short); 37086 vector unsigned short vec_min (vector unsigned short, 37087 vector unsigned short); 37088 vector signed short vec_min (vector bool short, vector signed short); 37089 vector signed short vec_min (vector signed short, vector bool short); 37090 vector signed short vec_min (vector signed short, vector signed short); 37091 vector unsigned int vec_min (vector bool int, vector unsigned int); 37092 vector unsigned int vec_min (vector unsigned int, vector bool int); 37093 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 37094 vector signed int vec_min (vector bool int, vector signed int); 37095 vector signed int vec_min (vector signed int, vector bool int); 37096 vector signed int vec_min (vector signed int, vector signed int); 37097 vector float vec_min (vector float, vector float); 37098 37099 vector float vec_vminfp (vector float, vector float); 37100 37101 vector signed int vec_vminsw (vector bool int, vector signed int); 37102 vector signed int vec_vminsw (vector signed int, vector bool int); 37103 vector signed int vec_vminsw (vector signed int, vector signed int); 37104 37105 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 37106 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 37107 vector unsigned int vec_vminuw (vector unsigned int, 37108 vector unsigned int); 37109 37110 vector signed short vec_vminsh (vector bool short, vector signed short); 37111 vector signed short vec_vminsh (vector signed short, vector bool short); 37112 vector signed short vec_vminsh (vector signed short, 37113 vector signed short); 37114 37115 vector unsigned short vec_vminuh (vector bool short, 37116 vector unsigned short); 37117 vector unsigned short vec_vminuh (vector unsigned short, 37118 vector bool short); 37119 vector unsigned short vec_vminuh (vector unsigned short, 37120 vector unsigned short); 37121 37122 vector signed char vec_vminsb (vector bool char, vector signed char); 37123 vector signed char vec_vminsb (vector signed char, vector bool char); 37124 vector signed char vec_vminsb (vector signed char, vector signed char); 37125 37126 vector unsigned char vec_vminub (vector bool char, 37127 vector unsigned char); 37128 vector unsigned char vec_vminub (vector unsigned char, 37129 vector bool char); 37130 vector unsigned char vec_vminub (vector unsigned char, 37131 vector unsigned char); 37132 37133 vector signed short vec_mladd (vector signed short, 37134 vector signed short, 37135 vector signed short); 37136 vector signed short vec_mladd (vector signed short, 37137 vector unsigned short, 37138 vector unsigned short); 37139 vector signed short vec_mladd (vector unsigned short, 37140 vector signed short, 37141 vector signed short); 37142 vector unsigned short vec_mladd (vector unsigned short, 37143 vector unsigned short, 37144 vector unsigned short); 37145 37146 vector signed short vec_mradds (vector signed short, 37147 vector signed short, 37148 vector signed short); 37149 37150 vector unsigned int vec_msum (vector unsigned char, 37151 vector unsigned char, 37152 vector unsigned int); 37153 vector signed int vec_msum (vector signed char, 37154 vector unsigned char, 37155 vector signed int); 37156 vector unsigned int vec_msum (vector unsigned short, 37157 vector unsigned short, 37158 vector unsigned int); 37159 vector signed int vec_msum (vector signed short, 37160 vector signed short, 37161 vector signed int); 37162 37163 vector signed int vec_vmsumshm (vector signed short, 37164 vector signed short, 37165 vector signed int); 37166 37167 vector unsigned int vec_vmsumuhm (vector unsigned short, 37168 vector unsigned short, 37169 vector unsigned int); 37170 37171 vector signed int vec_vmsummbm (vector signed char, 37172 vector unsigned char, 37173 vector signed int); 37174 37175 vector unsigned int vec_vmsumubm (vector unsigned char, 37176 vector unsigned char, 37177 vector unsigned int); 37178 37179 vector unsigned int vec_msums (vector unsigned short, 37180 vector unsigned short, 37181 vector unsigned int); 37182 vector signed int vec_msums (vector signed short, 37183 vector signed short, 37184 vector signed int); 37185 37186 vector signed int vec_vmsumshs (vector signed short, 37187 vector signed short, 37188 vector signed int); 37189 37190 vector unsigned int vec_vmsumuhs (vector unsigned short, 37191 vector unsigned short, 37192 vector unsigned int); 37193 37194 void vec_mtvscr (vector signed int); 37195 void vec_mtvscr (vector unsigned int); 37196 void vec_mtvscr (vector bool int); 37197 void vec_mtvscr (vector signed short); 37198 void vec_mtvscr (vector unsigned short); 37199 void vec_mtvscr (vector bool short); 37200 void vec_mtvscr (vector pixel); 37201 void vec_mtvscr (vector signed char); 37202 void vec_mtvscr (vector unsigned char); 37203 void vec_mtvscr (vector bool char); 37204 37205 vector unsigned short vec_mule (vector unsigned char, 37206 vector unsigned char); 37207 vector signed short vec_mule (vector signed char, 37208 vector signed char); 37209 vector unsigned int vec_mule (vector unsigned short, 37210 vector unsigned short); 37211 vector signed int vec_mule (vector signed short, vector signed short); 37212 37213 vector signed int vec_vmulesh (vector signed short, 37214 vector signed short); 37215 37216 vector unsigned int vec_vmuleuh (vector unsigned short, 37217 vector unsigned short); 37218 37219 vector signed short vec_vmulesb (vector signed char, 37220 vector signed char); 37221 37222 vector unsigned short vec_vmuleub (vector unsigned char, 37223 vector unsigned char); 37224 37225 vector unsigned short vec_mulo (vector unsigned char, 37226 vector unsigned char); 37227 vector signed short vec_mulo (vector signed char, vector signed char); 37228 vector unsigned int vec_mulo (vector unsigned short, 37229 vector unsigned short); 37230 vector signed int vec_mulo (vector signed short, vector signed short); 37231 37232 vector signed int vec_vmulosh (vector signed short, 37233 vector signed short); 37234 37235 vector unsigned int vec_vmulouh (vector unsigned short, 37236 vector unsigned short); 37237 37238 vector signed short vec_vmulosb (vector signed char, 37239 vector signed char); 37240 37241 vector unsigned short vec_vmuloub (vector unsigned char, 37242 vector unsigned char); 37243 37244 vector float vec_nmsub (vector float, vector float, vector float); 37245 37246 vector float vec_nor (vector float, vector float); 37247 vector signed int vec_nor (vector signed int, vector signed int); 37248 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 37249 vector bool int vec_nor (vector bool int, vector bool int); 37250 vector signed short vec_nor (vector signed short, vector signed short); 37251 vector unsigned short vec_nor (vector unsigned short, 37252 vector unsigned short); 37253 vector bool short vec_nor (vector bool short, vector bool short); 37254 vector signed char vec_nor (vector signed char, vector signed char); 37255 vector unsigned char vec_nor (vector unsigned char, 37256 vector unsigned char); 37257 vector bool char vec_nor (vector bool char, vector bool char); 37258 37259 vector float vec_or (vector float, vector float); 37260 vector float vec_or (vector float, vector bool int); 37261 vector float vec_or (vector bool int, vector float); 37262 vector bool int vec_or (vector bool int, vector bool int); 37263 vector signed int vec_or (vector bool int, vector signed int); 37264 vector signed int vec_or (vector signed int, vector bool int); 37265 vector signed int vec_or (vector signed int, vector signed int); 37266 vector unsigned int vec_or (vector bool int, vector unsigned int); 37267 vector unsigned int vec_or (vector unsigned int, vector bool int); 37268 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 37269 vector bool short vec_or (vector bool short, vector bool short); 37270 vector signed short vec_or (vector bool short, vector signed short); 37271 vector signed short vec_or (vector signed short, vector bool short); 37272 vector signed short vec_or (vector signed short, vector signed short); 37273 vector unsigned short vec_or (vector bool short, vector unsigned short); 37274 vector unsigned short vec_or (vector unsigned short, vector bool short); 37275 vector unsigned short vec_or (vector unsigned short, 37276 vector unsigned short); 37277 vector signed char vec_or (vector bool char, vector signed char); 37278 vector bool char vec_or (vector bool char, vector bool char); 37279 vector signed char vec_or (vector signed char, vector bool char); 37280 vector signed char vec_or (vector signed char, vector signed char); 37281 vector unsigned char vec_or (vector bool char, vector unsigned char); 37282 vector unsigned char vec_or (vector unsigned char, vector bool char); 37283 vector unsigned char vec_or (vector unsigned char, 37284 vector unsigned char); 37285 37286 vector signed char vec_pack (vector signed short, vector signed short); 37287 vector unsigned char vec_pack (vector unsigned short, 37288 vector unsigned short); 37289 vector bool char vec_pack (vector bool short, vector bool short); 37290 vector signed short vec_pack (vector signed int, vector signed int); 37291 vector unsigned short vec_pack (vector unsigned int, 37292 vector unsigned int); 37293 vector bool short vec_pack (vector bool int, vector bool int); 37294 37295 vector bool short vec_vpkuwum (vector bool int, vector bool int); 37296 vector signed short vec_vpkuwum (vector signed int, vector signed int); 37297 vector unsigned short vec_vpkuwum (vector unsigned int, 37298 vector unsigned int); 37299 37300 vector bool char vec_vpkuhum (vector bool short, vector bool short); 37301 vector signed char vec_vpkuhum (vector signed short, 37302 vector signed short); 37303 vector unsigned char vec_vpkuhum (vector unsigned short, 37304 vector unsigned short); 37305 37306 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 37307 37308 vector unsigned char vec_packs (vector unsigned short, 37309 vector unsigned short); 37310 vector signed char vec_packs (vector signed short, vector signed short); 37311 vector unsigned short vec_packs (vector unsigned int, 37312 vector unsigned int); 37313 vector signed short vec_packs (vector signed int, vector signed int); 37314 37315 vector signed short vec_vpkswss (vector signed int, vector signed int); 37316 37317 vector unsigned short vec_vpkuwus (vector unsigned int, 37318 vector unsigned int); 37319 37320 vector signed char vec_vpkshss (vector signed short, 37321 vector signed short); 37322 37323 vector unsigned char vec_vpkuhus (vector unsigned short, 37324 vector unsigned short); 37325 37326 vector unsigned char vec_packsu (vector unsigned short, 37327 vector unsigned short); 37328 vector unsigned char vec_packsu (vector signed short, 37329 vector signed short); 37330 vector unsigned short vec_packsu (vector unsigned int, 37331 vector unsigned int); 37332 vector unsigned short vec_packsu (vector signed int, vector signed int); 37333 37334 vector unsigned short vec_vpkswus (vector signed int, 37335 vector signed int); 37336 37337 vector unsigned char vec_vpkshus (vector signed short, 37338 vector signed short); 37339 37340 vector float vec_perm (vector float, 37341 vector float, 37342 vector unsigned char); 37343 vector signed int vec_perm (vector signed int, 37344 vector signed int, 37345 vector unsigned char); 37346 vector unsigned int vec_perm (vector unsigned int, 37347 vector unsigned int, 37348 vector unsigned char); 37349 vector bool int vec_perm (vector bool int, 37350 vector bool int, 37351 vector unsigned char); 37352 vector signed short vec_perm (vector signed short, 37353 vector signed short, 37354 vector unsigned char); 37355 vector unsigned short vec_perm (vector unsigned short, 37356 vector unsigned short, 37357 vector unsigned char); 37358 vector bool short vec_perm (vector bool short, 37359 vector bool short, 37360 vector unsigned char); 37361 vector pixel vec_perm (vector pixel, 37362 vector pixel, 37363 vector unsigned char); 37364 vector signed char vec_perm (vector signed char, 37365 vector signed char, 37366 vector unsigned char); 37367 vector unsigned char vec_perm (vector unsigned char, 37368 vector unsigned char, 37369 vector unsigned char); 37370 vector bool char vec_perm (vector bool char, 37371 vector bool char, 37372 vector unsigned char); 37373 37374 vector float vec_re (vector float); 37375 37376 vector signed char vec_rl (vector signed char, 37377 vector unsigned char); 37378 vector unsigned char vec_rl (vector unsigned char, 37379 vector unsigned char); 37380 vector signed short vec_rl (vector signed short, vector unsigned short); 37381 vector unsigned short vec_rl (vector unsigned short, 37382 vector unsigned short); 37383 vector signed int vec_rl (vector signed int, vector unsigned int); 37384 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 37385 37386 vector signed int vec_vrlw (vector signed int, vector unsigned int); 37387 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 37388 37389 vector signed short vec_vrlh (vector signed short, 37390 vector unsigned short); 37391 vector unsigned short vec_vrlh (vector unsigned short, 37392 vector unsigned short); 37393 37394 vector signed char vec_vrlb (vector signed char, vector unsigned char); 37395 vector unsigned char vec_vrlb (vector unsigned char, 37396 vector unsigned char); 37397 37398 vector float vec_round (vector float); 37399 37400 vector float vec_recip (vector float, vector float); 37401 37402 vector float vec_rsqrt (vector float); 37403 37404 vector float vec_rsqrte (vector float); 37405 37406 vector float vec_sel (vector float, vector float, vector bool int); 37407 vector float vec_sel (vector float, vector float, vector unsigned int); 37408 vector signed int vec_sel (vector signed int, 37409 vector signed int, 37410 vector bool int); 37411 vector signed int vec_sel (vector signed int, 37412 vector signed int, 37413 vector unsigned int); 37414 vector unsigned int vec_sel (vector unsigned int, 37415 vector unsigned int, 37416 vector bool int); 37417 vector unsigned int vec_sel (vector unsigned int, 37418 vector unsigned int, 37419 vector unsigned int); 37420 vector bool int vec_sel (vector bool int, 37421 vector bool int, 37422 vector bool int); 37423 vector bool int vec_sel (vector bool int, 37424 vector bool int, 37425 vector unsigned int); 37426 vector signed short vec_sel (vector signed short, 37427 vector signed short, 37428 vector bool short); 37429 vector signed short vec_sel (vector signed short, 37430 vector signed short, 37431 vector unsigned short); 37432 vector unsigned short vec_sel (vector unsigned short, 37433 vector unsigned short, 37434 vector bool short); 37435 vector unsigned short vec_sel (vector unsigned short, 37436 vector unsigned short, 37437 vector unsigned short); 37438 vector bool short vec_sel (vector bool short, 37439 vector bool short, 37440 vector bool short); 37441 vector bool short vec_sel (vector bool short, 37442 vector bool short, 37443 vector unsigned short); 37444 vector signed char vec_sel (vector signed char, 37445 vector signed char, 37446 vector bool char); 37447 vector signed char vec_sel (vector signed char, 37448 vector signed char, 37449 vector unsigned char); 37450 vector unsigned char vec_sel (vector unsigned char, 37451 vector unsigned char, 37452 vector bool char); 37453 vector unsigned char vec_sel (vector unsigned char, 37454 vector unsigned char, 37455 vector unsigned char); 37456 vector bool char vec_sel (vector bool char, 37457 vector bool char, 37458 vector bool char); 37459 vector bool char vec_sel (vector bool char, 37460 vector bool char, 37461 vector unsigned char); 37462 37463 vector signed char vec_sl (vector signed char, 37464 vector unsigned char); 37465 vector unsigned char vec_sl (vector unsigned char, 37466 vector unsigned char); 37467 vector signed short vec_sl (vector signed short, vector unsigned short); 37468 vector unsigned short vec_sl (vector unsigned short, 37469 vector unsigned short); 37470 vector signed int vec_sl (vector signed int, vector unsigned int); 37471 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 37472 37473 vector signed int vec_vslw (vector signed int, vector unsigned int); 37474 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 37475 37476 vector signed short vec_vslh (vector signed short, 37477 vector unsigned short); 37478 vector unsigned short vec_vslh (vector unsigned short, 37479 vector unsigned short); 37480 37481 vector signed char vec_vslb (vector signed char, vector unsigned char); 37482 vector unsigned char vec_vslb (vector unsigned char, 37483 vector unsigned char); 37484 37485 vector float vec_sld (vector float, vector float, const int); 37486 vector signed int vec_sld (vector signed int, 37487 vector signed int, 37488 const int); 37489 vector unsigned int vec_sld (vector unsigned int, 37490 vector unsigned int, 37491 const int); 37492 vector bool int vec_sld (vector bool int, 37493 vector bool int, 37494 const int); 37495 vector signed short vec_sld (vector signed short, 37496 vector signed short, 37497 const int); 37498 vector unsigned short vec_sld (vector unsigned short, 37499 vector unsigned short, 37500 const int); 37501 vector bool short vec_sld (vector bool short, 37502 vector bool short, 37503 const int); 37504 vector pixel vec_sld (vector pixel, 37505 vector pixel, 37506 const int); 37507 vector signed char vec_sld (vector signed char, 37508 vector signed char, 37509 const int); 37510 vector unsigned char vec_sld (vector unsigned char, 37511 vector unsigned char, 37512 const int); 37513 vector bool char vec_sld (vector bool char, 37514 vector bool char, 37515 const int); 37516 37517 vector signed int vec_sll (vector signed int, 37518 vector unsigned int); 37519 vector signed int vec_sll (vector signed int, 37520 vector unsigned short); 37521 vector signed int vec_sll (vector signed int, 37522 vector unsigned char); 37523 vector unsigned int vec_sll (vector unsigned int, 37524 vector unsigned int); 37525 vector unsigned int vec_sll (vector unsigned int, 37526 vector unsigned short); 37527 vector unsigned int vec_sll (vector unsigned int, 37528 vector unsigned char); 37529 vector bool int vec_sll (vector bool int, 37530 vector unsigned int); 37531 vector bool int vec_sll (vector bool int, 37532 vector unsigned short); 37533 vector bool int vec_sll (vector bool int, 37534 vector unsigned char); 37535 vector signed short vec_sll (vector signed short, 37536 vector unsigned int); 37537 vector signed short vec_sll (vector signed short, 37538 vector unsigned short); 37539 vector signed short vec_sll (vector signed short, 37540 vector unsigned char); 37541 vector unsigned short vec_sll (vector unsigned short, 37542 vector unsigned int); 37543 vector unsigned short vec_sll (vector unsigned short, 37544 vector unsigned short); 37545 vector unsigned short vec_sll (vector unsigned short, 37546 vector unsigned char); 37547 vector bool short vec_sll (vector bool short, vector unsigned int); 37548 vector bool short vec_sll (vector bool short, vector unsigned short); 37549 vector bool short vec_sll (vector bool short, vector unsigned char); 37550 vector pixel vec_sll (vector pixel, vector unsigned int); 37551 vector pixel vec_sll (vector pixel, vector unsigned short); 37552 vector pixel vec_sll (vector pixel, vector unsigned char); 37553 vector signed char vec_sll (vector signed char, vector unsigned int); 37554 vector signed char vec_sll (vector signed char, vector unsigned short); 37555 vector signed char vec_sll (vector signed char, vector unsigned char); 37556 vector unsigned char vec_sll (vector unsigned char, 37557 vector unsigned int); 37558 vector unsigned char vec_sll (vector unsigned char, 37559 vector unsigned short); 37560 vector unsigned char vec_sll (vector unsigned char, 37561 vector unsigned char); 37562 vector bool char vec_sll (vector bool char, vector unsigned int); 37563 vector bool char vec_sll (vector bool char, vector unsigned short); 37564 vector bool char vec_sll (vector bool char, vector unsigned char); 37565 37566 vector float vec_slo (vector float, vector signed char); 37567 vector float vec_slo (vector float, vector unsigned char); 37568 vector signed int vec_slo (vector signed int, vector signed char); 37569 vector signed int vec_slo (vector signed int, vector unsigned char); 37570 vector unsigned int vec_slo (vector unsigned int, vector signed char); 37571 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 37572 vector signed short vec_slo (vector signed short, vector signed char); 37573 vector signed short vec_slo (vector signed short, vector unsigned char); 37574 vector unsigned short vec_slo (vector unsigned short, 37575 vector signed char); 37576 vector unsigned short vec_slo (vector unsigned short, 37577 vector unsigned char); 37578 vector pixel vec_slo (vector pixel, vector signed char); 37579 vector pixel vec_slo (vector pixel, vector unsigned char); 37580 vector signed char vec_slo (vector signed char, vector signed char); 37581 vector signed char vec_slo (vector signed char, vector unsigned char); 37582 vector unsigned char vec_slo (vector unsigned char, vector signed char); 37583 vector unsigned char vec_slo (vector unsigned char, 37584 vector unsigned char); 37585 37586 vector signed char vec_splat (vector signed char, const int); 37587 vector unsigned char vec_splat (vector unsigned char, const int); 37588 vector bool char vec_splat (vector bool char, const int); 37589 vector signed short vec_splat (vector signed short, const int); 37590 vector unsigned short vec_splat (vector unsigned short, const int); 37591 vector bool short vec_splat (vector bool short, const int); 37592 vector pixel vec_splat (vector pixel, const int); 37593 vector float vec_splat (vector float, const int); 37594 vector signed int vec_splat (vector signed int, const int); 37595 vector unsigned int vec_splat (vector unsigned int, const int); 37596 vector bool int vec_splat (vector bool int, const int); 37597 vector signed long vec_splat (vector signed long, const int); 37598 vector unsigned long vec_splat (vector unsigned long, const int); 37599 37600 vector signed char vec_splats (signed char); 37601 vector unsigned char vec_splats (unsigned char); 37602 vector signed short vec_splats (signed short); 37603 vector unsigned short vec_splats (unsigned short); 37604 vector signed int vec_splats (signed int); 37605 vector unsigned int vec_splats (unsigned int); 37606 vector float vec_splats (float); 37607 37608 vector float vec_vspltw (vector float, const int); 37609 vector signed int vec_vspltw (vector signed int, const int); 37610 vector unsigned int vec_vspltw (vector unsigned int, const int); 37611 vector bool int vec_vspltw (vector bool int, const int); 37612 37613 vector bool short vec_vsplth (vector bool short, const int); 37614 vector signed short vec_vsplth (vector signed short, const int); 37615 vector unsigned short vec_vsplth (vector unsigned short, const int); 37616 vector pixel vec_vsplth (vector pixel, const int); 37617 37618 vector signed char vec_vspltb (vector signed char, const int); 37619 vector unsigned char vec_vspltb (vector unsigned char, const int); 37620 vector bool char vec_vspltb (vector bool char, const int); 37621 37622 vector signed char vec_splat_s8 (const int); 37623 37624 vector signed short vec_splat_s16 (const int); 37625 37626 vector signed int vec_splat_s32 (const int); 37627 37628 vector unsigned char vec_splat_u8 (const int); 37629 37630 vector unsigned short vec_splat_u16 (const int); 37631 37632 vector unsigned int vec_splat_u32 (const int); 37633 37634 vector signed char vec_sr (vector signed char, vector unsigned char); 37635 vector unsigned char vec_sr (vector unsigned char, 37636 vector unsigned char); 37637 vector signed short vec_sr (vector signed short, 37638 vector unsigned short); 37639 vector unsigned short vec_sr (vector unsigned short, 37640 vector unsigned short); 37641 vector signed int vec_sr (vector signed int, vector unsigned int); 37642 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 37643 37644 vector signed int vec_vsrw (vector signed int, vector unsigned int); 37645 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 37646 37647 vector signed short vec_vsrh (vector signed short, 37648 vector unsigned short); 37649 vector unsigned short vec_vsrh (vector unsigned short, 37650 vector unsigned short); 37651 37652 vector signed char vec_vsrb (vector signed char, vector unsigned char); 37653 vector unsigned char vec_vsrb (vector unsigned char, 37654 vector unsigned char); 37655 37656 vector signed char vec_sra (vector signed char, vector unsigned char); 37657 vector unsigned char vec_sra (vector unsigned char, 37658 vector unsigned char); 37659 vector signed short vec_sra (vector signed short, 37660 vector unsigned short); 37661 vector unsigned short vec_sra (vector unsigned short, 37662 vector unsigned short); 37663 vector signed int vec_sra (vector signed int, vector unsigned int); 37664 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 37665 37666 vector signed int vec_vsraw (vector signed int, vector unsigned int); 37667 vector unsigned int vec_vsraw (vector unsigned int, 37668 vector unsigned int); 37669 37670 vector signed short vec_vsrah (vector signed short, 37671 vector unsigned short); 37672 vector unsigned short vec_vsrah (vector unsigned short, 37673 vector unsigned short); 37674 37675 vector signed char vec_vsrab (vector signed char, vector unsigned char); 37676 vector unsigned char vec_vsrab (vector unsigned char, 37677 vector unsigned char); 37678 37679 vector signed int vec_srl (vector signed int, vector unsigned int); 37680 vector signed int vec_srl (vector signed int, vector unsigned short); 37681 vector signed int vec_srl (vector signed int, vector unsigned char); 37682 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 37683 vector unsigned int vec_srl (vector unsigned int, 37684 vector unsigned short); 37685 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 37686 vector bool int vec_srl (vector bool int, vector unsigned int); 37687 vector bool int vec_srl (vector bool int, vector unsigned short); 37688 vector bool int vec_srl (vector bool int, vector unsigned char); 37689 vector signed short vec_srl (vector signed short, vector unsigned int); 37690 vector signed short vec_srl (vector signed short, 37691 vector unsigned short); 37692 vector signed short vec_srl (vector signed short, vector unsigned char); 37693 vector unsigned short vec_srl (vector unsigned short, 37694 vector unsigned int); 37695 vector unsigned short vec_srl (vector unsigned short, 37696 vector unsigned short); 37697 vector unsigned short vec_srl (vector unsigned short, 37698 vector unsigned char); 37699 vector bool short vec_srl (vector bool short, vector unsigned int); 37700 vector bool short vec_srl (vector bool short, vector unsigned short); 37701 vector bool short vec_srl (vector bool short, vector unsigned char); 37702 vector pixel vec_srl (vector pixel, vector unsigned int); 37703 vector pixel vec_srl (vector pixel, vector unsigned short); 37704 vector pixel vec_srl (vector pixel, vector unsigned char); 37705 vector signed char vec_srl (vector signed char, vector unsigned int); 37706 vector signed char vec_srl (vector signed char, vector unsigned short); 37707 vector signed char vec_srl (vector signed char, vector unsigned char); 37708 vector unsigned char vec_srl (vector unsigned char, 37709 vector unsigned int); 37710 vector unsigned char vec_srl (vector unsigned char, 37711 vector unsigned short); 37712 vector unsigned char vec_srl (vector unsigned char, 37713 vector unsigned char); 37714 vector bool char vec_srl (vector bool char, vector unsigned int); 37715 vector bool char vec_srl (vector bool char, vector unsigned short); 37716 vector bool char vec_srl (vector bool char, vector unsigned char); 37717 37718 vector float vec_sro (vector float, vector signed char); 37719 vector float vec_sro (vector float, vector unsigned char); 37720 vector signed int vec_sro (vector signed int, vector signed char); 37721 vector signed int vec_sro (vector signed int, vector unsigned char); 37722 vector unsigned int vec_sro (vector unsigned int, vector signed char); 37723 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 37724 vector signed short vec_sro (vector signed short, vector signed char); 37725 vector signed short vec_sro (vector signed short, vector unsigned char); 37726 vector unsigned short vec_sro (vector unsigned short, 37727 vector signed char); 37728 vector unsigned short vec_sro (vector unsigned short, 37729 vector unsigned char); 37730 vector pixel vec_sro (vector pixel, vector signed char); 37731 vector pixel vec_sro (vector pixel, vector unsigned char); 37732 vector signed char vec_sro (vector signed char, vector signed char); 37733 vector signed char vec_sro (vector signed char, vector unsigned char); 37734 vector unsigned char vec_sro (vector unsigned char, vector signed char); 37735 vector unsigned char vec_sro (vector unsigned char, 37736 vector unsigned char); 37737 37738 void vec_st (vector float, int, vector float *); 37739 void vec_st (vector float, int, float *); 37740 void vec_st (vector signed int, int, vector signed int *); 37741 void vec_st (vector signed int, int, int *); 37742 void vec_st (vector unsigned int, int, vector unsigned int *); 37743 void vec_st (vector unsigned int, int, unsigned int *); 37744 void vec_st (vector bool int, int, vector bool int *); 37745 void vec_st (vector bool int, int, unsigned int *); 37746 void vec_st (vector bool int, int, int *); 37747 void vec_st (vector signed short, int, vector signed short *); 37748 void vec_st (vector signed short, int, short *); 37749 void vec_st (vector unsigned short, int, vector unsigned short *); 37750 void vec_st (vector unsigned short, int, unsigned short *); 37751 void vec_st (vector bool short, int, vector bool short *); 37752 void vec_st (vector bool short, int, unsigned short *); 37753 void vec_st (vector pixel, int, vector pixel *); 37754 void vec_st (vector pixel, int, unsigned short *); 37755 void vec_st (vector pixel, int, short *); 37756 void vec_st (vector bool short, int, short *); 37757 void vec_st (vector signed char, int, vector signed char *); 37758 void vec_st (vector signed char, int, signed char *); 37759 void vec_st (vector unsigned char, int, vector unsigned char *); 37760 void vec_st (vector unsigned char, int, unsigned char *); 37761 void vec_st (vector bool char, int, vector bool char *); 37762 void vec_st (vector bool char, int, unsigned char *); 37763 void vec_st (vector bool char, int, signed char *); 37764 37765 void vec_ste (vector signed char, int, signed char *); 37766 void vec_ste (vector unsigned char, int, unsigned char *); 37767 void vec_ste (vector bool char, int, signed char *); 37768 void vec_ste (vector bool char, int, unsigned char *); 37769 void vec_ste (vector signed short, int, short *); 37770 void vec_ste (vector unsigned short, int, unsigned short *); 37771 void vec_ste (vector bool short, int, short *); 37772 void vec_ste (vector bool short, int, unsigned short *); 37773 void vec_ste (vector pixel, int, short *); 37774 void vec_ste (vector pixel, int, unsigned short *); 37775 void vec_ste (vector float, int, float *); 37776 void vec_ste (vector signed int, int, int *); 37777 void vec_ste (vector unsigned int, int, unsigned int *); 37778 void vec_ste (vector bool int, int, int *); 37779 void vec_ste (vector bool int, int, unsigned int *); 37780 37781 void vec_stvewx (vector float, int, float *); 37782 void vec_stvewx (vector signed int, int, int *); 37783 void vec_stvewx (vector unsigned int, int, unsigned int *); 37784 void vec_stvewx (vector bool int, int, int *); 37785 void vec_stvewx (vector bool int, int, unsigned int *); 37786 37787 void vec_stvehx (vector signed short, int, short *); 37788 void vec_stvehx (vector unsigned short, int, unsigned short *); 37789 void vec_stvehx (vector bool short, int, short *); 37790 void vec_stvehx (vector bool short, int, unsigned short *); 37791 void vec_stvehx (vector pixel, int, short *); 37792 void vec_stvehx (vector pixel, int, unsigned short *); 37793 37794 void vec_stvebx (vector signed char, int, signed char *); 37795 void vec_stvebx (vector unsigned char, int, unsigned char *); 37796 void vec_stvebx (vector bool char, int, signed char *); 37797 void vec_stvebx (vector bool char, int, unsigned char *); 37798 37799 void vec_stl (vector float, int, vector float *); 37800 void vec_stl (vector float, int, float *); 37801 void vec_stl (vector signed int, int, vector signed int *); 37802 void vec_stl (vector signed int, int, int *); 37803 void vec_stl (vector unsigned int, int, vector unsigned int *); 37804 void vec_stl (vector unsigned int, int, unsigned int *); 37805 void vec_stl (vector bool int, int, vector bool int *); 37806 void vec_stl (vector bool int, int, unsigned int *); 37807 void vec_stl (vector bool int, int, int *); 37808 void vec_stl (vector signed short, int, vector signed short *); 37809 void vec_stl (vector signed short, int, short *); 37810 void vec_stl (vector unsigned short, int, vector unsigned short *); 37811 void vec_stl (vector unsigned short, int, unsigned short *); 37812 void vec_stl (vector bool short, int, vector bool short *); 37813 void vec_stl (vector bool short, int, unsigned short *); 37814 void vec_stl (vector bool short, int, short *); 37815 void vec_stl (vector pixel, int, vector pixel *); 37816 void vec_stl (vector pixel, int, unsigned short *); 37817 void vec_stl (vector pixel, int, short *); 37818 void vec_stl (vector signed char, int, vector signed char *); 37819 void vec_stl (vector signed char, int, signed char *); 37820 void vec_stl (vector unsigned char, int, vector unsigned char *); 37821 void vec_stl (vector unsigned char, int, unsigned char *); 37822 void vec_stl (vector bool char, int, vector bool char *); 37823 void vec_stl (vector bool char, int, unsigned char *); 37824 void vec_stl (vector bool char, int, signed char *); 37825 37826 vector signed char vec_sub (vector bool char, vector signed char); 37827 vector signed char vec_sub (vector signed char, vector bool char); 37828 vector signed char vec_sub (vector signed char, vector signed char); 37829 vector unsigned char vec_sub (vector bool char, vector unsigned char); 37830 vector unsigned char vec_sub (vector unsigned char, vector bool char); 37831 vector unsigned char vec_sub (vector unsigned char, 37832 vector unsigned char); 37833 vector signed short vec_sub (vector bool short, vector signed short); 37834 vector signed short vec_sub (vector signed short, vector bool short); 37835 vector signed short vec_sub (vector signed short, vector signed short); 37836 vector unsigned short vec_sub (vector bool short, 37837 vector unsigned short); 37838 vector unsigned short vec_sub (vector unsigned short, 37839 vector bool short); 37840 vector unsigned short vec_sub (vector unsigned short, 37841 vector unsigned short); 37842 vector signed int vec_sub (vector bool int, vector signed int); 37843 vector signed int vec_sub (vector signed int, vector bool int); 37844 vector signed int vec_sub (vector signed int, vector signed int); 37845 vector unsigned int vec_sub (vector bool int, vector unsigned int); 37846 vector unsigned int vec_sub (vector unsigned int, vector bool int); 37847 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 37848 vector float vec_sub (vector float, vector float); 37849 37850 vector float vec_vsubfp (vector float, vector float); 37851 37852 vector signed int vec_vsubuwm (vector bool int, vector signed int); 37853 vector signed int vec_vsubuwm (vector signed int, vector bool int); 37854 vector signed int vec_vsubuwm (vector signed int, vector signed int); 37855 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 37856 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 37857 vector unsigned int vec_vsubuwm (vector unsigned int, 37858 vector unsigned int); 37859 37860 vector signed short vec_vsubuhm (vector bool short, 37861 vector signed short); 37862 vector signed short vec_vsubuhm (vector signed short, 37863 vector bool short); 37864 vector signed short vec_vsubuhm (vector signed short, 37865 vector signed short); 37866 vector unsigned short vec_vsubuhm (vector bool short, 37867 vector unsigned short); 37868 vector unsigned short vec_vsubuhm (vector unsigned short, 37869 vector bool short); 37870 vector unsigned short vec_vsubuhm (vector unsigned short, 37871 vector unsigned short); 37872 37873 vector signed char vec_vsububm (vector bool char, vector signed char); 37874 vector signed char vec_vsububm (vector signed char, vector bool char); 37875 vector signed char vec_vsububm (vector signed char, vector signed char); 37876 vector unsigned char vec_vsububm (vector bool char, 37877 vector unsigned char); 37878 vector unsigned char vec_vsububm (vector unsigned char, 37879 vector bool char); 37880 vector unsigned char vec_vsububm (vector unsigned char, 37881 vector unsigned char); 37882 37883 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 37884 37885 vector unsigned char vec_subs (vector bool char, vector unsigned char); 37886 vector unsigned char vec_subs (vector unsigned char, vector bool char); 37887 vector unsigned char vec_subs (vector unsigned char, 37888 vector unsigned char); 37889 vector signed char vec_subs (vector bool char, vector signed char); 37890 vector signed char vec_subs (vector signed char, vector bool char); 37891 vector signed char vec_subs (vector signed char, vector signed char); 37892 vector unsigned short vec_subs (vector bool short, 37893 vector unsigned short); 37894 vector unsigned short vec_subs (vector unsigned short, 37895 vector bool short); 37896 vector unsigned short vec_subs (vector unsigned short, 37897 vector unsigned short); 37898 vector signed short vec_subs (vector bool short, vector signed short); 37899 vector signed short vec_subs (vector signed short, vector bool short); 37900 vector signed short vec_subs (vector signed short, vector signed short); 37901 vector unsigned int vec_subs (vector bool int, vector unsigned int); 37902 vector unsigned int vec_subs (vector unsigned int, vector bool int); 37903 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 37904 vector signed int vec_subs (vector bool int, vector signed int); 37905 vector signed int vec_subs (vector signed int, vector bool int); 37906 vector signed int vec_subs (vector signed int, vector signed int); 37907 37908 vector signed int vec_vsubsws (vector bool int, vector signed int); 37909 vector signed int vec_vsubsws (vector signed int, vector bool int); 37910 vector signed int vec_vsubsws (vector signed int, vector signed int); 37911 37912 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 37913 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 37914 vector unsigned int vec_vsubuws (vector unsigned int, 37915 vector unsigned int); 37916 37917 vector signed short vec_vsubshs (vector bool short, 37918 vector signed short); 37919 vector signed short vec_vsubshs (vector signed short, 37920 vector bool short); 37921 vector signed short vec_vsubshs (vector signed short, 37922 vector signed short); 37923 37924 vector unsigned short vec_vsubuhs (vector bool short, 37925 vector unsigned short); 37926 vector unsigned short vec_vsubuhs (vector unsigned short, 37927 vector bool short); 37928 vector unsigned short vec_vsubuhs (vector unsigned short, 37929 vector unsigned short); 37930 37931 vector signed char vec_vsubsbs (vector bool char, vector signed char); 37932 vector signed char vec_vsubsbs (vector signed char, vector bool char); 37933 vector signed char vec_vsubsbs (vector signed char, vector signed char); 37934 37935 vector unsigned char vec_vsububs (vector bool char, 37936 vector unsigned char); 37937 vector unsigned char vec_vsububs (vector unsigned char, 37938 vector bool char); 37939 vector unsigned char vec_vsububs (vector unsigned char, 37940 vector unsigned char); 37941 37942 vector unsigned int vec_sum4s (vector unsigned char, 37943 vector unsigned int); 37944 vector signed int vec_sum4s (vector signed char, vector signed int); 37945 vector signed int vec_sum4s (vector signed short, vector signed int); 37946 37947 vector signed int vec_vsum4shs (vector signed short, vector signed int); 37948 37949 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 37950 37951 vector unsigned int vec_vsum4ubs (vector unsigned char, 37952 vector unsigned int); 37953 37954 vector signed int vec_sum2s (vector signed int, vector signed int); 37955 37956 vector signed int vec_sums (vector signed int, vector signed int); 37957 37958 vector float vec_trunc (vector float); 37959 37960 vector signed short vec_unpackh (vector signed char); 37961 vector bool short vec_unpackh (vector bool char); 37962 vector signed int vec_unpackh (vector signed short); 37963 vector bool int vec_unpackh (vector bool short); 37964 vector unsigned int vec_unpackh (vector pixel); 37965 37966 vector bool int vec_vupkhsh (vector bool short); 37967 vector signed int vec_vupkhsh (vector signed short); 37968 37969 vector unsigned int vec_vupkhpx (vector pixel); 37970 37971 vector bool short vec_vupkhsb (vector bool char); 37972 vector signed short vec_vupkhsb (vector signed char); 37973 37974 vector signed short vec_unpackl (vector signed char); 37975 vector bool short vec_unpackl (vector bool char); 37976 vector unsigned int vec_unpackl (vector pixel); 37977 vector signed int vec_unpackl (vector signed short); 37978 vector bool int vec_unpackl (vector bool short); 37979 37980 vector unsigned int vec_vupklpx (vector pixel); 37981 37982 vector bool int vec_vupklsh (vector bool short); 37983 vector signed int vec_vupklsh (vector signed short); 37984 37985 vector bool short vec_vupklsb (vector bool char); 37986 vector signed short vec_vupklsb (vector signed char); 37987 37988 vector float vec_xor (vector float, vector float); 37989 vector float vec_xor (vector float, vector bool int); 37990 vector float vec_xor (vector bool int, vector float); 37991 vector bool int vec_xor (vector bool int, vector bool int); 37992 vector signed int vec_xor (vector bool int, vector signed int); 37993 vector signed int vec_xor (vector signed int, vector bool int); 37994 vector signed int vec_xor (vector signed int, vector signed int); 37995 vector unsigned int vec_xor (vector bool int, vector unsigned int); 37996 vector unsigned int vec_xor (vector unsigned int, vector bool int); 37997 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 37998 vector bool short vec_xor (vector bool short, vector bool short); 37999 vector signed short vec_xor (vector bool short, vector signed short); 38000 vector signed short vec_xor (vector signed short, vector bool short); 38001 vector signed short vec_xor (vector signed short, vector signed short); 38002 vector unsigned short vec_xor (vector bool short, 38003 vector unsigned short); 38004 vector unsigned short vec_xor (vector unsigned short, 38005 vector bool short); 38006 vector unsigned short vec_xor (vector unsigned short, 38007 vector unsigned short); 38008 vector signed char vec_xor (vector bool char, vector signed char); 38009 vector bool char vec_xor (vector bool char, vector bool char); 38010 vector signed char vec_xor (vector signed char, vector bool char); 38011 vector signed char vec_xor (vector signed char, vector signed char); 38012 vector unsigned char vec_xor (vector bool char, vector unsigned char); 38013 vector unsigned char vec_xor (vector unsigned char, vector bool char); 38014 vector unsigned char vec_xor (vector unsigned char, 38015 vector unsigned char); 38016 38017 int vec_all_eq (vector signed char, vector bool char); 38018 int vec_all_eq (vector signed char, vector signed char); 38019 int vec_all_eq (vector unsigned char, vector bool char); 38020 int vec_all_eq (vector unsigned char, vector unsigned char); 38021 int vec_all_eq (vector bool char, vector bool char); 38022 int vec_all_eq (vector bool char, vector unsigned char); 38023 int vec_all_eq (vector bool char, vector signed char); 38024 int vec_all_eq (vector signed short, vector bool short); 38025 int vec_all_eq (vector signed short, vector signed short); 38026 int vec_all_eq (vector unsigned short, vector bool short); 38027 int vec_all_eq (vector unsigned short, vector unsigned short); 38028 int vec_all_eq (vector bool short, vector bool short); 38029 int vec_all_eq (vector bool short, vector unsigned short); 38030 int vec_all_eq (vector bool short, vector signed short); 38031 int vec_all_eq (vector pixel, vector pixel); 38032 int vec_all_eq (vector signed int, vector bool int); 38033 int vec_all_eq (vector signed int, vector signed int); 38034 int vec_all_eq (vector unsigned int, vector bool int); 38035 int vec_all_eq (vector unsigned int, vector unsigned int); 38036 int vec_all_eq (vector bool int, vector bool int); 38037 int vec_all_eq (vector bool int, vector unsigned int); 38038 int vec_all_eq (vector bool int, vector signed int); 38039 int vec_all_eq (vector float, vector float); 38040 38041 int vec_all_ge (vector bool char, vector unsigned char); 38042 int vec_all_ge (vector unsigned char, vector bool char); 38043 int vec_all_ge (vector unsigned char, vector unsigned char); 38044 int vec_all_ge (vector bool char, vector signed char); 38045 int vec_all_ge (vector signed char, vector bool char); 38046 int vec_all_ge (vector signed char, vector signed char); 38047 int vec_all_ge (vector bool short, vector unsigned short); 38048 int vec_all_ge (vector unsigned short, vector bool short); 38049 int vec_all_ge (vector unsigned short, vector unsigned short); 38050 int vec_all_ge (vector signed short, vector signed short); 38051 int vec_all_ge (vector bool short, vector signed short); 38052 int vec_all_ge (vector signed short, vector bool short); 38053 int vec_all_ge (vector bool int, vector unsigned int); 38054 int vec_all_ge (vector unsigned int, vector bool int); 38055 int vec_all_ge (vector unsigned int, vector unsigned int); 38056 int vec_all_ge (vector bool int, vector signed int); 38057 int vec_all_ge (vector signed int, vector bool int); 38058 int vec_all_ge (vector signed int, vector signed int); 38059 int vec_all_ge (vector float, vector float); 38060 38061 int vec_all_gt (vector bool char, vector unsigned char); 38062 int vec_all_gt (vector unsigned char, vector bool char); 38063 int vec_all_gt (vector unsigned char, vector unsigned char); 38064 int vec_all_gt (vector bool char, vector signed char); 38065 int vec_all_gt (vector signed char, vector bool char); 38066 int vec_all_gt (vector signed char, vector signed char); 38067 int vec_all_gt (vector bool short, vector unsigned short); 38068 int vec_all_gt (vector unsigned short, vector bool short); 38069 int vec_all_gt (vector unsigned short, vector unsigned short); 38070 int vec_all_gt (vector bool short, vector signed short); 38071 int vec_all_gt (vector signed short, vector bool short); 38072 int vec_all_gt (vector signed short, vector signed short); 38073 int vec_all_gt (vector bool int, vector unsigned int); 38074 int vec_all_gt (vector unsigned int, vector bool int); 38075 int vec_all_gt (vector unsigned int, vector unsigned int); 38076 int vec_all_gt (vector bool int, vector signed int); 38077 int vec_all_gt (vector signed int, vector bool int); 38078 int vec_all_gt (vector signed int, vector signed int); 38079 int vec_all_gt (vector float, vector float); 38080 38081 int vec_all_in (vector float, vector float); 38082 38083 int vec_all_le (vector bool char, vector unsigned char); 38084 int vec_all_le (vector unsigned char, vector bool char); 38085 int vec_all_le (vector unsigned char, vector unsigned char); 38086 int vec_all_le (vector bool char, vector signed char); 38087 int vec_all_le (vector signed char, vector bool char); 38088 int vec_all_le (vector signed char, vector signed char); 38089 int vec_all_le (vector bool short, vector unsigned short); 38090 int vec_all_le (vector unsigned short, vector bool short); 38091 int vec_all_le (vector unsigned short, vector unsigned short); 38092 int vec_all_le (vector bool short, vector signed short); 38093 int vec_all_le (vector signed short, vector bool short); 38094 int vec_all_le (vector signed short, vector signed short); 38095 int vec_all_le (vector bool int, vector unsigned int); 38096 int vec_all_le (vector unsigned int, vector bool int); 38097 int vec_all_le (vector unsigned int, vector unsigned int); 38098 int vec_all_le (vector bool int, vector signed int); 38099 int vec_all_le (vector signed int, vector bool int); 38100 int vec_all_le (vector signed int, vector signed int); 38101 int vec_all_le (vector float, vector float); 38102 38103 int vec_all_lt (vector bool char, vector unsigned char); 38104 int vec_all_lt (vector unsigned char, vector bool char); 38105 int vec_all_lt (vector unsigned char, vector unsigned char); 38106 int vec_all_lt (vector bool char, vector signed char); 38107 int vec_all_lt (vector signed char, vector bool char); 38108 int vec_all_lt (vector signed char, vector signed char); 38109 int vec_all_lt (vector bool short, vector unsigned short); 38110 int vec_all_lt (vector unsigned short, vector bool short); 38111 int vec_all_lt (vector unsigned short, vector unsigned short); 38112 int vec_all_lt (vector bool short, vector signed short); 38113 int vec_all_lt (vector signed short, vector bool short); 38114 int vec_all_lt (vector signed short, vector signed short); 38115 int vec_all_lt (vector bool int, vector unsigned int); 38116 int vec_all_lt (vector unsigned int, vector bool int); 38117 int vec_all_lt (vector unsigned int, vector unsigned int); 38118 int vec_all_lt (vector bool int, vector signed int); 38119 int vec_all_lt (vector signed int, vector bool int); 38120 int vec_all_lt (vector signed int, vector signed int); 38121 int vec_all_lt (vector float, vector float); 38122 38123 int vec_all_nan (vector float); 38124 38125 int vec_all_ne (vector signed char, vector bool char); 38126 int vec_all_ne (vector signed char, vector signed char); 38127 int vec_all_ne (vector unsigned char, vector bool char); 38128 int vec_all_ne (vector unsigned char, vector unsigned char); 38129 int vec_all_ne (vector bool char, vector bool char); 38130 int vec_all_ne (vector bool char, vector unsigned char); 38131 int vec_all_ne (vector bool char, vector signed char); 38132 int vec_all_ne (vector signed short, vector bool short); 38133 int vec_all_ne (vector signed short, vector signed short); 38134 int vec_all_ne (vector unsigned short, vector bool short); 38135 int vec_all_ne (vector unsigned short, vector unsigned short); 38136 int vec_all_ne (vector bool short, vector bool short); 38137 int vec_all_ne (vector bool short, vector unsigned short); 38138 int vec_all_ne (vector bool short, vector signed short); 38139 int vec_all_ne (vector pixel, vector pixel); 38140 int vec_all_ne (vector signed int, vector bool int); 38141 int vec_all_ne (vector signed int, vector signed int); 38142 int vec_all_ne (vector unsigned int, vector bool int); 38143 int vec_all_ne (vector unsigned int, vector unsigned int); 38144 int vec_all_ne (vector bool int, vector bool int); 38145 int vec_all_ne (vector bool int, vector unsigned int); 38146 int vec_all_ne (vector bool int, vector signed int); 38147 int vec_all_ne (vector float, vector float); 38148 38149 int vec_all_nge (vector float, vector float); 38150 38151 int vec_all_ngt (vector float, vector float); 38152 38153 int vec_all_nle (vector float, vector float); 38154 38155 int vec_all_nlt (vector float, vector float); 38156 38157 int vec_all_numeric (vector float); 38158 38159 int vec_any_eq (vector signed char, vector bool char); 38160 int vec_any_eq (vector signed char, vector signed char); 38161 int vec_any_eq (vector unsigned char, vector bool char); 38162 int vec_any_eq (vector unsigned char, vector unsigned char); 38163 int vec_any_eq (vector bool char, vector bool char); 38164 int vec_any_eq (vector bool char, vector unsigned char); 38165 int vec_any_eq (vector bool char, vector signed char); 38166 int vec_any_eq (vector signed short, vector bool short); 38167 int vec_any_eq (vector signed short, vector signed short); 38168 int vec_any_eq (vector unsigned short, vector bool short); 38169 int vec_any_eq (vector unsigned short, vector unsigned short); 38170 int vec_any_eq (vector bool short, vector bool short); 38171 int vec_any_eq (vector bool short, vector unsigned short); 38172 int vec_any_eq (vector bool short, vector signed short); 38173 int vec_any_eq (vector pixel, vector pixel); 38174 int vec_any_eq (vector signed int, vector bool int); 38175 int vec_any_eq (vector signed int, vector signed int); 38176 int vec_any_eq (vector unsigned int, vector bool int); 38177 int vec_any_eq (vector unsigned int, vector unsigned int); 38178 int vec_any_eq (vector bool int, vector bool int); 38179 int vec_any_eq (vector bool int, vector unsigned int); 38180 int vec_any_eq (vector bool int, vector signed int); 38181 int vec_any_eq (vector float, vector float); 38182 38183 int vec_any_ge (vector signed char, vector bool char); 38184 int vec_any_ge (vector unsigned char, vector bool char); 38185 int vec_any_ge (vector unsigned char, vector unsigned char); 38186 int vec_any_ge (vector signed char, vector signed char); 38187 int vec_any_ge (vector bool char, vector unsigned char); 38188 int vec_any_ge (vector bool char, vector signed char); 38189 int vec_any_ge (vector unsigned short, vector bool short); 38190 int vec_any_ge (vector unsigned short, vector unsigned short); 38191 int vec_any_ge (vector signed short, vector signed short); 38192 int vec_any_ge (vector signed short, vector bool short); 38193 int vec_any_ge (vector bool short, vector unsigned short); 38194 int vec_any_ge (vector bool short, vector signed short); 38195 int vec_any_ge (vector signed int, vector bool int); 38196 int vec_any_ge (vector unsigned int, vector bool int); 38197 int vec_any_ge (vector unsigned int, vector unsigned int); 38198 int vec_any_ge (vector signed int, vector signed int); 38199 int vec_any_ge (vector bool int, vector unsigned int); 38200 int vec_any_ge (vector bool int, vector signed int); 38201 int vec_any_ge (vector float, vector float); 38202 38203 int vec_any_gt (vector bool char, vector unsigned char); 38204 int vec_any_gt (vector unsigned char, vector bool char); 38205 int vec_any_gt (vector unsigned char, vector unsigned char); 38206 int vec_any_gt (vector bool char, vector signed char); 38207 int vec_any_gt (vector signed char, vector bool char); 38208 int vec_any_gt (vector signed char, vector signed char); 38209 int vec_any_gt (vector bool short, vector unsigned short); 38210 int vec_any_gt (vector unsigned short, vector bool short); 38211 int vec_any_gt (vector unsigned short, vector unsigned short); 38212 int vec_any_gt (vector bool short, vector signed short); 38213 int vec_any_gt (vector signed short, vector bool short); 38214 int vec_any_gt (vector signed short, vector signed short); 38215 int vec_any_gt (vector bool int, vector unsigned int); 38216 int vec_any_gt (vector unsigned int, vector bool int); 38217 int vec_any_gt (vector unsigned int, vector unsigned int); 38218 int vec_any_gt (vector bool int, vector signed int); 38219 int vec_any_gt (vector signed int, vector bool int); 38220 int vec_any_gt (vector signed int, vector signed int); 38221 int vec_any_gt (vector float, vector float); 38222 38223 int vec_any_le (vector bool char, vector unsigned char); 38224 int vec_any_le (vector unsigned char, vector bool char); 38225 int vec_any_le (vector unsigned char, vector unsigned char); 38226 int vec_any_le (vector bool char, vector signed char); 38227 int vec_any_le (vector signed char, vector bool char); 38228 int vec_any_le (vector signed char, vector signed char); 38229 int vec_any_le (vector bool short, vector unsigned short); 38230 int vec_any_le (vector unsigned short, vector bool short); 38231 int vec_any_le (vector unsigned short, vector unsigned short); 38232 int vec_any_le (vector bool short, vector signed short); 38233 int vec_any_le (vector signed short, vector bool short); 38234 int vec_any_le (vector signed short, vector signed short); 38235 int vec_any_le (vector bool int, vector unsigned int); 38236 int vec_any_le (vector unsigned int, vector bool int); 38237 int vec_any_le (vector unsigned int, vector unsigned int); 38238 int vec_any_le (vector bool int, vector signed int); 38239 int vec_any_le (vector signed int, vector bool int); 38240 int vec_any_le (vector signed int, vector signed int); 38241 int vec_any_le (vector float, vector float); 38242 38243 int vec_any_lt (vector bool char, vector unsigned char); 38244 int vec_any_lt (vector unsigned char, vector bool char); 38245 int vec_any_lt (vector unsigned char, vector unsigned char); 38246 int vec_any_lt (vector bool char, vector signed char); 38247 int vec_any_lt (vector signed char, vector bool char); 38248 int vec_any_lt (vector signed char, vector signed char); 38249 int vec_any_lt (vector bool short, vector unsigned short); 38250 int vec_any_lt (vector unsigned short, vector bool short); 38251 int vec_any_lt (vector unsigned short, vector unsigned short); 38252 int vec_any_lt (vector bool short, vector signed short); 38253 int vec_any_lt (vector signed short, vector bool short); 38254 int vec_any_lt (vector signed short, vector signed short); 38255 int vec_any_lt (vector bool int, vector unsigned int); 38256 int vec_any_lt (vector unsigned int, vector bool int); 38257 int vec_any_lt (vector unsigned int, vector unsigned int); 38258 int vec_any_lt (vector bool int, vector signed int); 38259 int vec_any_lt (vector signed int, vector bool int); 38260 int vec_any_lt (vector signed int, vector signed int); 38261 int vec_any_lt (vector float, vector float); 38262 38263 int vec_any_nan (vector float); 38264 38265 int vec_any_ne (vector signed char, vector bool char); 38266 int vec_any_ne (vector signed char, vector signed char); 38267 int vec_any_ne (vector unsigned char, vector bool char); 38268 int vec_any_ne (vector unsigned char, vector unsigned char); 38269 int vec_any_ne (vector bool char, vector bool char); 38270 int vec_any_ne (vector bool char, vector unsigned char); 38271 int vec_any_ne (vector bool char, vector signed char); 38272 int vec_any_ne (vector signed short, vector bool short); 38273 int vec_any_ne (vector signed short, vector signed short); 38274 int vec_any_ne (vector unsigned short, vector bool short); 38275 int vec_any_ne (vector unsigned short, vector unsigned short); 38276 int vec_any_ne (vector bool short, vector bool short); 38277 int vec_any_ne (vector bool short, vector unsigned short); 38278 int vec_any_ne (vector bool short, vector signed short); 38279 int vec_any_ne (vector pixel, vector pixel); 38280 int vec_any_ne (vector signed int, vector bool int); 38281 int vec_any_ne (vector signed int, vector signed int); 38282 int vec_any_ne (vector unsigned int, vector bool int); 38283 int vec_any_ne (vector unsigned int, vector unsigned int); 38284 int vec_any_ne (vector bool int, vector bool int); 38285 int vec_any_ne (vector bool int, vector unsigned int); 38286 int vec_any_ne (vector bool int, vector signed int); 38287 int vec_any_ne (vector float, vector float); 38288 38289 int vec_any_nge (vector float, vector float); 38290 38291 int vec_any_ngt (vector float, vector float); 38292 38293 int vec_any_nle (vector float, vector float); 38294 38295 int vec_any_nlt (vector float, vector float); 38296 38297 int vec_any_numeric (vector float); 38298 38299 int vec_any_out (vector float, vector float); 38300 38301 If the vector/scalar (VSX) instruction set is available, the following 38302additional functions are available: 38303 38304 vector double vec_abs (vector double); 38305 vector double vec_add (vector double, vector double); 38306 vector double vec_and (vector double, vector double); 38307 vector double vec_and (vector double, vector bool long); 38308 vector double vec_and (vector bool long, vector double); 38309 vector long vec_and (vector long, vector long); 38310 vector long vec_and (vector long, vector bool long); 38311 vector long vec_and (vector bool long, vector long); 38312 vector unsigned long vec_and (vector unsigned long, vector unsigned long); 38313 vector unsigned long vec_and (vector unsigned long, vector bool long); 38314 vector unsigned long vec_and (vector bool long, vector unsigned long); 38315 vector double vec_andc (vector double, vector double); 38316 vector double vec_andc (vector double, vector bool long); 38317 vector double vec_andc (vector bool long, vector double); 38318 vector long vec_andc (vector long, vector long); 38319 vector long vec_andc (vector long, vector bool long); 38320 vector long vec_andc (vector bool long, vector long); 38321 vector unsigned long vec_andc (vector unsigned long, vector unsigned long); 38322 vector unsigned long vec_andc (vector unsigned long, vector bool long); 38323 vector unsigned long vec_andc (vector bool long, vector unsigned long); 38324 vector double vec_ceil (vector double); 38325 vector bool long vec_cmpeq (vector double, vector double); 38326 vector bool long vec_cmpge (vector double, vector double); 38327 vector bool long vec_cmpgt (vector double, vector double); 38328 vector bool long vec_cmple (vector double, vector double); 38329 vector bool long vec_cmplt (vector double, vector double); 38330 vector double vec_cpsgn (vector double, vector double); 38331 vector float vec_div (vector float, vector float); 38332 vector double vec_div (vector double, vector double); 38333 vector long vec_div (vector long, vector long); 38334 vector unsigned long vec_div (vector unsigned long, vector unsigned long); 38335 vector double vec_floor (vector double); 38336 vector double vec_ld (int, const vector double *); 38337 vector double vec_ld (int, const double *); 38338 vector double vec_ldl (int, const vector double *); 38339 vector double vec_ldl (int, const double *); 38340 vector unsigned char vec_lvsl (int, const volatile double *); 38341 vector unsigned char vec_lvsr (int, const volatile double *); 38342 vector double vec_madd (vector double, vector double, vector double); 38343 vector double vec_max (vector double, vector double); 38344 vector signed long vec_mergeh (vector signed long, vector signed long); 38345 vector signed long vec_mergeh (vector signed long, vector bool long); 38346 vector signed long vec_mergeh (vector bool long, vector signed long); 38347 vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long); 38348 vector unsigned long vec_mergeh (vector unsigned long, vector bool long); 38349 vector unsigned long vec_mergeh (vector bool long, vector unsigned long); 38350 vector signed long vec_mergel (vector signed long, vector signed long); 38351 vector signed long vec_mergel (vector signed long, vector bool long); 38352 vector signed long vec_mergel (vector bool long, vector signed long); 38353 vector unsigned long vec_mergel (vector unsigned long, vector unsigned long); 38354 vector unsigned long vec_mergel (vector unsigned long, vector bool long); 38355 vector unsigned long vec_mergel (vector bool long, vector unsigned long); 38356 vector double vec_min (vector double, vector double); 38357 vector float vec_msub (vector float, vector float, vector float); 38358 vector double vec_msub (vector double, vector double, vector double); 38359 vector float vec_mul (vector float, vector float); 38360 vector double vec_mul (vector double, vector double); 38361 vector long vec_mul (vector long, vector long); 38362 vector unsigned long vec_mul (vector unsigned long, vector unsigned long); 38363 vector float vec_nearbyint (vector float); 38364 vector double vec_nearbyint (vector double); 38365 vector float vec_nmadd (vector float, vector float, vector float); 38366 vector double vec_nmadd (vector double, vector double, vector double); 38367 vector double vec_nmsub (vector double, vector double, vector double); 38368 vector double vec_nor (vector double, vector double); 38369 vector long vec_nor (vector long, vector long); 38370 vector long vec_nor (vector long, vector bool long); 38371 vector long vec_nor (vector bool long, vector long); 38372 vector unsigned long vec_nor (vector unsigned long, vector unsigned long); 38373 vector unsigned long vec_nor (vector unsigned long, vector bool long); 38374 vector unsigned long vec_nor (vector bool long, vector unsigned long); 38375 vector double vec_or (vector double, vector double); 38376 vector double vec_or (vector double, vector bool long); 38377 vector double vec_or (vector bool long, vector double); 38378 vector long vec_or (vector long, vector long); 38379 vector long vec_or (vector long, vector bool long); 38380 vector long vec_or (vector bool long, vector long); 38381 vector unsigned long vec_or (vector unsigned long, vector unsigned long); 38382 vector unsigned long vec_or (vector unsigned long, vector bool long); 38383 vector unsigned long vec_or (vector bool long, vector unsigned long); 38384 vector double vec_perm (vector double, vector double, vector unsigned char); 38385 vector long vec_perm (vector long, vector long, vector unsigned char); 38386 vector unsigned long vec_perm (vector unsigned long, vector unsigned long, 38387 vector unsigned char); 38388 vector double vec_rint (vector double); 38389 vector double vec_recip (vector double, vector double); 38390 vector double vec_rsqrt (vector double); 38391 vector double vec_rsqrte (vector double); 38392 vector double vec_sel (vector double, vector double, vector bool long); 38393 vector double vec_sel (vector double, vector double, vector unsigned long); 38394 vector long vec_sel (vector long, vector long, vector long); 38395 vector long vec_sel (vector long, vector long, vector unsigned long); 38396 vector long vec_sel (vector long, vector long, vector bool long); 38397 vector unsigned long vec_sel (vector unsigned long, vector unsigned long, 38398 vector long); 38399 vector unsigned long vec_sel (vector unsigned long, vector unsigned long, 38400 vector unsigned long); 38401 vector unsigned long vec_sel (vector unsigned long, vector unsigned long, 38402 vector bool long); 38403 vector double vec_splats (double); 38404 vector signed long vec_splats (signed long); 38405 vector unsigned long vec_splats (unsigned long); 38406 vector float vec_sqrt (vector float); 38407 vector double vec_sqrt (vector double); 38408 void vec_st (vector double, int, vector double *); 38409 void vec_st (vector double, int, double *); 38410 vector double vec_sub (vector double, vector double); 38411 vector double vec_trunc (vector double); 38412 vector double vec_xor (vector double, vector double); 38413 vector double vec_xor (vector double, vector bool long); 38414 vector double vec_xor (vector bool long, vector double); 38415 vector long vec_xor (vector long, vector long); 38416 vector long vec_xor (vector long, vector bool long); 38417 vector long vec_xor (vector bool long, vector long); 38418 vector unsigned long vec_xor (vector unsigned long, vector unsigned long); 38419 vector unsigned long vec_xor (vector unsigned long, vector bool long); 38420 vector unsigned long vec_xor (vector bool long, vector unsigned long); 38421 int vec_all_eq (vector double, vector double); 38422 int vec_all_ge (vector double, vector double); 38423 int vec_all_gt (vector double, vector double); 38424 int vec_all_le (vector double, vector double); 38425 int vec_all_lt (vector double, vector double); 38426 int vec_all_nan (vector double); 38427 int vec_all_ne (vector double, vector double); 38428 int vec_all_nge (vector double, vector double); 38429 int vec_all_ngt (vector double, vector double); 38430 int vec_all_nle (vector double, vector double); 38431 int vec_all_nlt (vector double, vector double); 38432 int vec_all_numeric (vector double); 38433 int vec_any_eq (vector double, vector double); 38434 int vec_any_ge (vector double, vector double); 38435 int vec_any_gt (vector double, vector double); 38436 int vec_any_le (vector double, vector double); 38437 int vec_any_lt (vector double, vector double); 38438 int vec_any_nan (vector double); 38439 int vec_any_ne (vector double, vector double); 38440 int vec_any_nge (vector double, vector double); 38441 int vec_any_ngt (vector double, vector double); 38442 int vec_any_nle (vector double, vector double); 38443 int vec_any_nlt (vector double, vector double); 38444 int vec_any_numeric (vector double); 38445 38446 vector double vec_vsx_ld (int, const vector double *); 38447 vector double vec_vsx_ld (int, const double *); 38448 vector float vec_vsx_ld (int, const vector float *); 38449 vector float vec_vsx_ld (int, const float *); 38450 vector bool int vec_vsx_ld (int, const vector bool int *); 38451 vector signed int vec_vsx_ld (int, const vector signed int *); 38452 vector signed int vec_vsx_ld (int, const int *); 38453 vector signed int vec_vsx_ld (int, const long *); 38454 vector unsigned int vec_vsx_ld (int, const vector unsigned int *); 38455 vector unsigned int vec_vsx_ld (int, const unsigned int *); 38456 vector unsigned int vec_vsx_ld (int, const unsigned long *); 38457 vector bool short vec_vsx_ld (int, const vector bool short *); 38458 vector pixel vec_vsx_ld (int, const vector pixel *); 38459 vector signed short vec_vsx_ld (int, const vector signed short *); 38460 vector signed short vec_vsx_ld (int, const short *); 38461 vector unsigned short vec_vsx_ld (int, const vector unsigned short *); 38462 vector unsigned short vec_vsx_ld (int, const unsigned short *); 38463 vector bool char vec_vsx_ld (int, const vector bool char *); 38464 vector signed char vec_vsx_ld (int, const vector signed char *); 38465 vector signed char vec_vsx_ld (int, const signed char *); 38466 vector unsigned char vec_vsx_ld (int, const vector unsigned char *); 38467 vector unsigned char vec_vsx_ld (int, const unsigned char *); 38468 38469 void vec_vsx_st (vector double, int, vector double *); 38470 void vec_vsx_st (vector double, int, double *); 38471 void vec_vsx_st (vector float, int, vector float *); 38472 void vec_vsx_st (vector float, int, float *); 38473 void vec_vsx_st (vector signed int, int, vector signed int *); 38474 void vec_vsx_st (vector signed int, int, int *); 38475 void vec_vsx_st (vector unsigned int, int, vector unsigned int *); 38476 void vec_vsx_st (vector unsigned int, int, unsigned int *); 38477 void vec_vsx_st (vector bool int, int, vector bool int *); 38478 void vec_vsx_st (vector bool int, int, unsigned int *); 38479 void vec_vsx_st (vector bool int, int, int *); 38480 void vec_vsx_st (vector signed short, int, vector signed short *); 38481 void vec_vsx_st (vector signed short, int, short *); 38482 void vec_vsx_st (vector unsigned short, int, vector unsigned short *); 38483 void vec_vsx_st (vector unsigned short, int, unsigned short *); 38484 void vec_vsx_st (vector bool short, int, vector bool short *); 38485 void vec_vsx_st (vector bool short, int, unsigned short *); 38486 void vec_vsx_st (vector pixel, int, vector pixel *); 38487 void vec_vsx_st (vector pixel, int, unsigned short *); 38488 void vec_vsx_st (vector pixel, int, short *); 38489 void vec_vsx_st (vector bool short, int, short *); 38490 void vec_vsx_st (vector signed char, int, vector signed char *); 38491 void vec_vsx_st (vector signed char, int, signed char *); 38492 void vec_vsx_st (vector unsigned char, int, vector unsigned char *); 38493 void vec_vsx_st (vector unsigned char, int, unsigned char *); 38494 void vec_vsx_st (vector bool char, int, vector bool char *); 38495 void vec_vsx_st (vector bool char, int, unsigned char *); 38496 void vec_vsx_st (vector bool char, int, signed char *); 38497 38498 vector double vec_xxpermdi (vector double, vector double, int); 38499 vector float vec_xxpermdi (vector float, vector float, int); 38500 vector long long vec_xxpermdi (vector long long, vector long long, int); 38501 vector unsigned long long vec_xxpermdi (vector unsigned long long, 38502 vector unsigned long long, int); 38503 vector int vec_xxpermdi (vector int, vector int, int); 38504 vector unsigned int vec_xxpermdi (vector unsigned int, 38505 vector unsigned int, int); 38506 vector short vec_xxpermdi (vector short, vector short, int); 38507 vector unsigned short vec_xxpermdi (vector unsigned short, 38508 vector unsigned short, int); 38509 vector signed char vec_xxpermdi (vector signed char, vector signed char, int); 38510 vector unsigned char vec_xxpermdi (vector unsigned char, 38511 vector unsigned char, int); 38512 38513 vector double vec_xxsldi (vector double, vector double, int); 38514 vector float vec_xxsldi (vector float, vector float, int); 38515 vector long long vec_xxsldi (vector long long, vector long long, int); 38516 vector unsigned long long vec_xxsldi (vector unsigned long long, 38517 vector unsigned long long, int); 38518 vector int vec_xxsldi (vector int, vector int, int); 38519 vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int); 38520 vector short vec_xxsldi (vector short, vector short, int); 38521 vector unsigned short vec_xxsldi (vector unsigned short, 38522 vector unsigned short, int); 38523 vector signed char vec_xxsldi (vector signed char, vector signed char, int); 38524 vector unsigned char vec_xxsldi (vector unsigned char, 38525 vector unsigned char, int); 38526 38527 Note that the `vec_ld' and `vec_st' built-in functions always generate 38528the AltiVec `LVX' and `STVX' instructions even if the VSX instruction 38529set is available. The `vec_vsx_ld' and `vec_vsx_st' built-in functions 38530always generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X' 38531instructions. 38532 38533 If the ISA 2.07 additions to the vector/scalar (power8-vector) 38534instruction set is available, the following additional functions are 38535available for both 32-bit and 64-bit targets. For 64-bit targets, you 38536can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG 38537instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of 38538VECTOR UNSIGNED LONG LONG. 38539 38540 vector long long vec_abs (vector long long); 38541 38542 vector long long vec_add (vector long long, vector long long); 38543 vector unsigned long long vec_add (vector unsigned long long, 38544 vector unsigned long long); 38545 38546 int vec_all_eq (vector long long, vector long long); 38547 int vec_all_eq (vector unsigned long long, vector unsigned long long); 38548 int vec_all_ge (vector long long, vector long long); 38549 int vec_all_ge (vector unsigned long long, vector unsigned long long); 38550 int vec_all_gt (vector long long, vector long long); 38551 int vec_all_gt (vector unsigned long long, vector unsigned long long); 38552 int vec_all_le (vector long long, vector long long); 38553 int vec_all_le (vector unsigned long long, vector unsigned long long); 38554 int vec_all_lt (vector long long, vector long long); 38555 int vec_all_lt (vector unsigned long long, vector unsigned long long); 38556 int vec_all_ne (vector long long, vector long long); 38557 int vec_all_ne (vector unsigned long long, vector unsigned long long); 38558 38559 int vec_any_eq (vector long long, vector long long); 38560 int vec_any_eq (vector unsigned long long, vector unsigned long long); 38561 int vec_any_ge (vector long long, vector long long); 38562 int vec_any_ge (vector unsigned long long, vector unsigned long long); 38563 int vec_any_gt (vector long long, vector long long); 38564 int vec_any_gt (vector unsigned long long, vector unsigned long long); 38565 int vec_any_le (vector long long, vector long long); 38566 int vec_any_le (vector unsigned long long, vector unsigned long long); 38567 int vec_any_lt (vector long long, vector long long); 38568 int vec_any_lt (vector unsigned long long, vector unsigned long long); 38569 int vec_any_ne (vector long long, vector long long); 38570 int vec_any_ne (vector unsigned long long, vector unsigned long long); 38571 38572 vector long long vec_eqv (vector long long, vector long long); 38573 vector long long vec_eqv (vector bool long long, vector long long); 38574 vector long long vec_eqv (vector long long, vector bool long long); 38575 vector unsigned long long vec_eqv (vector unsigned long long, 38576 vector unsigned long long); 38577 vector unsigned long long vec_eqv (vector bool long long, 38578 vector unsigned long long); 38579 vector unsigned long long vec_eqv (vector unsigned long long, 38580 vector bool long long); 38581 vector int vec_eqv (vector int, vector int); 38582 vector int vec_eqv (vector bool int, vector int); 38583 vector int vec_eqv (vector int, vector bool int); 38584 vector unsigned int vec_eqv (vector unsigned int, vector unsigned int); 38585 vector unsigned int vec_eqv (vector bool unsigned int, 38586 vector unsigned int); 38587 vector unsigned int vec_eqv (vector unsigned int, 38588 vector bool unsigned int); 38589 vector short vec_eqv (vector short, vector short); 38590 vector short vec_eqv (vector bool short, vector short); 38591 vector short vec_eqv (vector short, vector bool short); 38592 vector unsigned short vec_eqv (vector unsigned short, vector unsigned short); 38593 vector unsigned short vec_eqv (vector bool unsigned short, 38594 vector unsigned short); 38595 vector unsigned short vec_eqv (vector unsigned short, 38596 vector bool unsigned short); 38597 vector signed char vec_eqv (vector signed char, vector signed char); 38598 vector signed char vec_eqv (vector bool signed char, vector signed char); 38599 vector signed char vec_eqv (vector signed char, vector bool signed char); 38600 vector unsigned char vec_eqv (vector unsigned char, vector unsigned char); 38601 vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char); 38602 vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char); 38603 38604 vector long long vec_max (vector long long, vector long long); 38605 vector unsigned long long vec_max (vector unsigned long long, 38606 vector unsigned long long); 38607 38608 vector signed int vec_mergee (vector signed int, vector signed int); 38609 vector unsigned int vec_mergee (vector unsigned int, vector unsigned int); 38610 vector bool int vec_mergee (vector bool int, vector bool int); 38611 38612 vector signed int vec_mergeo (vector signed int, vector signed int); 38613 vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int); 38614 vector bool int vec_mergeo (vector bool int, vector bool int); 38615 38616 vector long long vec_min (vector long long, vector long long); 38617 vector unsigned long long vec_min (vector unsigned long long, 38618 vector unsigned long long); 38619 38620 vector long long vec_nand (vector long long, vector long long); 38621 vector long long vec_nand (vector bool long long, vector long long); 38622 vector long long vec_nand (vector long long, vector bool long long); 38623 vector unsigned long long vec_nand (vector unsigned long long, 38624 vector unsigned long long); 38625 vector unsigned long long vec_nand (vector bool long long, 38626 vector unsigned long long); 38627 vector unsigned long long vec_nand (vector unsigned long long, 38628 vector bool long long); 38629 vector int vec_nand (vector int, vector int); 38630 vector int vec_nand (vector bool int, vector int); 38631 vector int vec_nand (vector int, vector bool int); 38632 vector unsigned int vec_nand (vector unsigned int, vector unsigned int); 38633 vector unsigned int vec_nand (vector bool unsigned int, 38634 vector unsigned int); 38635 vector unsigned int vec_nand (vector unsigned int, 38636 vector bool unsigned int); 38637 vector short vec_nand (vector short, vector short); 38638 vector short vec_nand (vector bool short, vector short); 38639 vector short vec_nand (vector short, vector bool short); 38640 vector unsigned short vec_nand (vector unsigned short, vector unsigned short); 38641 vector unsigned short vec_nand (vector bool unsigned short, 38642 vector unsigned short); 38643 vector unsigned short vec_nand (vector unsigned short, 38644 vector bool unsigned short); 38645 vector signed char vec_nand (vector signed char, vector signed char); 38646 vector signed char vec_nand (vector bool signed char, vector signed char); 38647 vector signed char vec_nand (vector signed char, vector bool signed char); 38648 vector unsigned char vec_nand (vector unsigned char, vector unsigned char); 38649 vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char); 38650 vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char); 38651 38652 vector long long vec_orc (vector long long, vector long long); 38653 vector long long vec_orc (vector bool long long, vector long long); 38654 vector long long vec_orc (vector long long, vector bool long long); 38655 vector unsigned long long vec_orc (vector unsigned long long, 38656 vector unsigned long long); 38657 vector unsigned long long vec_orc (vector bool long long, 38658 vector unsigned long long); 38659 vector unsigned long long vec_orc (vector unsigned long long, 38660 vector bool long long); 38661 vector int vec_orc (vector int, vector int); 38662 vector int vec_orc (vector bool int, vector int); 38663 vector int vec_orc (vector int, vector bool int); 38664 vector unsigned int vec_orc (vector unsigned int, vector unsigned int); 38665 vector unsigned int vec_orc (vector bool unsigned int, 38666 vector unsigned int); 38667 vector unsigned int vec_orc (vector unsigned int, 38668 vector bool unsigned int); 38669 vector short vec_orc (vector short, vector short); 38670 vector short vec_orc (vector bool short, vector short); 38671 vector short vec_orc (vector short, vector bool short); 38672 vector unsigned short vec_orc (vector unsigned short, vector unsigned short); 38673 vector unsigned short vec_orc (vector bool unsigned short, 38674 vector unsigned short); 38675 vector unsigned short vec_orc (vector unsigned short, 38676 vector bool unsigned short); 38677 vector signed char vec_orc (vector signed char, vector signed char); 38678 vector signed char vec_orc (vector bool signed char, vector signed char); 38679 vector signed char vec_orc (vector signed char, vector bool signed char); 38680 vector unsigned char vec_orc (vector unsigned char, vector unsigned char); 38681 vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char); 38682 vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char); 38683 38684 vector int vec_pack (vector long long, vector long long); 38685 vector unsigned int vec_pack (vector unsigned long long, 38686 vector unsigned long long); 38687 vector bool int vec_pack (vector bool long long, vector bool long long); 38688 38689 vector int vec_packs (vector long long, vector long long); 38690 vector unsigned int vec_packs (vector unsigned long long, 38691 vector unsigned long long); 38692 38693 vector unsigned int vec_packsu (vector long long, vector long long); 38694 vector unsigned int vec_packsu (vector unsigned long long, 38695 vector unsigned long long); 38696 38697 vector long long vec_rl (vector long long, 38698 vector unsigned long long); 38699 vector long long vec_rl (vector unsigned long long, 38700 vector unsigned long long); 38701 38702 vector long long vec_sl (vector long long, vector unsigned long long); 38703 vector long long vec_sl (vector unsigned long long, 38704 vector unsigned long long); 38705 38706 vector long long vec_sr (vector long long, vector unsigned long long); 38707 vector unsigned long long char vec_sr (vector unsigned long long, 38708 vector unsigned long long); 38709 38710 vector long long vec_sra (vector long long, vector unsigned long long); 38711 vector unsigned long long vec_sra (vector unsigned long long, 38712 vector unsigned long long); 38713 38714 vector long long vec_sub (vector long long, vector long long); 38715 vector unsigned long long vec_sub (vector unsigned long long, 38716 vector unsigned long long); 38717 38718 vector long long vec_unpackh (vector int); 38719 vector unsigned long long vec_unpackh (vector unsigned int); 38720 38721 vector long long vec_unpackl (vector int); 38722 vector unsigned long long vec_unpackl (vector unsigned int); 38723 38724 vector long long vec_vaddudm (vector long long, vector long long); 38725 vector long long vec_vaddudm (vector bool long long, vector long long); 38726 vector long long vec_vaddudm (vector long long, vector bool long long); 38727 vector unsigned long long vec_vaddudm (vector unsigned long long, 38728 vector unsigned long long); 38729 vector unsigned long long vec_vaddudm (vector bool unsigned long long, 38730 vector unsigned long long); 38731 vector unsigned long long vec_vaddudm (vector unsigned long long, 38732 vector bool unsigned long long); 38733 38734 vector long long vec_vbpermq (vector signed char, vector signed char); 38735 vector long long vec_vbpermq (vector unsigned char, vector unsigned char); 38736 38737 vector long long vec_cntlz (vector long long); 38738 vector unsigned long long vec_cntlz (vector unsigned long long); 38739 vector int vec_cntlz (vector int); 38740 vector unsigned int vec_cntlz (vector int); 38741 vector short vec_cntlz (vector short); 38742 vector unsigned short vec_cntlz (vector unsigned short); 38743 vector signed char vec_cntlz (vector signed char); 38744 vector unsigned char vec_cntlz (vector unsigned char); 38745 38746 vector long long vec_vclz (vector long long); 38747 vector unsigned long long vec_vclz (vector unsigned long long); 38748 vector int vec_vclz (vector int); 38749 vector unsigned int vec_vclz (vector int); 38750 vector short vec_vclz (vector short); 38751 vector unsigned short vec_vclz (vector unsigned short); 38752 vector signed char vec_vclz (vector signed char); 38753 vector unsigned char vec_vclz (vector unsigned char); 38754 38755 vector signed char vec_vclzb (vector signed char); 38756 vector unsigned char vec_vclzb (vector unsigned char); 38757 38758 vector long long vec_vclzd (vector long long); 38759 vector unsigned long long vec_vclzd (vector unsigned long long); 38760 38761 vector short vec_vclzh (vector short); 38762 vector unsigned short vec_vclzh (vector unsigned short); 38763 38764 vector int vec_vclzw (vector int); 38765 vector unsigned int vec_vclzw (vector int); 38766 38767 vector signed char vec_vgbbd (vector signed char); 38768 vector unsigned char vec_vgbbd (vector unsigned char); 38769 38770 vector long long vec_vmaxsd (vector long long, vector long long); 38771 38772 vector unsigned long long vec_vmaxud (vector unsigned long long, 38773 unsigned vector long long); 38774 38775 vector long long vec_vminsd (vector long long, vector long long); 38776 38777 vector unsigned long long vec_vminud (vector long long, 38778 vector long long); 38779 38780 vector int vec_vpksdss (vector long long, vector long long); 38781 vector unsigned int vec_vpksdss (vector long long, vector long long); 38782 38783 vector unsigned int vec_vpkudus (vector unsigned long long, 38784 vector unsigned long long); 38785 38786 vector int vec_vpkudum (vector long long, vector long long); 38787 vector unsigned int vec_vpkudum (vector unsigned long long, 38788 vector unsigned long long); 38789 vector bool int vec_vpkudum (vector bool long long, vector bool long long); 38790 38791 vector long long vec_vpopcnt (vector long long); 38792 vector unsigned long long vec_vpopcnt (vector unsigned long long); 38793 vector int vec_vpopcnt (vector int); 38794 vector unsigned int vec_vpopcnt (vector int); 38795 vector short vec_vpopcnt (vector short); 38796 vector unsigned short vec_vpopcnt (vector unsigned short); 38797 vector signed char vec_vpopcnt (vector signed char); 38798 vector unsigned char vec_vpopcnt (vector unsigned char); 38799 38800 vector signed char vec_vpopcntb (vector signed char); 38801 vector unsigned char vec_vpopcntb (vector unsigned char); 38802 38803 vector long long vec_vpopcntd (vector long long); 38804 vector unsigned long long vec_vpopcntd (vector unsigned long long); 38805 38806 vector short vec_vpopcnth (vector short); 38807 vector unsigned short vec_vpopcnth (vector unsigned short); 38808 38809 vector int vec_vpopcntw (vector int); 38810 vector unsigned int vec_vpopcntw (vector int); 38811 38812 vector long long vec_vrld (vector long long, vector unsigned long long); 38813 vector unsigned long long vec_vrld (vector unsigned long long, 38814 vector unsigned long long); 38815 38816 vector long long vec_vsld (vector long long, vector unsigned long long); 38817 vector long long vec_vsld (vector unsigned long long, 38818 vector unsigned long long); 38819 38820 vector long long vec_vsrad (vector long long, vector unsigned long long); 38821 vector unsigned long long vec_vsrad (vector unsigned long long, 38822 vector unsigned long long); 38823 38824 vector long long vec_vsrd (vector long long, vector unsigned long long); 38825 vector unsigned long long char vec_vsrd (vector unsigned long long, 38826 vector unsigned long long); 38827 38828 vector long long vec_vsubudm (vector long long, vector long long); 38829 vector long long vec_vsubudm (vector bool long long, vector long long); 38830 vector long long vec_vsubudm (vector long long, vector bool long long); 38831 vector unsigned long long vec_vsubudm (vector unsigned long long, 38832 vector unsigned long long); 38833 vector unsigned long long vec_vsubudm (vector bool long long, 38834 vector unsigned long long); 38835 vector unsigned long long vec_vsubudm (vector unsigned long long, 38836 vector bool long long); 38837 38838 vector long long vec_vupkhsw (vector int); 38839 vector unsigned long long vec_vupkhsw (vector unsigned int); 38840 38841 vector long long vec_vupklsw (vector int); 38842 vector unsigned long long vec_vupklsw (vector int); 38843 38844 If the ISA 2.07 additions to the vector/scalar (power8-vector) 38845instruction set is available, the following additional functions are 38846available for 64-bit targets. New vector types (VECTOR __INT128_T and 38847VECTOR __UINT128_T) are available to hold the __INT128_T and 38848__UINT128_T types to use these builtins. 38849 38850 The normal vector extract, and set operations work on VECTOR 38851__INT128_T and VECTOR __UINT128_T types, but the index value must be 0. 38852 38853 vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t); 38854 vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t); 38855 38856 vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t); 38857 vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t); 38858 38859 vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t, 38860 vector __int128_t); 38861 vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t, 38862 vector __uint128_t); 38863 38864 vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t, 38865 vector __int128_t); 38866 vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t, 38867 vector __uint128_t); 38868 38869 vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t, 38870 vector __int128_t); 38871 vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t, 38872 vector __uint128_t); 38873 38874 vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t, 38875 vector __int128_t); 38876 vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t, 38877 vector __uint128_t); 38878 38879 vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t); 38880 vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t); 38881 38882 __int128_t vec_vsubuqm (__int128_t, __int128_t); 38883 __uint128_t vec_vsubuqm (__uint128_t, __uint128_t); 38884 38885 vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t); 38886 int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t); 38887 int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t); 38888 int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t); 38889 int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t); 38890 vector __int128_t bcdsub (vector __int128_t, vector__int128_t); 38891 int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t); 38892 int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t); 38893 int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t); 38894 int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t); 38895 38896 If the cryptographic instructions are enabled (`-mcrypto' or 38897`-mcpu=power8'), the following builtins are enabled. 38898 38899 vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long); 38900 38901 vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long, 38902 vector unsigned long long); 38903 38904 vector unsigned long long __builtin_crypto_vcipherlast 38905 (vector unsigned long long, 38906 vector unsigned long long); 38907 38908 vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long, 38909 vector unsigned long long); 38910 38911 vector unsigned long long __builtin_crypto_vncipherlast 38912 (vector unsigned long long, 38913 vector unsigned long long); 38914 38915 vector unsigned char __builtin_crypto_vpermxor (vector unsigned char, 38916 vector unsigned char, 38917 vector unsigned char); 38918 38919 vector unsigned short __builtin_crypto_vpermxor (vector unsigned short, 38920 vector unsigned short, 38921 vector unsigned short); 38922 38923 vector unsigned int __builtin_crypto_vpermxor (vector unsigned int, 38924 vector unsigned int, 38925 vector unsigned int); 38926 38927 vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long, 38928 vector unsigned long long, 38929 vector unsigned long long); 38930 38931 vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char, 38932 vector unsigned char); 38933 38934 vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short, 38935 vector unsigned short); 38936 38937 vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int, 38938 vector unsigned int); 38939 38940 vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long, 38941 vector unsigned long long); 38942 38943 vector unsigned long long __builtin_crypto_vshasigmad 38944 (vector unsigned long long, int, int); 38945 38946 vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int, 38947 int, int); 38948 38949 The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and 38950__BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant 38951integer that is 0 or 1. The third argument to these builtin functions 38952must be a constant integer in the range of 0 to 15. 38953 38954 38955File: gcc.info, Node: PowerPC Hardware Transactional Memory Built-in Functions, Next: RX Built-in Functions, Prev: PowerPC AltiVec/VSX Built-in Functions, Up: Target Builtins 38956 389576.58.21 PowerPC Hardware Transactional Memory Built-in Functions 38958---------------------------------------------------------------- 38959 38960GCC provides two interfaces for accessing the Hardware Transactional 38961Memory (HTM) instructions available on some of the PowerPC family of 38962processors (eg, POWER8). The two interfaces come in a low level 38963interface, consisting of built-in functions specific to PowerPC and a 38964higher level interface consisting of inline functions that are common 38965between PowerPC and S/390. 38966 389676.58.21.1 PowerPC HTM Low Level Built-in Functions 38968.................................................. 38969 38970The following low level built-in functions are available with `-mhtm' 38971or `-mcpu=CPU' where CPU is `power8' or later. They all generate the 38972machine instruction that is part of the name. 38973 38974 The HTM builtins (with the exception of `__builtin_tbegin') return the 38975full 4-bit condition register value set by their associated hardware 38976instruction. The header file `htmintrin.h' defines some macros that can 38977be used to decipher the return value. The `__builtin_tbegin' builtin 38978returns a simple true or false value depending on whether a transaction 38979was successfully started or not. The arguments of the builtins match 38980exactly the type and order of the associated hardware instruction's 38981operands, except for the `__builtin_tcheck' builtin, which does not 38982take any input arguments. Refer to the ISA manual for a description of 38983each instruction's operands. 38984 38985 unsigned int __builtin_tbegin (unsigned int) 38986 unsigned int __builtin_tend (unsigned int) 38987 38988 unsigned int __builtin_tabort (unsigned int) 38989 unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int) 38990 unsigned int __builtin_tabortdci (unsigned int, unsigned int, int) 38991 unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int) 38992 unsigned int __builtin_tabortwci (unsigned int, unsigned int, int) 38993 38994 unsigned int __builtin_tcheck (void) 38995 unsigned int __builtin_treclaim (unsigned int) 38996 unsigned int __builtin_trechkpt (void) 38997 unsigned int __builtin_tsr (unsigned int) 38998 38999 In addition to the above HTM built-ins, we have added built-ins for 39000some common extended mnemonics of the HTM instructions: 39001 39002 unsigned int __builtin_tendall (void) 39003 unsigned int __builtin_tresume (void) 39004 unsigned int __builtin_tsuspend (void) 39005 39006 Note that the semantics of the above HTM builtins are required to mimic 39007the locking semantics used for critical sections. Builtins that are 39008used to create a new transaction or restart a suspended transaction 39009must have lock acquisition like semantics while those builtins that end 39010or suspend a transaction must have lock release like semantics. 39011Specifically, this must mimic lock semantics as specified by C++11, for 39012example: Lock acquisition is as-if an execution of 39013__atomic_exchange_n(&globallock,1,__ATOMIC_ACQUIRE) that returns 0, and 39014lock release is as-if an execution of 39015__atomic_store(&globallock,0,__ATOMIC_RELEASE), with globallock being an 39016implicit implementation-defined lock used for all transactions. The HTM 39017instructions associated with with the builtins inherently provide the 39018correct acquisition and release hardware barriers required. However, 39019the compiler must also be prohibited from moving loads and stores across 39020the builtins in a way that would violate their semantics. This has been 39021accomplished by adding memory barriers to the associated HTM 39022instructions (which is a conservative approach to provide acquire and 39023release semantics). Earlier versions of the compiler did not treat the 39024HTM instructions as memory barriers. A `__TM_FENCE__' macro has been 39025added, which can be used to determine whether the current compiler 39026treats HTM instructions as memory barriers or not. This allows the 39027user to explicitly add memory barriers to their code when using an 39028older version of the compiler. 39029 39030 The following set of built-in functions are available to gain access 39031to the HTM specific special purpose registers. 39032 39033 unsigned long __builtin_get_texasr (void) 39034 unsigned long __builtin_get_texasru (void) 39035 unsigned long __builtin_get_tfhar (void) 39036 unsigned long __builtin_get_tfiar (void) 39037 39038 void __builtin_set_texasr (unsigned long); 39039 void __builtin_set_texasru (unsigned long); 39040 void __builtin_set_tfhar (unsigned long); 39041 void __builtin_set_tfiar (unsigned long); 39042 39043 Example usage of these low level built-in functions may look like: 39044 39045 #include <htmintrin.h> 39046 39047 int num_retries = 10; 39048 39049 while (1) 39050 { 39051 if (__builtin_tbegin (0)) 39052 { 39053 /* Transaction State Initiated. */ 39054 if (is_locked (lock)) 39055 __builtin_tabort (0); 39056 ... transaction code... 39057 __builtin_tend (0); 39058 break; 39059 } 39060 else 39061 { 39062 /* Transaction State Failed. Use locks if the transaction 39063 failure is "persistent" or we've tried too many times. */ 39064 if (num_retries-- <= 0 39065 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ())) 39066 { 39067 acquire_lock (lock); 39068 ... non transactional fallback path... 39069 release_lock (lock); 39070 break; 39071 } 39072 } 39073 } 39074 39075 One final built-in function has been added that returns the value of 39076the 2-bit Transaction State field of the Machine Status Register (MSR) 39077as stored in `CR0'. 39078 39079 unsigned long __builtin_ttest (void) 39080 39081 This built-in can be used to determine the current transaction state 39082using the following code example: 39083 39084 #include <htmintrin.h> 39085 39086 unsigned char tx_state = _HTM_STATE (__builtin_ttest ()); 39087 39088 if (tx_state == _HTM_TRANSACTIONAL) 39089 { 39090 /* Code to use in transactional state. */ 39091 } 39092 else if (tx_state == _HTM_NONTRANSACTIONAL) 39093 { 39094 /* Code to use in non-transactional state. */ 39095 } 39096 else if (tx_state == _HTM_SUSPENDED) 39097 { 39098 /* Code to use in transaction suspended state. */ 39099 } 39100 391016.58.21.2 PowerPC HTM High Level Inline Functions 39102................................................. 39103 39104The following high level HTM interface is made available by including 39105`<htmxlintrin.h>' and using `-mhtm' or `-mcpu=CPU' where CPU is 39106`power8' or later. This interface is common between PowerPC and S/390, 39107allowing users to write one HTM source implementation that can be 39108compiled and executed on either system. 39109 39110 long __TM_simple_begin (void) 39111 long __TM_begin (void* const TM_buff) 39112 long __TM_end (void) 39113 void __TM_abort (void) 39114 void __TM_named_abort (unsigned char const code) 39115 void __TM_resume (void) 39116 void __TM_suspend (void) 39117 39118 long __TM_is_user_abort (void* const TM_buff) 39119 long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code) 39120 long __TM_is_illegal (void* const TM_buff) 39121 long __TM_is_footprint_exceeded (void* const TM_buff) 39122 long __TM_nesting_depth (void* const TM_buff) 39123 long __TM_is_nested_too_deep(void* const TM_buff) 39124 long __TM_is_conflict(void* const TM_buff) 39125 long __TM_is_failure_persistent(void* const TM_buff) 39126 long __TM_failure_address(void* const TM_buff) 39127 long long __TM_failure_code(void* const TM_buff) 39128 39129 Using these common set of HTM inline functions, we can create a more 39130portable version of the HTM example in the previous section that will 39131work on either PowerPC or S/390: 39132 39133 #include <htmxlintrin.h> 39134 39135 int num_retries = 10; 39136 TM_buff_type TM_buff; 39137 39138 while (1) 39139 { 39140 if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED) 39141 { 39142 /* Transaction State Initiated. */ 39143 if (is_locked (lock)) 39144 __TM_abort (); 39145 ... transaction code... 39146 __TM_end (); 39147 break; 39148 } 39149 else 39150 { 39151 /* Transaction State Failed. Use locks if the transaction 39152 failure is "persistent" or we've tried too many times. */ 39153 if (num_retries-- <= 0 39154 || __TM_is_failure_persistent (TM_buff)) 39155 { 39156 acquire_lock (lock); 39157 ... non transactional fallback path... 39158 release_lock (lock); 39159 break; 39160 } 39161 } 39162 } 39163 39164 39165File: gcc.info, Node: RX Built-in Functions, Next: S/390 System z Built-in Functions, Prev: PowerPC Hardware Transactional Memory Built-in Functions, Up: Target Builtins 39166 391676.58.22 RX Built-in Functions 39168----------------------------- 39169 39170GCC supports some of the RX instructions which cannot be expressed in 39171the C programming language via the use of built-in functions. The 39172following functions are supported: 39173 39174 -- Built-in Function: void __builtin_rx_brk (void) 39175 Generates the `brk' machine instruction. 39176 39177 -- Built-in Function: void __builtin_rx_clrpsw (int) 39178 Generates the `clrpsw' machine instruction to clear the specified 39179 bit in the processor status word. 39180 39181 -- Built-in Function: void __builtin_rx_int (int) 39182 Generates the `int' machine instruction to generate an interrupt 39183 with the specified value. 39184 39185 -- Built-in Function: void __builtin_rx_machi (int, int) 39186 Generates the `machi' machine instruction to add the result of 39187 multiplying the top 16 bits of the two arguments into the 39188 accumulator. 39189 39190 -- Built-in Function: void __builtin_rx_maclo (int, int) 39191 Generates the `maclo' machine instruction to add the result of 39192 multiplying the bottom 16 bits of the two arguments into the 39193 accumulator. 39194 39195 -- Built-in Function: void __builtin_rx_mulhi (int, int) 39196 Generates the `mulhi' machine instruction to place the result of 39197 multiplying the top 16 bits of the two arguments into the 39198 accumulator. 39199 39200 -- Built-in Function: void __builtin_rx_mullo (int, int) 39201 Generates the `mullo' machine instruction to place the result of 39202 multiplying the bottom 16 bits of the two arguments into the 39203 accumulator. 39204 39205 -- Built-in Function: int __builtin_rx_mvfachi (void) 39206 Generates the `mvfachi' machine instruction to read the top 32 39207 bits of the accumulator. 39208 39209 -- Built-in Function: int __builtin_rx_mvfacmi (void) 39210 Generates the `mvfacmi' machine instruction to read the middle 32 39211 bits of the accumulator. 39212 39213 -- Built-in Function: int __builtin_rx_mvfc (int) 39214 Generates the `mvfc' machine instruction which reads the control 39215 register specified in its argument and returns its value. 39216 39217 -- Built-in Function: void __builtin_rx_mvtachi (int) 39218 Generates the `mvtachi' machine instruction to set the top 32 bits 39219 of the accumulator. 39220 39221 -- Built-in Function: void __builtin_rx_mvtaclo (int) 39222 Generates the `mvtaclo' machine instruction to set the bottom 32 39223 bits of the accumulator. 39224 39225 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val) 39226 Generates the `mvtc' machine instruction which sets control 39227 register number `reg' to `val'. 39228 39229 -- Built-in Function: void __builtin_rx_mvtipl (int) 39230 Generates the `mvtipl' machine instruction set the interrupt 39231 priority level. 39232 39233 -- Built-in Function: void __builtin_rx_racw (int) 39234 Generates the `racw' machine instruction to round the accumulator 39235 according to the specified mode. 39236 39237 -- Built-in Function: int __builtin_rx_revw (int) 39238 Generates the `revw' machine instruction which swaps the bytes in 39239 the argument so that bits 0-7 now occupy bits 8-15 and vice versa, 39240 and also bits 16-23 occupy bits 24-31 and vice versa. 39241 39242 -- Built-in Function: void __builtin_rx_rmpa (void) 39243 Generates the `rmpa' machine instruction which initiates a 39244 repeated multiply and accumulate sequence. 39245 39246 -- Built-in Function: void __builtin_rx_round (float) 39247 Generates the `round' machine instruction which returns the 39248 floating-point argument rounded according to the current rounding 39249 mode set in the floating-point status word register. 39250 39251 -- Built-in Function: int __builtin_rx_sat (int) 39252 Generates the `sat' machine instruction which returns the 39253 saturated value of the argument. 39254 39255 -- Built-in Function: void __builtin_rx_setpsw (int) 39256 Generates the `setpsw' machine instruction to set the specified 39257 bit in the processor status word. 39258 39259 -- Built-in Function: void __builtin_rx_wait (void) 39260 Generates the `wait' machine instruction. 39261 39262 39263File: gcc.info, Node: S/390 System z Built-in Functions, Next: SH Built-in Functions, Prev: RX Built-in Functions, Up: Target Builtins 39264 392656.58.23 S/390 System z Built-in Functions 39266----------------------------------------- 39267 39268 -- Built-in Function: int __builtin_tbegin (void*) 39269 Generates the `tbegin' machine instruction starting a 39270 non-constraint hardware transaction. If the parameter is non-NULL 39271 the memory area is used to store the transaction diagnostic buffer 39272 and will be passed as first operand to `tbegin'. This buffer can 39273 be defined using the `struct __htm_tdb' C struct defined in 39274 `htmintrin.h' and must reside on a double-word boundary. The 39275 second tbegin operand is set to `0xff0c'. This enables 39276 save/restore of all GPRs and disables aborts for FPR and AR 39277 manipulations inside the transaction body. The condition code set 39278 by the tbegin instruction is returned as integer value. The tbegin 39279 instruction by definition overwrites the content of all FPRs. The 39280 compiler will generate code which saves and restores the FPRs. For 39281 soft-float code it is recommended to used the `*_nofloat' variant. 39282 In order to prevent a TDB from being written it is required to 39283 pass an constant zero value as parameter. Passing the zero value 39284 through a variable is not sufficient. Although modifications of 39285 access registers inside the transaction will not trigger an 39286 transaction abort it is not supported to actually modify them. 39287 Access registers do not get saved when entering a transaction. 39288 They will have undefined state when reaching the abort code. 39289 39290 Macros for the possible return codes of tbegin are defined in the 39291`htmintrin.h' header file: 39292 39293`_HTM_TBEGIN_STARTED' 39294 `tbegin' has been executed as part of normal processing. The 39295 transaction body is supposed to be executed. 39296 39297`_HTM_TBEGIN_INDETERMINATE' 39298 The transaction was aborted due to an indeterminate condition which 39299 might be persistent. 39300 39301`_HTM_TBEGIN_TRANSIENT' 39302 The transaction aborted due to a transient failure. The 39303 transaction should be re-executed in that case. 39304 39305`_HTM_TBEGIN_PERSISTENT' 39306 The transaction aborted due to a persistent failure. Re-execution 39307 under same circumstances will not be productive. 39308 39309 -- Macro: _HTM_FIRST_USER_ABORT_CODE 39310 The `_HTM_FIRST_USER_ABORT_CODE' defined in `htmintrin.h' 39311 specifies the first abort code which can be used for 39312 `__builtin_tabort'. Values below this threshold are reserved for 39313 machine use. 39314 39315 -- Data type: struct __htm_tdb 39316 The `struct __htm_tdb' defined in `htmintrin.h' describes the 39317 structure of the transaction diagnostic block as specified in the 39318 Principles of Operation manual chapter 5-91. 39319 39320 -- Built-in Function: int __builtin_tbegin_nofloat (void*) 39321 Same as `__builtin_tbegin' but without FPR saves and restores. 39322 Using this variant in code making use of FPRs will leave the FPRs 39323 in undefined state when entering the transaction abort handler 39324 code. 39325 39326 -- Built-in Function: int __builtin_tbegin_retry (void*, int) 39327 In addition to `__builtin_tbegin' a loop for transient failures is 39328 generated. If tbegin returns a condition code of 2 the transaction 39329 will be retried as often as specified in the second argument. The 39330 perform processor assist instruction is used to tell the CPU about 39331 the number of fails so far. 39332 39333 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int) 39334 Same as `__builtin_tbegin_retry' but without FPR saves and 39335 restores. Using this variant in code making use of FPRs will leave 39336 the FPRs in undefined state when entering the transaction abort 39337 handler code. 39338 39339 -- Built-in Function: void __builtin_tbeginc (void) 39340 Generates the `tbeginc' machine instruction starting a constraint 39341 hardware transaction. The second operand is set to `0xff08'. 39342 39343 -- Built-in Function: int __builtin_tend (void) 39344 Generates the `tend' machine instruction finishing a transaction 39345 and making the changes visible to other threads. The condition 39346 code generated by tend is returned as integer value. 39347 39348 -- Built-in Function: void __builtin_tabort (int) 39349 Generates the `tabort' machine instruction with the specified 39350 abort code. Abort codes from 0 through 255 are reserved and will 39351 result in an error message. 39352 39353 -- Built-in Function: void __builtin_tx_assist (int) 39354 Generates the `ppa rX,rY,1' machine instruction. Where the 39355 integer parameter is loaded into rX and a value of zero is loaded 39356 into rY. The integer parameter specifies the number of times the 39357 transaction repeatedly aborted. 39358 39359 -- Built-in Function: int __builtin_tx_nesting_depth (void) 39360 Generates the `etnd' machine instruction. The current nesting 39361 depth is returned as integer value. For a nesting depth of 0 the 39362 code is not executed as part of an transaction. 39363 39364 -- Built-in Function: void __builtin_non_tx_store (uint64_t *, 39365 uint64_t) 39366 Generates the `ntstg' machine instruction. The second argument is 39367 written to the first arguments location. The store operation will 39368 not be rolled-back in case of an transaction abort. 39369 39370 39371File: gcc.info, Node: SH Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: S/390 System z Built-in Functions, Up: Target Builtins 39372 393736.58.24 SH Built-in Functions 39374----------------------------- 39375 39376The following built-in functions are supported on the SH1, SH2, SH3 and 39377SH4 families of processors: 39378 39379 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR) 39380 Sets the `GBR' register to the specified value PTR. This is 39381 usually used by system code that manages threads and execution 39382 contexts. The compiler normally does not generate code that 39383 modifies the contents of `GBR' and thus the value is preserved 39384 across function calls. Changing the `GBR' value in user code must 39385 be done with caution, since the compiler might use `GBR' in order 39386 to access thread local variables. 39387 39388 39389 -- Built-in Function: void * __builtin_thread_pointer (void) 39390 Returns the value that is currently set in the `GBR' register. 39391 Memory loads and stores that use the thread pointer as a base 39392 address are turned into `GBR' based displacement loads and stores, 39393 if possible. For example: 39394 struct my_tcb 39395 { 39396 int a, b, c, d, e; 39397 }; 39398 39399 int get_tcb_value (void) 39400 { 39401 // Generate `mov.l @(8,gbr),r0' instruction 39402 return ((my_tcb*)__builtin_thread_pointer ())->c; 39403 } 39404 39405 -- Built-in Function: unsigned int __builtin_sh_get_fpscr (void) 39406 Returns the value that is currently set in the `FPSCR' register. 39407 39408 -- Built-in Function: void __builtin_sh_set_fpscr (unsigned int VAL) 39409 Sets the `FPSCR' register to the specified value VAL, while 39410 preserving the current values of the FR, SZ and PR bits. 39411 39412 39413File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: SH Built-in Functions, Up: Target Builtins 39414 394156.58.25 SPARC VIS Built-in Functions 39416------------------------------------ 39417 39418GCC supports SIMD operations on the SPARC using both the generic vector 39419extensions (*note Vector Extensions::) as well as built-in functions for 39420the SPARC Visual Instruction Set (VIS). When you use the `-mvis' 39421switch, the VIS extension is exposed as the following built-in 39422functions: 39423 39424 typedef int v1si __attribute__ ((vector_size (4))); 39425 typedef int v2si __attribute__ ((vector_size (8))); 39426 typedef short v4hi __attribute__ ((vector_size (8))); 39427 typedef short v2hi __attribute__ ((vector_size (4))); 39428 typedef unsigned char v8qi __attribute__ ((vector_size (8))); 39429 typedef unsigned char v4qi __attribute__ ((vector_size (4))); 39430 39431 void __builtin_vis_write_gsr (int64_t); 39432 int64_t __builtin_vis_read_gsr (void); 39433 39434 void * __builtin_vis_alignaddr (void *, long); 39435 void * __builtin_vis_alignaddrl (void *, long); 39436 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 39437 v2si __builtin_vis_faligndatav2si (v2si, v2si); 39438 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 39439 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 39440 39441 v4hi __builtin_vis_fexpand (v4qi); 39442 39443 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 39444 v4hi __builtin_vis_fmul8x16au (v4qi, v2hi); 39445 v4hi __builtin_vis_fmul8x16al (v4qi, v2hi); 39446 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 39447 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 39448 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 39449 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 39450 39451 v4qi __builtin_vis_fpack16 (v4hi); 39452 v8qi __builtin_vis_fpack32 (v2si, v8qi); 39453 v2hi __builtin_vis_fpackfix (v2si); 39454 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 39455 39456 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 39457 39458 long __builtin_vis_edge8 (void *, void *); 39459 long __builtin_vis_edge8l (void *, void *); 39460 long __builtin_vis_edge16 (void *, void *); 39461 long __builtin_vis_edge16l (void *, void *); 39462 long __builtin_vis_edge32 (void *, void *); 39463 long __builtin_vis_edge32l (void *, void *); 39464 39465 long __builtin_vis_fcmple16 (v4hi, v4hi); 39466 long __builtin_vis_fcmple32 (v2si, v2si); 39467 long __builtin_vis_fcmpne16 (v4hi, v4hi); 39468 long __builtin_vis_fcmpne32 (v2si, v2si); 39469 long __builtin_vis_fcmpgt16 (v4hi, v4hi); 39470 long __builtin_vis_fcmpgt32 (v2si, v2si); 39471 long __builtin_vis_fcmpeq16 (v4hi, v4hi); 39472 long __builtin_vis_fcmpeq32 (v2si, v2si); 39473 39474 v4hi __builtin_vis_fpadd16 (v4hi, v4hi); 39475 v2hi __builtin_vis_fpadd16s (v2hi, v2hi); 39476 v2si __builtin_vis_fpadd32 (v2si, v2si); 39477 v1si __builtin_vis_fpadd32s (v1si, v1si); 39478 v4hi __builtin_vis_fpsub16 (v4hi, v4hi); 39479 v2hi __builtin_vis_fpsub16s (v2hi, v2hi); 39480 v2si __builtin_vis_fpsub32 (v2si, v2si); 39481 v1si __builtin_vis_fpsub32s (v1si, v1si); 39482 39483 long __builtin_vis_array8 (long, long); 39484 long __builtin_vis_array16 (long, long); 39485 long __builtin_vis_array32 (long, long); 39486 39487 When you use the `-mvis2' switch, the VIS version 2.0 built-in 39488functions also become available: 39489 39490 long __builtin_vis_bmask (long, long); 39491 int64_t __builtin_vis_bshuffledi (int64_t, int64_t); 39492 v2si __builtin_vis_bshufflev2si (v2si, v2si); 39493 v4hi __builtin_vis_bshufflev2si (v4hi, v4hi); 39494 v8qi __builtin_vis_bshufflev2si (v8qi, v8qi); 39495 39496 long __builtin_vis_edge8n (void *, void *); 39497 long __builtin_vis_edge8ln (void *, void *); 39498 long __builtin_vis_edge16n (void *, void *); 39499 long __builtin_vis_edge16ln (void *, void *); 39500 long __builtin_vis_edge32n (void *, void *); 39501 long __builtin_vis_edge32ln (void *, void *); 39502 39503 When you use the `-mvis3' switch, the VIS version 3.0 built-in 39504functions also become available: 39505 39506 void __builtin_vis_cmask8 (long); 39507 void __builtin_vis_cmask16 (long); 39508 void __builtin_vis_cmask32 (long); 39509 39510 v4hi __builtin_vis_fchksm16 (v4hi, v4hi); 39511 39512 v4hi __builtin_vis_fsll16 (v4hi, v4hi); 39513 v4hi __builtin_vis_fslas16 (v4hi, v4hi); 39514 v4hi __builtin_vis_fsrl16 (v4hi, v4hi); 39515 v4hi __builtin_vis_fsra16 (v4hi, v4hi); 39516 v2si __builtin_vis_fsll16 (v2si, v2si); 39517 v2si __builtin_vis_fslas16 (v2si, v2si); 39518 v2si __builtin_vis_fsrl16 (v2si, v2si); 39519 v2si __builtin_vis_fsra16 (v2si, v2si); 39520 39521 long __builtin_vis_pdistn (v8qi, v8qi); 39522 39523 v4hi __builtin_vis_fmean16 (v4hi, v4hi); 39524 39525 int64_t __builtin_vis_fpadd64 (int64_t, int64_t); 39526 int64_t __builtin_vis_fpsub64 (int64_t, int64_t); 39527 39528 v4hi __builtin_vis_fpadds16 (v4hi, v4hi); 39529 v2hi __builtin_vis_fpadds16s (v2hi, v2hi); 39530 v4hi __builtin_vis_fpsubs16 (v4hi, v4hi); 39531 v2hi __builtin_vis_fpsubs16s (v2hi, v2hi); 39532 v2si __builtin_vis_fpadds32 (v2si, v2si); 39533 v1si __builtin_vis_fpadds32s (v1si, v1si); 39534 v2si __builtin_vis_fpsubs32 (v2si, v2si); 39535 v1si __builtin_vis_fpsubs32s (v1si, v1si); 39536 39537 long __builtin_vis_fucmple8 (v8qi, v8qi); 39538 long __builtin_vis_fucmpne8 (v8qi, v8qi); 39539 long __builtin_vis_fucmpgt8 (v8qi, v8qi); 39540 long __builtin_vis_fucmpeq8 (v8qi, v8qi); 39541 39542 float __builtin_vis_fhadds (float, float); 39543 double __builtin_vis_fhaddd (double, double); 39544 float __builtin_vis_fhsubs (float, float); 39545 double __builtin_vis_fhsubd (double, double); 39546 float __builtin_vis_fnhadds (float, float); 39547 double __builtin_vis_fnhaddd (double, double); 39548 39549 int64_t __builtin_vis_umulxhi (int64_t, int64_t); 39550 int64_t __builtin_vis_xmulx (int64_t, int64_t); 39551 int64_t __builtin_vis_xmulxhi (int64_t, int64_t); 39552 39553 39554File: gcc.info, Node: SPU Built-in Functions, Next: TI C6X Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins 39555 395566.58.26 SPU Built-in Functions 39557------------------------------ 39558 39559GCC provides extensions for the SPU processor as described in the 39560Sony/Toshiba/IBM SPU Language Extensions Specification, which can be 39561found at `http://cell.scei.co.jp/' or 39562`http://www.ibm.com/developerworks/power/cell/'. GCC's implementation 39563differs in several ways. 39564 39565 * The optional extension of specifying vector constants in 39566 parentheses is not supported. 39567 39568 * A vector initializer requires no cast if the vector constant is of 39569 the same type as the variable it is initializing. 39570 39571 * If `signed' or `unsigned' is omitted, the signedness of the vector 39572 type is the default signedness of the base type. The default 39573 varies depending on the operating system, so a portable program 39574 should always specify the signedness. 39575 39576 * By default, the keyword `__vector' is added. The macro `vector' is 39577 defined in `<spu_intrinsics.h>' and can be undefined. 39578 39579 * GCC allows using a `typedef' name as the type specifier for a 39580 vector type. 39581 39582 * For C, overloaded functions are implemented with macros so the 39583 following does not work: 39584 39585 spu_add ((vector signed int){1, 2, 3, 4}, foo); 39586 39587 Since `spu_add' is a macro, the vector constant in the example is 39588 treated as four separate arguments. Wrap the entire argument in 39589 parentheses for this to work. 39590 39591 * The extended version of `__builtin_expect' is not supported. 39592 39593 39594 _Note:_ Only the interface described in the aforementioned 39595specification is supported. Internally, GCC uses built-in functions to 39596implement the required functionality, but these are not supported and 39597are subject to change without notice. 39598 39599 39600File: gcc.info, Node: TI C6X Built-in Functions, Next: TILE-Gx Built-in Functions, Prev: SPU Built-in Functions, Up: Target Builtins 39601 396026.58.27 TI C6X Built-in Functions 39603--------------------------------- 39604 39605GCC provides intrinsics to access certain instructions of the TI C6X 39606processors. These intrinsics, listed below, are available after 39607inclusion of the `c6x_intrinsics.h' header file. They map directly to 39608C6X instructions. 39609 39610 39611 int _sadd (int, int) 39612 int _ssub (int, int) 39613 int _sadd2 (int, int) 39614 int _ssub2 (int, int) 39615 long long _mpy2 (int, int) 39616 long long _smpy2 (int, int) 39617 int _add4 (int, int) 39618 int _sub4 (int, int) 39619 int _saddu4 (int, int) 39620 39621 int _smpy (int, int) 39622 int _smpyh (int, int) 39623 int _smpyhl (int, int) 39624 int _smpylh (int, int) 39625 39626 int _sshl (int, int) 39627 int _subc (int, int) 39628 39629 int _avg2 (int, int) 39630 int _avgu4 (int, int) 39631 39632 int _clrr (int, int) 39633 int _extr (int, int) 39634 int _extru (int, int) 39635 int _abs (int) 39636 int _abs2 (int) 39637 39638 39639File: gcc.info, Node: TILE-Gx Built-in Functions, Next: TILEPro Built-in Functions, Prev: TI C6X Built-in Functions, Up: Target Builtins 39640 396416.58.28 TILE-Gx Built-in Functions 39642---------------------------------- 39643 39644GCC provides intrinsics to access every instruction of the TILE-Gx 39645processor. The intrinsics are of the form: 39646 39647 39648 unsigned long long __insn_OP (...) 39649 39650 Where OP is the name of the instruction. Refer to the ISA manual for 39651the complete list of instructions. 39652 39653 GCC also provides intrinsics to directly access the network registers. 39654The intrinsics are: 39655 39656 39657 unsigned long long __tile_idn0_receive (void) 39658 unsigned long long __tile_idn1_receive (void) 39659 unsigned long long __tile_udn0_receive (void) 39660 unsigned long long __tile_udn1_receive (void) 39661 unsigned long long __tile_udn2_receive (void) 39662 unsigned long long __tile_udn3_receive (void) 39663 void __tile_idn_send (unsigned long long) 39664 void __tile_udn_send (unsigned long long) 39665 39666 The intrinsic `void __tile_network_barrier (void)' is used to 39667guarantee that no network operations before it are reordered with those 39668after it. 39669 39670 39671File: gcc.info, Node: TILEPro Built-in Functions, Next: x86 Built-in Functions, Prev: TILE-Gx Built-in Functions, Up: Target Builtins 39672 396736.58.29 TILEPro Built-in Functions 39674---------------------------------- 39675 39676GCC provides intrinsics to access every instruction of the TILEPro 39677processor. The intrinsics are of the form: 39678 39679 39680 unsigned __insn_OP (...) 39681 39682where OP is the name of the instruction. Refer to the ISA manual for 39683the complete list of instructions. 39684 39685 GCC also provides intrinsics to directly access the network registers. 39686The intrinsics are: 39687 39688 39689 unsigned __tile_idn0_receive (void) 39690 unsigned __tile_idn1_receive (void) 39691 unsigned __tile_sn_receive (void) 39692 unsigned __tile_udn0_receive (void) 39693 unsigned __tile_udn1_receive (void) 39694 unsigned __tile_udn2_receive (void) 39695 unsigned __tile_udn3_receive (void) 39696 void __tile_idn_send (unsigned) 39697 void __tile_sn_send (unsigned) 39698 void __tile_udn_send (unsigned) 39699 39700 The intrinsic `void __tile_network_barrier (void)' is used to 39701guarantee that no network operations before it are reordered with those 39702after it. 39703 39704 39705File: gcc.info, Node: x86 Built-in Functions, Next: x86 transactional memory intrinsics, Prev: TILEPro Built-in Functions, Up: Target Builtins 39706 397076.58.30 x86 Built-in Functions 39708------------------------------ 39709 39710These built-in functions are available for the x86-32 and x86-64 family 39711of computers, depending on the command-line switches used. 39712 39713 If you specify command-line switches such as `-msse', the compiler 39714could use the extended instruction sets even if the built-ins are not 39715used explicitly in the program. For this reason, applications that 39716perform run-time CPU detection must compile separate files for each 39717supported architecture, using the appropriate flags. In particular, 39718the file containing the CPU detection code should be compiled without 39719these options. 39720 39721 The following machine modes are available for use with MMX built-in 39722functions (*note Vector Extensions::): `V2SI' for a vector of two 3972332-bit integers, `V4HI' for a vector of four 16-bit integers, and 39724`V8QI' for a vector of eight 8-bit integers. Some of the built-in 39725functions operate on MMX registers as a whole 64-bit entity, these use 39726`V1DI' as their mode. 39727 39728 If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector 39729of two 32-bit floating-point values. 39730 39731 If SSE extensions are enabled, `V4SF' is used for a vector of four 3973232-bit floating-point values. Some instructions use a vector of four 3973332-bit integers, these use `V4SI'. Finally, some instructions operate 39734on an entire vector register, interpreting it as a 128-bit integer, 39735these use mode `TI'. 39736 39737 In 64-bit mode, the x86-64 family of processors uses additional 39738built-in functions for efficient use of `TF' (`__float128') 128-bit 39739floating point and `TC' 128-bit complex floating-point values. 39740 39741 The following floating-point built-in functions are available in 64-bit 39742mode. All of them implement the function that is part of the name. 39743 39744 __float128 __builtin_fabsq (__float128) 39745 __float128 __builtin_copysignq (__float128, __float128) 39746 39747 The following built-in function is always available. 39748 39749`void __builtin_ia32_pause (void)' 39750 Generates the `pause' machine instruction with a compiler memory 39751 barrier. 39752 39753 The following floating-point built-in functions are made available in 39754the 64-bit mode. 39755 39756`__float128 __builtin_infq (void)' 39757 Similar to `__builtin_inf', except the return type is `__float128'. 39758 39759`__float128 __builtin_huge_valq (void)' 39760 Similar to `__builtin_huge_val', except the return type is 39761 `__float128'. 39762 39763 The following built-in functions are always available and can be used 39764to check the target platform type. 39765 39766 -- Built-in Function: void __builtin_cpu_init (void) 39767 This function runs the CPU detection code to check the type of CPU 39768 and the features supported. This built-in function needs to be 39769 invoked along with the built-in functions to check CPU type and 39770 features, `__builtin_cpu_is' and `__builtin_cpu_supports', only 39771 when used in a function that is executed before any constructors 39772 are called. The CPU detection code is automatically executed in a 39773 very high priority constructor. 39774 39775 For example, this function has to be used in `ifunc' resolvers that 39776 check for CPU type using the built-in functions `__builtin_cpu_is' 39777 and `__builtin_cpu_supports', or in constructors on targets that 39778 don't support constructor priority. 39779 39780 static void (*resolve_memcpy (void)) (void) 39781 { 39782 // ifunc resolvers fire before constructors, explicitly call the init 39783 // function. 39784 __builtin_cpu_init (); 39785 if (__builtin_cpu_supports ("ssse3")) 39786 return ssse3_memcpy; // super fast memcpy with ssse3 instructions. 39787 else 39788 return default_memcpy; 39789 } 39790 39791 void *memcpy (void *, const void *, size_t) 39792 __attribute__ ((ifunc ("resolve_memcpy"))); 39793 39794 39795 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME) 39796 This function returns a positive integer if the run-time CPU is of 39797 type CPUNAME and returns `0' otherwise. The following CPU names 39798 can be detected: 39799 39800 `intel' 39801 Intel CPU. 39802 39803 `atom' 39804 Intel Atom CPU. 39805 39806 `core2' 39807 Intel Core 2 CPU. 39808 39809 `corei7' 39810 Intel Core i7 CPU. 39811 39812 `nehalem' 39813 Intel Core i7 Nehalem CPU. 39814 39815 `westmere' 39816 Intel Core i7 Westmere CPU. 39817 39818 `sandybridge' 39819 Intel Core i7 Sandy Bridge CPU. 39820 39821 `amd' 39822 AMD CPU. 39823 39824 `amdfam10h' 39825 AMD Family 10h CPU. 39826 39827 `barcelona' 39828 AMD Family 10h Barcelona CPU. 39829 39830 `shanghai' 39831 AMD Family 10h Shanghai CPU. 39832 39833 `istanbul' 39834 AMD Family 10h Istanbul CPU. 39835 39836 `btver1' 39837 AMD Family 14h CPU. 39838 39839 `amdfam15h' 39840 AMD Family 15h CPU. 39841 39842 `bdver1' 39843 AMD Family 15h Bulldozer version 1. 39844 39845 `bdver2' 39846 AMD Family 15h Bulldozer version 2. 39847 39848 `bdver3' 39849 AMD Family 15h Bulldozer version 3. 39850 39851 `bdver4' 39852 AMD Family 15h Bulldozer version 4. 39853 39854 `btver2' 39855 AMD Family 16h CPU. 39856 39857 Here is an example: 39858 if (__builtin_cpu_is ("corei7")) 39859 { 39860 do_corei7 (); // Core i7 specific implementation. 39861 } 39862 else 39863 { 39864 do_generic (); // Generic implementation. 39865 } 39866 39867 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE) 39868 This function returns a positive integer if the run-time CPU 39869 supports FEATURE and returns `0' otherwise. The following features 39870 can be detected: 39871 39872 `cmov' 39873 CMOV instruction. 39874 39875 `mmx' 39876 MMX instructions. 39877 39878 `popcnt' 39879 POPCNT instruction. 39880 39881 `sse' 39882 SSE instructions. 39883 39884 `sse2' 39885 SSE2 instructions. 39886 39887 `sse3' 39888 SSE3 instructions. 39889 39890 `ssse3' 39891 SSSE3 instructions. 39892 39893 `sse4.1' 39894 SSE4.1 instructions. 39895 39896 `sse4.2' 39897 SSE4.2 instructions. 39898 39899 `avx' 39900 AVX instructions. 39901 39902 `avx2' 39903 AVX2 instructions. 39904 39905 `avx512f' 39906 AVX512F instructions. 39907 39908 Here is an example: 39909 if (__builtin_cpu_supports ("popcnt")) 39910 { 39911 asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc"); 39912 } 39913 else 39914 { 39915 count = generic_countbits (n); //generic implementation. 39916 } 39917 39918 The following built-in functions are made available by `-mmmx'. All 39919of them generate the machine instruction that is part of the name. 39920 39921 v8qi __builtin_ia32_paddb (v8qi, v8qi) 39922 v4hi __builtin_ia32_paddw (v4hi, v4hi) 39923 v2si __builtin_ia32_paddd (v2si, v2si) 39924 v8qi __builtin_ia32_psubb (v8qi, v8qi) 39925 v4hi __builtin_ia32_psubw (v4hi, v4hi) 39926 v2si __builtin_ia32_psubd (v2si, v2si) 39927 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 39928 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 39929 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 39930 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 39931 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 39932 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 39933 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 39934 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 39935 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 39936 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 39937 di __builtin_ia32_pand (di, di) 39938 di __builtin_ia32_pandn (di,di) 39939 di __builtin_ia32_por (di, di) 39940 di __builtin_ia32_pxor (di, di) 39941 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 39942 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 39943 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 39944 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 39945 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 39946 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 39947 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 39948 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 39949 v2si __builtin_ia32_punpckhdq (v2si, v2si) 39950 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 39951 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 39952 v2si __builtin_ia32_punpckldq (v2si, v2si) 39953 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 39954 v4hi __builtin_ia32_packssdw (v2si, v2si) 39955 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 39956 39957 v4hi __builtin_ia32_psllw (v4hi, v4hi) 39958 v2si __builtin_ia32_pslld (v2si, v2si) 39959 v1di __builtin_ia32_psllq (v1di, v1di) 39960 v4hi __builtin_ia32_psrlw (v4hi, v4hi) 39961 v2si __builtin_ia32_psrld (v2si, v2si) 39962 v1di __builtin_ia32_psrlq (v1di, v1di) 39963 v4hi __builtin_ia32_psraw (v4hi, v4hi) 39964 v2si __builtin_ia32_psrad (v2si, v2si) 39965 v4hi __builtin_ia32_psllwi (v4hi, int) 39966 v2si __builtin_ia32_pslldi (v2si, int) 39967 v1di __builtin_ia32_psllqi (v1di, int) 39968 v4hi __builtin_ia32_psrlwi (v4hi, int) 39969 v2si __builtin_ia32_psrldi (v2si, int) 39970 v1di __builtin_ia32_psrlqi (v1di, int) 39971 v4hi __builtin_ia32_psrawi (v4hi, int) 39972 v2si __builtin_ia32_psradi (v2si, int) 39973 39974 The following built-in functions are made available either with 39975`-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 39976of them generate the machine instruction that is part of the name. 39977 39978 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 39979 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 39980 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 39981 v1di __builtin_ia32_psadbw (v8qi, v8qi) 39982 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 39983 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 39984 v8qi __builtin_ia32_pminub (v8qi, v8qi) 39985 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 39986 int __builtin_ia32_pmovmskb (v8qi) 39987 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 39988 void __builtin_ia32_movntq (di *, di) 39989 void __builtin_ia32_sfence (void) 39990 39991 The following built-in functions are available when `-msse' is used. 39992All of them generate the machine instruction that is part of the name. 39993 39994 int __builtin_ia32_comieq (v4sf, v4sf) 39995 int __builtin_ia32_comineq (v4sf, v4sf) 39996 int __builtin_ia32_comilt (v4sf, v4sf) 39997 int __builtin_ia32_comile (v4sf, v4sf) 39998 int __builtin_ia32_comigt (v4sf, v4sf) 39999 int __builtin_ia32_comige (v4sf, v4sf) 40000 int __builtin_ia32_ucomieq (v4sf, v4sf) 40001 int __builtin_ia32_ucomineq (v4sf, v4sf) 40002 int __builtin_ia32_ucomilt (v4sf, v4sf) 40003 int __builtin_ia32_ucomile (v4sf, v4sf) 40004 int __builtin_ia32_ucomigt (v4sf, v4sf) 40005 int __builtin_ia32_ucomige (v4sf, v4sf) 40006 v4sf __builtin_ia32_addps (v4sf, v4sf) 40007 v4sf __builtin_ia32_subps (v4sf, v4sf) 40008 v4sf __builtin_ia32_mulps (v4sf, v4sf) 40009 v4sf __builtin_ia32_divps (v4sf, v4sf) 40010 v4sf __builtin_ia32_addss (v4sf, v4sf) 40011 v4sf __builtin_ia32_subss (v4sf, v4sf) 40012 v4sf __builtin_ia32_mulss (v4sf, v4sf) 40013 v4sf __builtin_ia32_divss (v4sf, v4sf) 40014 v4sf __builtin_ia32_cmpeqps (v4sf, v4sf) 40015 v4sf __builtin_ia32_cmpltps (v4sf, v4sf) 40016 v4sf __builtin_ia32_cmpleps (v4sf, v4sf) 40017 v4sf __builtin_ia32_cmpgtps (v4sf, v4sf) 40018 v4sf __builtin_ia32_cmpgeps (v4sf, v4sf) 40019 v4sf __builtin_ia32_cmpunordps (v4sf, v4sf) 40020 v4sf __builtin_ia32_cmpneqps (v4sf, v4sf) 40021 v4sf __builtin_ia32_cmpnltps (v4sf, v4sf) 40022 v4sf __builtin_ia32_cmpnleps (v4sf, v4sf) 40023 v4sf __builtin_ia32_cmpngtps (v4sf, v4sf) 40024 v4sf __builtin_ia32_cmpngeps (v4sf, v4sf) 40025 v4sf __builtin_ia32_cmpordps (v4sf, v4sf) 40026 v4sf __builtin_ia32_cmpeqss (v4sf, v4sf) 40027 v4sf __builtin_ia32_cmpltss (v4sf, v4sf) 40028 v4sf __builtin_ia32_cmpless (v4sf, v4sf) 40029 v4sf __builtin_ia32_cmpunordss (v4sf, v4sf) 40030 v4sf __builtin_ia32_cmpneqss (v4sf, v4sf) 40031 v4sf __builtin_ia32_cmpnltss (v4sf, v4sf) 40032 v4sf __builtin_ia32_cmpnless (v4sf, v4sf) 40033 v4sf __builtin_ia32_cmpordss (v4sf, v4sf) 40034 v4sf __builtin_ia32_maxps (v4sf, v4sf) 40035 v4sf __builtin_ia32_maxss (v4sf, v4sf) 40036 v4sf __builtin_ia32_minps (v4sf, v4sf) 40037 v4sf __builtin_ia32_minss (v4sf, v4sf) 40038 v4sf __builtin_ia32_andps (v4sf, v4sf) 40039 v4sf __builtin_ia32_andnps (v4sf, v4sf) 40040 v4sf __builtin_ia32_orps (v4sf, v4sf) 40041 v4sf __builtin_ia32_xorps (v4sf, v4sf) 40042 v4sf __builtin_ia32_movss (v4sf, v4sf) 40043 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 40044 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 40045 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 40046 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 40047 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 40048 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 40049 v2si __builtin_ia32_cvtps2pi (v4sf) 40050 int __builtin_ia32_cvtss2si (v4sf) 40051 v2si __builtin_ia32_cvttps2pi (v4sf) 40052 int __builtin_ia32_cvttss2si (v4sf) 40053 v4sf __builtin_ia32_rcpps (v4sf) 40054 v4sf __builtin_ia32_rsqrtps (v4sf) 40055 v4sf __builtin_ia32_sqrtps (v4sf) 40056 v4sf __builtin_ia32_rcpss (v4sf) 40057 v4sf __builtin_ia32_rsqrtss (v4sf) 40058 v4sf __builtin_ia32_sqrtss (v4sf) 40059 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 40060 void __builtin_ia32_movntps (float *, v4sf) 40061 int __builtin_ia32_movmskps (v4sf) 40062 40063 The following built-in functions are available when `-msse' is used. 40064 40065`v4sf __builtin_ia32_loadups (float *)' 40066 Generates the `movups' machine instruction as a load from memory. 40067 40068`void __builtin_ia32_storeups (float *, v4sf)' 40069 Generates the `movups' machine instruction as a store to memory. 40070 40071`v4sf __builtin_ia32_loadss (float *)' 40072 Generates the `movss' machine instruction as a load from memory. 40073 40074`v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)' 40075 Generates the `movhps' machine instruction as a load from memory. 40076 40077`v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)' 40078 Generates the `movlps' machine instruction as a load from memory 40079 40080`void __builtin_ia32_storehps (v2sf *, v4sf)' 40081 Generates the `movhps' machine instruction as a store to memory. 40082 40083`void __builtin_ia32_storelps (v2sf *, v4sf)' 40084 Generates the `movlps' machine instruction as a store to memory. 40085 40086 The following built-in functions are available when `-msse2' is used. 40087All of them generate the machine instruction that is part of the name. 40088 40089 int __builtin_ia32_comisdeq (v2df, v2df) 40090 int __builtin_ia32_comisdlt (v2df, v2df) 40091 int __builtin_ia32_comisdle (v2df, v2df) 40092 int __builtin_ia32_comisdgt (v2df, v2df) 40093 int __builtin_ia32_comisdge (v2df, v2df) 40094 int __builtin_ia32_comisdneq (v2df, v2df) 40095 int __builtin_ia32_ucomisdeq (v2df, v2df) 40096 int __builtin_ia32_ucomisdlt (v2df, v2df) 40097 int __builtin_ia32_ucomisdle (v2df, v2df) 40098 int __builtin_ia32_ucomisdgt (v2df, v2df) 40099 int __builtin_ia32_ucomisdge (v2df, v2df) 40100 int __builtin_ia32_ucomisdneq (v2df, v2df) 40101 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 40102 v2df __builtin_ia32_cmpltpd (v2df, v2df) 40103 v2df __builtin_ia32_cmplepd (v2df, v2df) 40104 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 40105 v2df __builtin_ia32_cmpgepd (v2df, v2df) 40106 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 40107 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 40108 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 40109 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 40110 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 40111 v2df __builtin_ia32_cmpngepd (v2df, v2df) 40112 v2df __builtin_ia32_cmpordpd (v2df, v2df) 40113 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 40114 v2df __builtin_ia32_cmpltsd (v2df, v2df) 40115 v2df __builtin_ia32_cmplesd (v2df, v2df) 40116 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 40117 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 40118 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 40119 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 40120 v2df __builtin_ia32_cmpordsd (v2df, v2df) 40121 v2di __builtin_ia32_paddq (v2di, v2di) 40122 v2di __builtin_ia32_psubq (v2di, v2di) 40123 v2df __builtin_ia32_addpd (v2df, v2df) 40124 v2df __builtin_ia32_subpd (v2df, v2df) 40125 v2df __builtin_ia32_mulpd (v2df, v2df) 40126 v2df __builtin_ia32_divpd (v2df, v2df) 40127 v2df __builtin_ia32_addsd (v2df, v2df) 40128 v2df __builtin_ia32_subsd (v2df, v2df) 40129 v2df __builtin_ia32_mulsd (v2df, v2df) 40130 v2df __builtin_ia32_divsd (v2df, v2df) 40131 v2df __builtin_ia32_minpd (v2df, v2df) 40132 v2df __builtin_ia32_maxpd (v2df, v2df) 40133 v2df __builtin_ia32_minsd (v2df, v2df) 40134 v2df __builtin_ia32_maxsd (v2df, v2df) 40135 v2df __builtin_ia32_andpd (v2df, v2df) 40136 v2df __builtin_ia32_andnpd (v2df, v2df) 40137 v2df __builtin_ia32_orpd (v2df, v2df) 40138 v2df __builtin_ia32_xorpd (v2df, v2df) 40139 v2df __builtin_ia32_movsd (v2df, v2df) 40140 v2df __builtin_ia32_unpckhpd (v2df, v2df) 40141 v2df __builtin_ia32_unpcklpd (v2df, v2df) 40142 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 40143 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 40144 v4si __builtin_ia32_paddd128 (v4si, v4si) 40145 v2di __builtin_ia32_paddq128 (v2di, v2di) 40146 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 40147 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 40148 v4si __builtin_ia32_psubd128 (v4si, v4si) 40149 v2di __builtin_ia32_psubq128 (v2di, v2di) 40150 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 40151 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 40152 v2di __builtin_ia32_pand128 (v2di, v2di) 40153 v2di __builtin_ia32_pandn128 (v2di, v2di) 40154 v2di __builtin_ia32_por128 (v2di, v2di) 40155 v2di __builtin_ia32_pxor128 (v2di, v2di) 40156 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 40157 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 40158 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 40159 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 40160 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 40161 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 40162 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 40163 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 40164 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 40165 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 40166 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 40167 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 40168 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 40169 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 40170 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 40171 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 40172 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 40173 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 40174 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 40175 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 40176 v16qi __builtin_ia32_packsswb128 (v8hi, v8hi) 40177 v8hi __builtin_ia32_packssdw128 (v4si, v4si) 40178 v16qi __builtin_ia32_packuswb128 (v8hi, v8hi) 40179 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 40180 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 40181 v2df __builtin_ia32_loadupd (double *) 40182 void __builtin_ia32_storeupd (double *, v2df) 40183 v2df __builtin_ia32_loadhpd (v2df, double const *) 40184 v2df __builtin_ia32_loadlpd (v2df, double const *) 40185 int __builtin_ia32_movmskpd (v2df) 40186 int __builtin_ia32_pmovmskb128 (v16qi) 40187 void __builtin_ia32_movnti (int *, int) 40188 void __builtin_ia32_movnti64 (long long int *, long long int) 40189 void __builtin_ia32_movntpd (double *, v2df) 40190 void __builtin_ia32_movntdq (v2df *, v2df) 40191 v4si __builtin_ia32_pshufd (v4si, int) 40192 v8hi __builtin_ia32_pshuflw (v8hi, int) 40193 v8hi __builtin_ia32_pshufhw (v8hi, int) 40194 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 40195 v2df __builtin_ia32_sqrtpd (v2df) 40196 v2df __builtin_ia32_sqrtsd (v2df) 40197 v2df __builtin_ia32_shufpd (v2df, v2df, int) 40198 v2df __builtin_ia32_cvtdq2pd (v4si) 40199 v4sf __builtin_ia32_cvtdq2ps (v4si) 40200 v4si __builtin_ia32_cvtpd2dq (v2df) 40201 v2si __builtin_ia32_cvtpd2pi (v2df) 40202 v4sf __builtin_ia32_cvtpd2ps (v2df) 40203 v4si __builtin_ia32_cvttpd2dq (v2df) 40204 v2si __builtin_ia32_cvttpd2pi (v2df) 40205 v2df __builtin_ia32_cvtpi2pd (v2si) 40206 int __builtin_ia32_cvtsd2si (v2df) 40207 int __builtin_ia32_cvttsd2si (v2df) 40208 long long __builtin_ia32_cvtsd2si64 (v2df) 40209 long long __builtin_ia32_cvttsd2si64 (v2df) 40210 v4si __builtin_ia32_cvtps2dq (v4sf) 40211 v2df __builtin_ia32_cvtps2pd (v4sf) 40212 v4si __builtin_ia32_cvttps2dq (v4sf) 40213 v2df __builtin_ia32_cvtsi2sd (v2df, int) 40214 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 40215 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 40216 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 40217 void __builtin_ia32_clflush (const void *) 40218 void __builtin_ia32_lfence (void) 40219 void __builtin_ia32_mfence (void) 40220 v16qi __builtin_ia32_loaddqu (const char *) 40221 void __builtin_ia32_storedqu (char *, v16qi) 40222 v1di __builtin_ia32_pmuludq (v2si, v2si) 40223 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 40224 v8hi __builtin_ia32_psllw128 (v8hi, v8hi) 40225 v4si __builtin_ia32_pslld128 (v4si, v4si) 40226 v2di __builtin_ia32_psllq128 (v2di, v2di) 40227 v8hi __builtin_ia32_psrlw128 (v8hi, v8hi) 40228 v4si __builtin_ia32_psrld128 (v4si, v4si) 40229 v2di __builtin_ia32_psrlq128 (v2di, v2di) 40230 v8hi __builtin_ia32_psraw128 (v8hi, v8hi) 40231 v4si __builtin_ia32_psrad128 (v4si, v4si) 40232 v2di __builtin_ia32_pslldqi128 (v2di, int) 40233 v8hi __builtin_ia32_psllwi128 (v8hi, int) 40234 v4si __builtin_ia32_pslldi128 (v4si, int) 40235 v2di __builtin_ia32_psllqi128 (v2di, int) 40236 v2di __builtin_ia32_psrldqi128 (v2di, int) 40237 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 40238 v4si __builtin_ia32_psrldi128 (v4si, int) 40239 v2di __builtin_ia32_psrlqi128 (v2di, int) 40240 v8hi __builtin_ia32_psrawi128 (v8hi, int) 40241 v4si __builtin_ia32_psradi128 (v4si, int) 40242 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 40243 v2di __builtin_ia32_movq128 (v2di) 40244 40245 The following built-in functions are available when `-msse3' is used. 40246All of them generate the machine instruction that is part of the name. 40247 40248 v2df __builtin_ia32_addsubpd (v2df, v2df) 40249 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 40250 v2df __builtin_ia32_haddpd (v2df, v2df) 40251 v4sf __builtin_ia32_haddps (v4sf, v4sf) 40252 v2df __builtin_ia32_hsubpd (v2df, v2df) 40253 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 40254 v16qi __builtin_ia32_lddqu (char const *) 40255 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 40256 v4sf __builtin_ia32_movshdup (v4sf) 40257 v4sf __builtin_ia32_movsldup (v4sf) 40258 void __builtin_ia32_mwait (unsigned int, unsigned int) 40259 40260 The following built-in functions are available when `-mssse3' is used. 40261All of them generate the machine instruction that is part of the name. 40262 40263 v2si __builtin_ia32_phaddd (v2si, v2si) 40264 v4hi __builtin_ia32_phaddw (v4hi, v4hi) 40265 v4hi __builtin_ia32_phaddsw (v4hi, v4hi) 40266 v2si __builtin_ia32_phsubd (v2si, v2si) 40267 v4hi __builtin_ia32_phsubw (v4hi, v4hi) 40268 v4hi __builtin_ia32_phsubsw (v4hi, v4hi) 40269 v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi) 40270 v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi) 40271 v8qi __builtin_ia32_pshufb (v8qi, v8qi) 40272 v8qi __builtin_ia32_psignb (v8qi, v8qi) 40273 v2si __builtin_ia32_psignd (v2si, v2si) 40274 v4hi __builtin_ia32_psignw (v4hi, v4hi) 40275 v1di __builtin_ia32_palignr (v1di, v1di, int) 40276 v8qi __builtin_ia32_pabsb (v8qi) 40277 v2si __builtin_ia32_pabsd (v2si) 40278 v4hi __builtin_ia32_pabsw (v4hi) 40279 40280 The following built-in functions are available when `-mssse3' is used. 40281All of them generate the machine instruction that is part of the name. 40282 40283 v4si __builtin_ia32_phaddd128 (v4si, v4si) 40284 v8hi __builtin_ia32_phaddw128 (v8hi, v8hi) 40285 v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi) 40286 v4si __builtin_ia32_phsubd128 (v4si, v4si) 40287 v8hi __builtin_ia32_phsubw128 (v8hi, v8hi) 40288 v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi) 40289 v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi) 40290 v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi) 40291 v16qi __builtin_ia32_pshufb128 (v16qi, v16qi) 40292 v16qi __builtin_ia32_psignb128 (v16qi, v16qi) 40293 v4si __builtin_ia32_psignd128 (v4si, v4si) 40294 v8hi __builtin_ia32_psignw128 (v8hi, v8hi) 40295 v2di __builtin_ia32_palignr128 (v2di, v2di, int) 40296 v16qi __builtin_ia32_pabsb128 (v16qi) 40297 v4si __builtin_ia32_pabsd128 (v4si) 40298 v8hi __builtin_ia32_pabsw128 (v8hi) 40299 40300 The following built-in functions are available when `-msse4.1' is 40301used. All of them generate the machine instruction that is part of the 40302name. 40303 40304 v2df __builtin_ia32_blendpd (v2df, v2df, const int) 40305 v4sf __builtin_ia32_blendps (v4sf, v4sf, const int) 40306 v2df __builtin_ia32_blendvpd (v2df, v2df, v2df) 40307 v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf) 40308 v2df __builtin_ia32_dppd (v2df, v2df, const int) 40309 v4sf __builtin_ia32_dpps (v4sf, v4sf, const int) 40310 v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int) 40311 v2di __builtin_ia32_movntdqa (v2di *); 40312 v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int) 40313 v8hi __builtin_ia32_packusdw128 (v4si, v4si) 40314 v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi) 40315 v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int) 40316 v2di __builtin_ia32_pcmpeqq (v2di, v2di) 40317 v8hi __builtin_ia32_phminposuw128 (v8hi) 40318 v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi) 40319 v4si __builtin_ia32_pmaxsd128 (v4si, v4si) 40320 v4si __builtin_ia32_pmaxud128 (v4si, v4si) 40321 v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi) 40322 v16qi __builtin_ia32_pminsb128 (v16qi, v16qi) 40323 v4si __builtin_ia32_pminsd128 (v4si, v4si) 40324 v4si __builtin_ia32_pminud128 (v4si, v4si) 40325 v8hi __builtin_ia32_pminuw128 (v8hi, v8hi) 40326 v4si __builtin_ia32_pmovsxbd128 (v16qi) 40327 v2di __builtin_ia32_pmovsxbq128 (v16qi) 40328 v8hi __builtin_ia32_pmovsxbw128 (v16qi) 40329 v2di __builtin_ia32_pmovsxdq128 (v4si) 40330 v4si __builtin_ia32_pmovsxwd128 (v8hi) 40331 v2di __builtin_ia32_pmovsxwq128 (v8hi) 40332 v4si __builtin_ia32_pmovzxbd128 (v16qi) 40333 v2di __builtin_ia32_pmovzxbq128 (v16qi) 40334 v8hi __builtin_ia32_pmovzxbw128 (v16qi) 40335 v2di __builtin_ia32_pmovzxdq128 (v4si) 40336 v4si __builtin_ia32_pmovzxwd128 (v8hi) 40337 v2di __builtin_ia32_pmovzxwq128 (v8hi) 40338 v2di __builtin_ia32_pmuldq128 (v4si, v4si) 40339 v4si __builtin_ia32_pmulld128 (v4si, v4si) 40340 int __builtin_ia32_ptestc128 (v2di, v2di) 40341 int __builtin_ia32_ptestnzc128 (v2di, v2di) 40342 int __builtin_ia32_ptestz128 (v2di, v2di) 40343 v2df __builtin_ia32_roundpd (v2df, const int) 40344 v4sf __builtin_ia32_roundps (v4sf, const int) 40345 v2df __builtin_ia32_roundsd (v2df, v2df, const int) 40346 v4sf __builtin_ia32_roundss (v4sf, v4sf, const int) 40347 40348 The following built-in functions are available when `-msse4.1' is used. 40349 40350`v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)' 40351 Generates the `insertps' machine instruction. 40352 40353`int __builtin_ia32_vec_ext_v16qi (v16qi, const int)' 40354 Generates the `pextrb' machine instruction. 40355 40356`v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)' 40357 Generates the `pinsrb' machine instruction. 40358 40359`v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)' 40360 Generates the `pinsrd' machine instruction. 40361 40362`v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)' 40363 Generates the `pinsrq' machine instruction in 64bit mode. 40364 40365 The following built-in functions are changed to generate new SSE4.1 40366instructions when `-msse4.1' is used. 40367 40368`float __builtin_ia32_vec_ext_v4sf (v4sf, const int)' 40369 Generates the `extractps' machine instruction. 40370 40371`int __builtin_ia32_vec_ext_v4si (v4si, const int)' 40372 Generates the `pextrd' machine instruction. 40373 40374`long long __builtin_ia32_vec_ext_v2di (v2di, const int)' 40375 Generates the `pextrq' machine instruction in 64bit mode. 40376 40377 The following built-in functions are available when `-msse4.2' is 40378used. All of them generate the machine instruction that is part of the 40379name. 40380 40381 v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int) 40382 int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int) 40383 int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int) 40384 int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int) 40385 int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int) 40386 int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int) 40387 int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int) 40388 v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int) 40389 int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int) 40390 int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int) 40391 int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int) 40392 int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int) 40393 int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int) 40394 int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int) 40395 v2di __builtin_ia32_pcmpgtq (v2di, v2di) 40396 40397 The following built-in functions are available when `-msse4.2' is used. 40398 40399`unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)' 40400 Generates the `crc32b' machine instruction. 40401 40402`unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)' 40403 Generates the `crc32w' machine instruction. 40404 40405`unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)' 40406 Generates the `crc32l' machine instruction. 40407 40408`unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)' 40409 Generates the `crc32q' machine instruction. 40410 40411 The following built-in functions are changed to generate new SSE4.2 40412instructions when `-msse4.2' is used. 40413 40414`int __builtin_popcount (unsigned int)' 40415 Generates the `popcntl' machine instruction. 40416 40417`int __builtin_popcountl (unsigned long)' 40418 Generates the `popcntl' or `popcntq' machine instruction, 40419 depending on the size of `unsigned long'. 40420 40421`int __builtin_popcountll (unsigned long long)' 40422 Generates the `popcntq' machine instruction. 40423 40424 The following built-in functions are available when `-mavx' is used. 40425All of them generate the machine instruction that is part of the name. 40426 40427 v4df __builtin_ia32_addpd256 (v4df,v4df) 40428 v8sf __builtin_ia32_addps256 (v8sf,v8sf) 40429 v4df __builtin_ia32_addsubpd256 (v4df,v4df) 40430 v8sf __builtin_ia32_addsubps256 (v8sf,v8sf) 40431 v4df __builtin_ia32_andnpd256 (v4df,v4df) 40432 v8sf __builtin_ia32_andnps256 (v8sf,v8sf) 40433 v4df __builtin_ia32_andpd256 (v4df,v4df) 40434 v8sf __builtin_ia32_andps256 (v8sf,v8sf) 40435 v4df __builtin_ia32_blendpd256 (v4df,v4df,int) 40436 v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int) 40437 v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df) 40438 v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf) 40439 v2df __builtin_ia32_cmppd (v2df,v2df,int) 40440 v4df __builtin_ia32_cmppd256 (v4df,v4df,int) 40441 v4sf __builtin_ia32_cmpps (v4sf,v4sf,int) 40442 v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int) 40443 v2df __builtin_ia32_cmpsd (v2df,v2df,int) 40444 v4sf __builtin_ia32_cmpss (v4sf,v4sf,int) 40445 v4df __builtin_ia32_cvtdq2pd256 (v4si) 40446 v8sf __builtin_ia32_cvtdq2ps256 (v8si) 40447 v4si __builtin_ia32_cvtpd2dq256 (v4df) 40448 v4sf __builtin_ia32_cvtpd2ps256 (v4df) 40449 v8si __builtin_ia32_cvtps2dq256 (v8sf) 40450 v4df __builtin_ia32_cvtps2pd256 (v4sf) 40451 v4si __builtin_ia32_cvttpd2dq256 (v4df) 40452 v8si __builtin_ia32_cvttps2dq256 (v8sf) 40453 v4df __builtin_ia32_divpd256 (v4df,v4df) 40454 v8sf __builtin_ia32_divps256 (v8sf,v8sf) 40455 v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int) 40456 v4df __builtin_ia32_haddpd256 (v4df,v4df) 40457 v8sf __builtin_ia32_haddps256 (v8sf,v8sf) 40458 v4df __builtin_ia32_hsubpd256 (v4df,v4df) 40459 v8sf __builtin_ia32_hsubps256 (v8sf,v8sf) 40460 v32qi __builtin_ia32_lddqu256 (pcchar) 40461 v32qi __builtin_ia32_loaddqu256 (pcchar) 40462 v4df __builtin_ia32_loadupd256 (pcdouble) 40463 v8sf __builtin_ia32_loadups256 (pcfloat) 40464 v2df __builtin_ia32_maskloadpd (pcv2df,v2df) 40465 v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df) 40466 v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf) 40467 v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf) 40468 void __builtin_ia32_maskstorepd (pv2df,v2df,v2df) 40469 void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df) 40470 void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf) 40471 void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf) 40472 v4df __builtin_ia32_maxpd256 (v4df,v4df) 40473 v8sf __builtin_ia32_maxps256 (v8sf,v8sf) 40474 v4df __builtin_ia32_minpd256 (v4df,v4df) 40475 v8sf __builtin_ia32_minps256 (v8sf,v8sf) 40476 v4df __builtin_ia32_movddup256 (v4df) 40477 int __builtin_ia32_movmskpd256 (v4df) 40478 int __builtin_ia32_movmskps256 (v8sf) 40479 v8sf __builtin_ia32_movshdup256 (v8sf) 40480 v8sf __builtin_ia32_movsldup256 (v8sf) 40481 v4df __builtin_ia32_mulpd256 (v4df,v4df) 40482 v8sf __builtin_ia32_mulps256 (v8sf,v8sf) 40483 v4df __builtin_ia32_orpd256 (v4df,v4df) 40484 v8sf __builtin_ia32_orps256 (v8sf,v8sf) 40485 v2df __builtin_ia32_pd_pd256 (v4df) 40486 v4df __builtin_ia32_pd256_pd (v2df) 40487 v4sf __builtin_ia32_ps_ps256 (v8sf) 40488 v8sf __builtin_ia32_ps256_ps (v4sf) 40489 int __builtin_ia32_ptestc256 (v4di,v4di,ptest) 40490 int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest) 40491 int __builtin_ia32_ptestz256 (v4di,v4di,ptest) 40492 v8sf __builtin_ia32_rcpps256 (v8sf) 40493 v4df __builtin_ia32_roundpd256 (v4df,int) 40494 v8sf __builtin_ia32_roundps256 (v8sf,int) 40495 v8sf __builtin_ia32_rsqrtps_nr256 (v8sf) 40496 v8sf __builtin_ia32_rsqrtps256 (v8sf) 40497 v4df __builtin_ia32_shufpd256 (v4df,v4df,int) 40498 v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int) 40499 v4si __builtin_ia32_si_si256 (v8si) 40500 v8si __builtin_ia32_si256_si (v4si) 40501 v4df __builtin_ia32_sqrtpd256 (v4df) 40502 v8sf __builtin_ia32_sqrtps_nr256 (v8sf) 40503 v8sf __builtin_ia32_sqrtps256 (v8sf) 40504 void __builtin_ia32_storedqu256 (pchar,v32qi) 40505 void __builtin_ia32_storeupd256 (pdouble,v4df) 40506 void __builtin_ia32_storeups256 (pfloat,v8sf) 40507 v4df __builtin_ia32_subpd256 (v4df,v4df) 40508 v8sf __builtin_ia32_subps256 (v8sf,v8sf) 40509 v4df __builtin_ia32_unpckhpd256 (v4df,v4df) 40510 v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf) 40511 v4df __builtin_ia32_unpcklpd256 (v4df,v4df) 40512 v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf) 40513 v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df) 40514 v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf) 40515 v4df __builtin_ia32_vbroadcastsd256 (pcdouble) 40516 v4sf __builtin_ia32_vbroadcastss (pcfloat) 40517 v8sf __builtin_ia32_vbroadcastss256 (pcfloat) 40518 v2df __builtin_ia32_vextractf128_pd256 (v4df,int) 40519 v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int) 40520 v4si __builtin_ia32_vextractf128_si256 (v8si,int) 40521 v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int) 40522 v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int) 40523 v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int) 40524 v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int) 40525 v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int) 40526 v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int) 40527 v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int) 40528 v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int) 40529 v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int) 40530 v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int) 40531 v2df __builtin_ia32_vpermilpd (v2df,int) 40532 v4df __builtin_ia32_vpermilpd256 (v4df,int) 40533 v4sf __builtin_ia32_vpermilps (v4sf,int) 40534 v8sf __builtin_ia32_vpermilps256 (v8sf,int) 40535 v2df __builtin_ia32_vpermilvarpd (v2df,v2di) 40536 v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di) 40537 v4sf __builtin_ia32_vpermilvarps (v4sf,v4si) 40538 v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si) 40539 int __builtin_ia32_vtestcpd (v2df,v2df,ptest) 40540 int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest) 40541 int __builtin_ia32_vtestcps (v4sf,v4sf,ptest) 40542 int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest) 40543 int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest) 40544 int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest) 40545 int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest) 40546 int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest) 40547 int __builtin_ia32_vtestzpd (v2df,v2df,ptest) 40548 int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest) 40549 int __builtin_ia32_vtestzps (v4sf,v4sf,ptest) 40550 int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest) 40551 void __builtin_ia32_vzeroall (void) 40552 void __builtin_ia32_vzeroupper (void) 40553 v4df __builtin_ia32_xorpd256 (v4df,v4df) 40554 v8sf __builtin_ia32_xorps256 (v8sf,v8sf) 40555 40556 The following built-in functions are available when `-mavx2' is used. 40557All of them generate the machine instruction that is part of the name. 40558 40559 v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int) 40560 v32qi __builtin_ia32_pabsb256 (v32qi) 40561 v16hi __builtin_ia32_pabsw256 (v16hi) 40562 v8si __builtin_ia32_pabsd256 (v8si) 40563 v16hi __builtin_ia32_packssdw256 (v8si,v8si) 40564 v32qi __builtin_ia32_packsswb256 (v16hi,v16hi) 40565 v16hi __builtin_ia32_packusdw256 (v8si,v8si) 40566 v32qi __builtin_ia32_packuswb256 (v16hi,v16hi) 40567 v32qi __builtin_ia32_paddb256 (v32qi,v32qi) 40568 v16hi __builtin_ia32_paddw256 (v16hi,v16hi) 40569 v8si __builtin_ia32_paddd256 (v8si,v8si) 40570 v4di __builtin_ia32_paddq256 (v4di,v4di) 40571 v32qi __builtin_ia32_paddsb256 (v32qi,v32qi) 40572 v16hi __builtin_ia32_paddsw256 (v16hi,v16hi) 40573 v32qi __builtin_ia32_paddusb256 (v32qi,v32qi) 40574 v16hi __builtin_ia32_paddusw256 (v16hi,v16hi) 40575 v4di __builtin_ia32_palignr256 (v4di,v4di,int) 40576 v4di __builtin_ia32_andsi256 (v4di,v4di) 40577 v4di __builtin_ia32_andnotsi256 (v4di,v4di) 40578 v32qi __builtin_ia32_pavgb256 (v32qi,v32qi) 40579 v16hi __builtin_ia32_pavgw256 (v16hi,v16hi) 40580 v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi) 40581 v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int) 40582 v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi) 40583 v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi) 40584 v8si __builtin_ia32_pcmpeqd256 (c8si,v8si) 40585 v4di __builtin_ia32_pcmpeqq256 (v4di,v4di) 40586 v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi) 40587 v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi) 40588 v8si __builtin_ia32_pcmpgtd256 (v8si,v8si) 40589 v4di __builtin_ia32_pcmpgtq256 (v4di,v4di) 40590 v16hi __builtin_ia32_phaddw256 (v16hi,v16hi) 40591 v8si __builtin_ia32_phaddd256 (v8si,v8si) 40592 v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi) 40593 v16hi __builtin_ia32_phsubw256 (v16hi,v16hi) 40594 v8si __builtin_ia32_phsubd256 (v8si,v8si) 40595 v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi) 40596 v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi) 40597 v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi) 40598 v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi) 40599 v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi) 40600 v8si __builtin_ia32_pmaxsd256 (v8si,v8si) 40601 v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi) 40602 v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi) 40603 v8si __builtin_ia32_pmaxud256 (v8si,v8si) 40604 v32qi __builtin_ia32_pminsb256 (v32qi,v32qi) 40605 v16hi __builtin_ia32_pminsw256 (v16hi,v16hi) 40606 v8si __builtin_ia32_pminsd256 (v8si,v8si) 40607 v32qi __builtin_ia32_pminub256 (v32qi,v32qi) 40608 v16hi __builtin_ia32_pminuw256 (v16hi,v16hi) 40609 v8si __builtin_ia32_pminud256 (v8si,v8si) 40610 int __builtin_ia32_pmovmskb256 (v32qi) 40611 v16hi __builtin_ia32_pmovsxbw256 (v16qi) 40612 v8si __builtin_ia32_pmovsxbd256 (v16qi) 40613 v4di __builtin_ia32_pmovsxbq256 (v16qi) 40614 v8si __builtin_ia32_pmovsxwd256 (v8hi) 40615 v4di __builtin_ia32_pmovsxwq256 (v8hi) 40616 v4di __builtin_ia32_pmovsxdq256 (v4si) 40617 v16hi __builtin_ia32_pmovzxbw256 (v16qi) 40618 v8si __builtin_ia32_pmovzxbd256 (v16qi) 40619 v4di __builtin_ia32_pmovzxbq256 (v16qi) 40620 v8si __builtin_ia32_pmovzxwd256 (v8hi) 40621 v4di __builtin_ia32_pmovzxwq256 (v8hi) 40622 v4di __builtin_ia32_pmovzxdq256 (v4si) 40623 v4di __builtin_ia32_pmuldq256 (v8si,v8si) 40624 v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi) 40625 v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi) 40626 v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi) 40627 v16hi __builtin_ia32_pmullw256 (v16hi,v16hi) 40628 v8si __builtin_ia32_pmulld256 (v8si,v8si) 40629 v4di __builtin_ia32_pmuludq256 (v8si,v8si) 40630 v4di __builtin_ia32_por256 (v4di,v4di) 40631 v16hi __builtin_ia32_psadbw256 (v32qi,v32qi) 40632 v32qi __builtin_ia32_pshufb256 (v32qi,v32qi) 40633 v8si __builtin_ia32_pshufd256 (v8si,int) 40634 v16hi __builtin_ia32_pshufhw256 (v16hi,int) 40635 v16hi __builtin_ia32_pshuflw256 (v16hi,int) 40636 v32qi __builtin_ia32_psignb256 (v32qi,v32qi) 40637 v16hi __builtin_ia32_psignw256 (v16hi,v16hi) 40638 v8si __builtin_ia32_psignd256 (v8si,v8si) 40639 v4di __builtin_ia32_pslldqi256 (v4di,int) 40640 v16hi __builtin_ia32_psllwi256 (16hi,int) 40641 v16hi __builtin_ia32_psllw256(v16hi,v8hi) 40642 v8si __builtin_ia32_pslldi256 (v8si,int) 40643 v8si __builtin_ia32_pslld256(v8si,v4si) 40644 v4di __builtin_ia32_psllqi256 (v4di,int) 40645 v4di __builtin_ia32_psllq256(v4di,v2di) 40646 v16hi __builtin_ia32_psrawi256 (v16hi,int) 40647 v16hi __builtin_ia32_psraw256 (v16hi,v8hi) 40648 v8si __builtin_ia32_psradi256 (v8si,int) 40649 v8si __builtin_ia32_psrad256 (v8si,v4si) 40650 v4di __builtin_ia32_psrldqi256 (v4di, int) 40651 v16hi __builtin_ia32_psrlwi256 (v16hi,int) 40652 v16hi __builtin_ia32_psrlw256 (v16hi,v8hi) 40653 v8si __builtin_ia32_psrldi256 (v8si,int) 40654 v8si __builtin_ia32_psrld256 (v8si,v4si) 40655 v4di __builtin_ia32_psrlqi256 (v4di,int) 40656 v4di __builtin_ia32_psrlq256(v4di,v2di) 40657 v32qi __builtin_ia32_psubb256 (v32qi,v32qi) 40658 v32hi __builtin_ia32_psubw256 (v16hi,v16hi) 40659 v8si __builtin_ia32_psubd256 (v8si,v8si) 40660 v4di __builtin_ia32_psubq256 (v4di,v4di) 40661 v32qi __builtin_ia32_psubsb256 (v32qi,v32qi) 40662 v16hi __builtin_ia32_psubsw256 (v16hi,v16hi) 40663 v32qi __builtin_ia32_psubusb256 (v32qi,v32qi) 40664 v16hi __builtin_ia32_psubusw256 (v16hi,v16hi) 40665 v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi) 40666 v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi) 40667 v8si __builtin_ia32_punpckhdq256 (v8si,v8si) 40668 v4di __builtin_ia32_punpckhqdq256 (v4di,v4di) 40669 v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi) 40670 v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi) 40671 v8si __builtin_ia32_punpckldq256 (v8si,v8si) 40672 v4di __builtin_ia32_punpcklqdq256 (v4di,v4di) 40673 v4di __builtin_ia32_pxor256 (v4di,v4di) 40674 v4di __builtin_ia32_movntdqa256 (pv4di) 40675 v4sf __builtin_ia32_vbroadcastss_ps (v4sf) 40676 v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf) 40677 v4df __builtin_ia32_vbroadcastsd_pd256 (v2df) 40678 v4di __builtin_ia32_vbroadcastsi256 (v2di) 40679 v4si __builtin_ia32_pblendd128 (v4si,v4si) 40680 v8si __builtin_ia32_pblendd256 (v8si,v8si) 40681 v32qi __builtin_ia32_pbroadcastb256 (v16qi) 40682 v16hi __builtin_ia32_pbroadcastw256 (v8hi) 40683 v8si __builtin_ia32_pbroadcastd256 (v4si) 40684 v4di __builtin_ia32_pbroadcastq256 (v2di) 40685 v16qi __builtin_ia32_pbroadcastb128 (v16qi) 40686 v8hi __builtin_ia32_pbroadcastw128 (v8hi) 40687 v4si __builtin_ia32_pbroadcastd128 (v4si) 40688 v2di __builtin_ia32_pbroadcastq128 (v2di) 40689 v8si __builtin_ia32_permvarsi256 (v8si,v8si) 40690 v4df __builtin_ia32_permdf256 (v4df,int) 40691 v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf) 40692 v4di __builtin_ia32_permdi256 (v4di,int) 40693 v4di __builtin_ia32_permti256 (v4di,v4di,int) 40694 v4di __builtin_ia32_extract128i256 (v4di,int) 40695 v4di __builtin_ia32_insert128i256 (v4di,v2di,int) 40696 v8si __builtin_ia32_maskloadd256 (pcv8si,v8si) 40697 v4di __builtin_ia32_maskloadq256 (pcv4di,v4di) 40698 v4si __builtin_ia32_maskloadd (pcv4si,v4si) 40699 v2di __builtin_ia32_maskloadq (pcv2di,v2di) 40700 void __builtin_ia32_maskstored256 (pv8si,v8si,v8si) 40701 void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di) 40702 void __builtin_ia32_maskstored (pv4si,v4si,v4si) 40703 void __builtin_ia32_maskstoreq (pv2di,v2di,v2di) 40704 v8si __builtin_ia32_psllv8si (v8si,v8si) 40705 v4si __builtin_ia32_psllv4si (v4si,v4si) 40706 v4di __builtin_ia32_psllv4di (v4di,v4di) 40707 v2di __builtin_ia32_psllv2di (v2di,v2di) 40708 v8si __builtin_ia32_psrav8si (v8si,v8si) 40709 v4si __builtin_ia32_psrav4si (v4si,v4si) 40710 v8si __builtin_ia32_psrlv8si (v8si,v8si) 40711 v4si __builtin_ia32_psrlv4si (v4si,v4si) 40712 v4di __builtin_ia32_psrlv4di (v4di,v4di) 40713 v2di __builtin_ia32_psrlv2di (v2di,v2di) 40714 v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int) 40715 v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int) 40716 v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int) 40717 v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int) 40718 v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int) 40719 v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int) 40720 v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int) 40721 v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int) 40722 v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int) 40723 v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int) 40724 v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int) 40725 v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int) 40726 v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int) 40727 v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int) 40728 v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int) 40729 v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int) 40730 40731 The following built-in functions are available when `-maes' is used. 40732All of them generate the machine instruction that is part of the name. 40733 40734 v2di __builtin_ia32_aesenc128 (v2di, v2di) 40735 v2di __builtin_ia32_aesenclast128 (v2di, v2di) 40736 v2di __builtin_ia32_aesdec128 (v2di, v2di) 40737 v2di __builtin_ia32_aesdeclast128 (v2di, v2di) 40738 v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) 40739 v2di __builtin_ia32_aesimc128 (v2di) 40740 40741 The following built-in function is available when `-mpclmul' is used. 40742 40743`v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)' 40744 Generates the `pclmulqdq' machine instruction. 40745 40746 The following built-in function is available when `-mfsgsbase' is 40747used. All of them generate the machine instruction that is part of the 40748name. 40749 40750 unsigned int __builtin_ia32_rdfsbase32 (void) 40751 unsigned long long __builtin_ia32_rdfsbase64 (void) 40752 unsigned int __builtin_ia32_rdgsbase32 (void) 40753 unsigned long long __builtin_ia32_rdgsbase64 (void) 40754 void _writefsbase_u32 (unsigned int) 40755 void _writefsbase_u64 (unsigned long long) 40756 void _writegsbase_u32 (unsigned int) 40757 void _writegsbase_u64 (unsigned long long) 40758 40759 The following built-in function is available when `-mrdrnd' is used. 40760All of them generate the machine instruction that is part of the name. 40761 40762 unsigned int __builtin_ia32_rdrand16_step (unsigned short *) 40763 unsigned int __builtin_ia32_rdrand32_step (unsigned int *) 40764 unsigned int __builtin_ia32_rdrand64_step (unsigned long long *) 40765 40766 The following built-in functions are available when `-msse4a' is used. 40767All of them generate the machine instruction that is part of the name. 40768 40769 void __builtin_ia32_movntsd (double *, v2df) 40770 void __builtin_ia32_movntss (float *, v4sf) 40771 v2di __builtin_ia32_extrq (v2di, v16qi) 40772 v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int) 40773 v2di __builtin_ia32_insertq (v2di, v2di) 40774 v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int) 40775 40776 The following built-in functions are available when `-mxop' is used. 40777 v2df __builtin_ia32_vfrczpd (v2df) 40778 v4sf __builtin_ia32_vfrczps (v4sf) 40779 v2df __builtin_ia32_vfrczsd (v2df) 40780 v4sf __builtin_ia32_vfrczss (v4sf) 40781 v4df __builtin_ia32_vfrczpd256 (v4df) 40782 v8sf __builtin_ia32_vfrczps256 (v8sf) 40783 v2di __builtin_ia32_vpcmov (v2di, v2di, v2di) 40784 v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di) 40785 v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si) 40786 v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi) 40787 v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi) 40788 v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df) 40789 v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf) 40790 v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di) 40791 v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si) 40792 v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi) 40793 v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi) 40794 v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df) 40795 v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf) 40796 v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi) 40797 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 40798 v4si __builtin_ia32_vpcomeqd (v4si, v4si) 40799 v2di __builtin_ia32_vpcomeqq (v2di, v2di) 40800 v16qi __builtin_ia32_vpcomequb (v16qi, v16qi) 40801 v4si __builtin_ia32_vpcomequd (v4si, v4si) 40802 v2di __builtin_ia32_vpcomequq (v2di, v2di) 40803 v8hi __builtin_ia32_vpcomequw (v8hi, v8hi) 40804 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 40805 v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi) 40806 v4si __builtin_ia32_vpcomfalsed (v4si, v4si) 40807 v2di __builtin_ia32_vpcomfalseq (v2di, v2di) 40808 v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi) 40809 v4si __builtin_ia32_vpcomfalseud (v4si, v4si) 40810 v2di __builtin_ia32_vpcomfalseuq (v2di, v2di) 40811 v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi) 40812 v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi) 40813 v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi) 40814 v4si __builtin_ia32_vpcomged (v4si, v4si) 40815 v2di __builtin_ia32_vpcomgeq (v2di, v2di) 40816 v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi) 40817 v4si __builtin_ia32_vpcomgeud (v4si, v4si) 40818 v2di __builtin_ia32_vpcomgeuq (v2di, v2di) 40819 v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi) 40820 v8hi __builtin_ia32_vpcomgew (v8hi, v8hi) 40821 v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi) 40822 v4si __builtin_ia32_vpcomgtd (v4si, v4si) 40823 v2di __builtin_ia32_vpcomgtq (v2di, v2di) 40824 v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi) 40825 v4si __builtin_ia32_vpcomgtud (v4si, v4si) 40826 v2di __builtin_ia32_vpcomgtuq (v2di, v2di) 40827 v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi) 40828 v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi) 40829 v16qi __builtin_ia32_vpcomleb (v16qi, v16qi) 40830 v4si __builtin_ia32_vpcomled (v4si, v4si) 40831 v2di __builtin_ia32_vpcomleq (v2di, v2di) 40832 v16qi __builtin_ia32_vpcomleub (v16qi, v16qi) 40833 v4si __builtin_ia32_vpcomleud (v4si, v4si) 40834 v2di __builtin_ia32_vpcomleuq (v2di, v2di) 40835 v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi) 40836 v8hi __builtin_ia32_vpcomlew (v8hi, v8hi) 40837 v16qi __builtin_ia32_vpcomltb (v16qi, v16qi) 40838 v4si __builtin_ia32_vpcomltd (v4si, v4si) 40839 v2di __builtin_ia32_vpcomltq (v2di, v2di) 40840 v16qi __builtin_ia32_vpcomltub (v16qi, v16qi) 40841 v4si __builtin_ia32_vpcomltud (v4si, v4si) 40842 v2di __builtin_ia32_vpcomltuq (v2di, v2di) 40843 v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi) 40844 v8hi __builtin_ia32_vpcomltw (v8hi, v8hi) 40845 v16qi __builtin_ia32_vpcomneb (v16qi, v16qi) 40846 v4si __builtin_ia32_vpcomned (v4si, v4si) 40847 v2di __builtin_ia32_vpcomneq (v2di, v2di) 40848 v16qi __builtin_ia32_vpcomneub (v16qi, v16qi) 40849 v4si __builtin_ia32_vpcomneud (v4si, v4si) 40850 v2di __builtin_ia32_vpcomneuq (v2di, v2di) 40851 v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi) 40852 v8hi __builtin_ia32_vpcomnew (v8hi, v8hi) 40853 v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi) 40854 v4si __builtin_ia32_vpcomtrued (v4si, v4si) 40855 v2di __builtin_ia32_vpcomtrueq (v2di, v2di) 40856 v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi) 40857 v4si __builtin_ia32_vpcomtrueud (v4si, v4si) 40858 v2di __builtin_ia32_vpcomtrueuq (v2di, v2di) 40859 v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi) 40860 v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi) 40861 v4si __builtin_ia32_vphaddbd (v16qi) 40862 v2di __builtin_ia32_vphaddbq (v16qi) 40863 v8hi __builtin_ia32_vphaddbw (v16qi) 40864 v2di __builtin_ia32_vphadddq (v4si) 40865 v4si __builtin_ia32_vphaddubd (v16qi) 40866 v2di __builtin_ia32_vphaddubq (v16qi) 40867 v8hi __builtin_ia32_vphaddubw (v16qi) 40868 v2di __builtin_ia32_vphaddudq (v4si) 40869 v4si __builtin_ia32_vphadduwd (v8hi) 40870 v2di __builtin_ia32_vphadduwq (v8hi) 40871 v4si __builtin_ia32_vphaddwd (v8hi) 40872 v2di __builtin_ia32_vphaddwq (v8hi) 40873 v8hi __builtin_ia32_vphsubbw (v16qi) 40874 v2di __builtin_ia32_vphsubdq (v4si) 40875 v4si __builtin_ia32_vphsubwd (v8hi) 40876 v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si) 40877 v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di) 40878 v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di) 40879 v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si) 40880 v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di) 40881 v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di) 40882 v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si) 40883 v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi) 40884 v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si) 40885 v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi) 40886 v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si) 40887 v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si) 40888 v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi) 40889 v16qi __builtin_ia32_vprotb (v16qi, v16qi) 40890 v4si __builtin_ia32_vprotd (v4si, v4si) 40891 v2di __builtin_ia32_vprotq (v2di, v2di) 40892 v8hi __builtin_ia32_vprotw (v8hi, v8hi) 40893 v16qi __builtin_ia32_vpshab (v16qi, v16qi) 40894 v4si __builtin_ia32_vpshad (v4si, v4si) 40895 v2di __builtin_ia32_vpshaq (v2di, v2di) 40896 v8hi __builtin_ia32_vpshaw (v8hi, v8hi) 40897 v16qi __builtin_ia32_vpshlb (v16qi, v16qi) 40898 v4si __builtin_ia32_vpshld (v4si, v4si) 40899 v2di __builtin_ia32_vpshlq (v2di, v2di) 40900 v8hi __builtin_ia32_vpshlw (v8hi, v8hi) 40901 40902 The following built-in functions are available when `-mfma4' is used. 40903All of them generate the machine instruction that is part of the name. 40904 40905 v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df) 40906 v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf) 40907 v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df) 40908 v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf) 40909 v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df) 40910 v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf) 40911 v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df) 40912 v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf) 40913 v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df) 40914 v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf) 40915 v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df) 40916 v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf) 40917 v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df) 40918 v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf) 40919 v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df) 40920 v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf) 40921 v2df __builtin_ia32_vfmaddsubpd (v2df, v2df, v2df) 40922 v4sf __builtin_ia32_vfmaddsubps (v4sf, v4sf, v4sf) 40923 v2df __builtin_ia32_vfmsubaddpd (v2df, v2df, v2df) 40924 v4sf __builtin_ia32_vfmsubaddps (v4sf, v4sf, v4sf) 40925 v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df) 40926 v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf) 40927 v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df) 40928 v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf) 40929 v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df) 40930 v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf) 40931 v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df) 40932 v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf) 40933 v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df) 40934 v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf) 40935 v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df) 40936 v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf) 40937 40938 The following built-in functions are available when `-mlwp' is used. 40939 40940 void __builtin_ia32_llwpcb16 (void *); 40941 void __builtin_ia32_llwpcb32 (void *); 40942 void __builtin_ia32_llwpcb64 (void *); 40943 void * __builtin_ia32_llwpcb16 (void); 40944 void * __builtin_ia32_llwpcb32 (void); 40945 void * __builtin_ia32_llwpcb64 (void); 40946 void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short) 40947 void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int) 40948 void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int) 40949 unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short) 40950 unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int) 40951 unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int) 40952 40953 The following built-in functions are available when `-mbmi' is used. 40954All of them generate the machine instruction that is part of the name. 40955 unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int); 40956 unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long); 40957 40958 The following built-in functions are available when `-mbmi2' is used. 40959All of them generate the machine instruction that is part of the name. 40960 unsigned int _bzhi_u32 (unsigned int, unsigned int) 40961 unsigned int _pdep_u32 (unsigned int, unsigned int) 40962 unsigned int _pext_u32 (unsigned int, unsigned int) 40963 unsigned long long _bzhi_u64 (unsigned long long, unsigned long long) 40964 unsigned long long _pdep_u64 (unsigned long long, unsigned long long) 40965 unsigned long long _pext_u64 (unsigned long long, unsigned long long) 40966 40967 The following built-in functions are available when `-mlzcnt' is used. 40968All of them generate the machine instruction that is part of the name. 40969 unsigned short __builtin_ia32_lzcnt_16(unsigned short); 40970 unsigned int __builtin_ia32_lzcnt_u32(unsigned int); 40971 unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long); 40972 40973 The following built-in functions are available when `-mfxsr' is used. 40974All of them generate the machine instruction that is part of the name. 40975 void __builtin_ia32_fxsave (void *) 40976 void __builtin_ia32_fxrstor (void *) 40977 void __builtin_ia32_fxsave64 (void *) 40978 void __builtin_ia32_fxrstor64 (void *) 40979 40980 The following built-in functions are available when `-mxsave' is used. 40981All of them generate the machine instruction that is part of the name. 40982 void __builtin_ia32_xsave (void *, long long) 40983 void __builtin_ia32_xrstor (void *, long long) 40984 void __builtin_ia32_xsave64 (void *, long long) 40985 void __builtin_ia32_xrstor64 (void *, long long) 40986 40987 The following built-in functions are available when `-mxsaveopt' is 40988used. All of them generate the machine instruction that is part of the 40989name. 40990 void __builtin_ia32_xsaveopt (void *, long long) 40991 void __builtin_ia32_xsaveopt64 (void *, long long) 40992 40993 The following built-in functions are available when `-mtbm' is used. 40994Both of them generate the immediate form of the bextr machine 40995instruction. 40996 unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int); 40997 unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long); 40998 40999 The following built-in functions are available when `-m3dnow' is used. 41000All of them generate the machine instruction that is part of the name. 41001 41002 void __builtin_ia32_femms (void) 41003 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 41004 v2si __builtin_ia32_pf2id (v2sf) 41005 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 41006 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 41007 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 41008 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 41009 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 41010 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 41011 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 41012 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 41013 v2sf __builtin_ia32_pfrcp (v2sf) 41014 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 41015 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 41016 v2sf __builtin_ia32_pfrsqrt (v2sf) 41017 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 41018 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 41019 v2sf __builtin_ia32_pi2fd (v2si) 41020 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 41021 41022 The following built-in functions are available when both `-m3dnow' and 41023`-march=athlon' are used. All of them generate the machine instruction 41024that is part of the name. 41025 41026 v2si __builtin_ia32_pf2iw (v2sf) 41027 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 41028 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 41029 v2sf __builtin_ia32_pi2fw (v2si) 41030 v2sf __builtin_ia32_pswapdsf (v2sf) 41031 v2si __builtin_ia32_pswapdsi (v2si) 41032 41033 The following built-in functions are available when `-mrtm' is used 41034They are used for restricted transactional memory. These are the 41035internal low level functions. Normally the functions in *note x86 41036transactional memory intrinsics:: should be used instead. 41037 41038 int __builtin_ia32_xbegin () 41039 void __builtin_ia32_xend () 41040 void __builtin_ia32_xabort (status) 41041 int __builtin_ia32_xtest () 41042 41043 The following built-in functions are available when `-mmwaitx' is used. 41044All of them generate the machine instruction that is part of the name. 41045 void __builtin_ia32_monitorx (void *, unsigned int, unsigned int) 41046 void __builtin_ia32_mwaitx (unsigned int, unsigned int, unsigned int) 41047 41048 41049File: gcc.info, Node: x86 transactional memory intrinsics, Prev: x86 Built-in Functions, Up: Target Builtins 41050 410516.58.31 x86 Transactional Memory Intrinsics 41052------------------------------------------- 41053 41054These hardware transactional memory intrinsics for x86 allow you to use 41055memory transactions with RTM (Restricted Transactional Memory). This 41056support is enabled with the `-mrtm' option. For using HLE (Hardware 41057Lock Elision) see *note x86 specific memory model extensions for 41058transactional memory:: instead. 41059 41060 A memory transaction commits all changes to memory in an atomic way, 41061as visible to other threads. If the transaction fails it is rolled back 41062and all side effects discarded. 41063 41064 Generally there is no guarantee that a memory transaction ever succeeds 41065and suitable fallback code always needs to be supplied. 41066 41067 -- RTM Function: unsigned _xbegin () 41068 Start a RTM (Restricted Transactional Memory) transaction. 41069 Returns `_XBEGIN_STARTED' when the transaction started 41070 successfully (note this is not 0, so the constant has to be 41071 explicitly tested). 41072 41073 If the transaction aborts, all side-effects are undone and an 41074 abort code encoded as a bit mask is returned. The following 41075 macros are defined: 41076 41077 `_XABORT_EXPLICIT' 41078 Transaction was explicitly aborted with `_xabort'. The 41079 parameter passed to `_xabort' is available with 41080 `_XABORT_CODE(status)'. 41081 41082 `_XABORT_RETRY' 41083 Transaction retry is possible. 41084 41085 `_XABORT_CONFLICT' 41086 Transaction abort due to a memory conflict with another 41087 thread. 41088 41089 `_XABORT_CAPACITY' 41090 Transaction abort due to the transaction using too much 41091 memory. 41092 41093 `_XABORT_DEBUG' 41094 Transaction abort due to a debug trap. 41095 41096 `_XABORT_NESTED' 41097 Transaction abort in an inner nested transaction. 41098 41099 There is no guarantee any transaction ever succeeds, so there 41100 always needs to be a valid fallback path. 41101 41102 -- RTM Function: void _xend () 41103 Commit the current transaction. When no transaction is active this 41104 faults. All memory side-effects of the transaction become visible 41105 to other threads in an atomic manner. 41106 41107 -- RTM Function: int _xtest () 41108 Return a nonzero value if a transaction is currently active, 41109 otherwise 0. 41110 41111 -- RTM Function: void _xabort (status) 41112 Abort the current transaction. When no transaction is active this 41113 is a no-op. The STATUS is an 8-bit constant; its value is encoded 41114 in the return value from `_xbegin'. 41115 41116 Here is an example showing handling for `_XABORT_RETRY' and a fallback 41117path for other failures: 41118 41119 #include <immintrin.h> 41120 41121 int n_tries, max_tries; 41122 unsigned status = _XABORT_EXPLICIT; 41123 ... 41124 41125 for (n_tries = 0; n_tries < max_tries; n_tries++) 41126 { 41127 status = _xbegin (); 41128 if (status == _XBEGIN_STARTED || !(status & _XABORT_RETRY)) 41129 break; 41130 } 41131 if (status == _XBEGIN_STARTED) 41132 { 41133 ... transaction code... 41134 _xend (); 41135 } 41136 else 41137 { 41138 ... non-transactional fallback path... 41139 } 41140 41141Note that, in most cases, the transactional and non-transactional code 41142must synchronize together to ensure consistency. 41143 41144 41145File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 41146 411476.59 Format Checks Specific to Particular Target Machines 41148========================================================= 41149 41150For some target machines, GCC supports additional options to the format 41151attribute (*note Declaring Attributes of Functions: Function 41152Attributes.). 41153 41154* Menu: 41155 41156* Solaris Format Checks:: 41157* Darwin Format Checks:: 41158 41159 41160File: gcc.info, Node: Solaris Format Checks, Next: Darwin Format Checks, Up: Target Format Checks 41161 411626.59.1 Solaris Format Checks 41163---------------------------- 41164 41165Solaris targets support the `cmn_err' (or `__cmn_err__') format check. 41166`cmn_err' accepts a subset of the standard `printf' conversions, and 41167the two-argument `%b' conversion for displaying bit-fields. See the 41168Solaris man page for `cmn_err' for more information. 41169 41170 41171File: gcc.info, Node: Darwin Format Checks, Prev: Solaris Format Checks, Up: Target Format Checks 41172 411736.59.2 Darwin Format Checks 41174--------------------------- 41175 41176Darwin targets support the `CFString' (or `__CFString__') in the format 41177attribute context. Declarations made with such attribution are parsed 41178for correct syntax and format argument types. However, parsing of the 41179format string itself is currently undefined and is not carried out by 41180this version of the compiler. 41181 41182 Additionally, `CFStringRefs' (defined by the `CoreFoundation' headers) 41183may also be used as format arguments. Note that the relevant headers 41184are only likely to be available on Darwin (OSX) installations. On such 41185installations, the XCode and system documentation provide descriptions 41186of `CFString', `CFStringRefs' and associated functions. 41187 41188 41189File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 41190 411916.60 Pragmas Accepted by GCC 41192============================ 41193 41194GCC supports several types of pragmas, primarily in order to compile 41195code originally written for other compilers. Note that in general we 41196do not recommend the use of pragmas; *Note Function Attributes::, for 41197further explanation. 41198 41199* Menu: 41200 41201* ARM Pragmas:: 41202* M32C Pragmas:: 41203* MeP Pragmas:: 41204* RS/6000 and PowerPC Pragmas:: 41205* Darwin Pragmas:: 41206* Solaris Pragmas:: 41207* Symbol-Renaming Pragmas:: 41208* Structure-Packing Pragmas:: 41209* Weak Pragmas:: 41210* Diagnostic Pragmas:: 41211* Visibility Pragmas:: 41212* Push/Pop Macro Pragmas:: 41213* Function Specific Option Pragmas:: 41214* Loop-Specific Pragmas:: 41215 41216 41217File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 41218 412196.60.1 ARM Pragmas 41220------------------ 41221 41222The ARM target defines pragmas for controlling the default addition of 41223`long_call' and `short_call' attributes to functions. *Note Function 41224Attributes::, for information about the effects of these attributes. 41225 41226`long_calls' 41227 Set all subsequent functions to have the `long_call' attribute. 41228 41229`no_long_calls' 41230 Set all subsequent functions to have the `short_call' attribute. 41231 41232`long_calls_off' 41233 Do not affect the `long_call' or `short_call' attributes of 41234 subsequent functions. 41235 41236 41237File: gcc.info, Node: M32C Pragmas, Next: MeP Pragmas, Prev: ARM Pragmas, Up: Pragmas 41238 412396.60.2 M32C Pragmas 41240------------------- 41241 41242`GCC memregs NUMBER' 41243 Overrides the command-line option `-memregs=' for the current 41244 file. Use with care! This pragma must be before any function in 41245 the file, and mixing different memregs values in different objects 41246 may make them incompatible. This pragma is useful when a 41247 performance-critical function uses a memreg for temporary values, 41248 as it may allow you to reduce the number of memregs used. 41249 41250`ADDRESS NAME ADDRESS' 41251 For any declared symbols matching NAME, this does three things to 41252 that symbol: it forces the symbol to be located at the given 41253 address (a number), it forces the symbol to be volatile, and it 41254 changes the symbol's scope to be static. This pragma exists for 41255 compatibility with other compilers, but note that the common 41256 `1234H' numeric syntax is not supported (use `0x1234' instead). 41257 Example: 41258 41259 #pragma ADDRESS port3 0x103 41260 char port3; 41261 41262 41263 41264File: gcc.info, Node: MeP Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: M32C Pragmas, Up: Pragmas 41265 412666.60.3 MeP Pragmas 41267------------------ 41268 41269`custom io_volatile (on|off)' 41270 Overrides the command-line option `-mio-volatile' for the current 41271 file. Note that for compatibility with future GCC releases, this 41272 option should only be used once before any `io' variables in each 41273 file. 41274 41275`GCC coprocessor available REGISTERS' 41276 Specifies which coprocessor registers are available to the register 41277 allocator. REGISTERS may be a single register, register range 41278 separated by ellipses, or comma-separated list of those. Example: 41279 41280 #pragma GCC coprocessor available $c0...$c10, $c28 41281 41282`GCC coprocessor call_saved REGISTERS' 41283 Specifies which coprocessor registers are to be saved and restored 41284 by any function using them. REGISTERS may be a single register, 41285 register range separated by ellipses, or comma-separated list of 41286 those. Example: 41287 41288 #pragma GCC coprocessor call_saved $c4...$c6, $c31 41289 41290`GCC coprocessor subclass '(A|B|C|D)' = REGISTERS' 41291 Creates and defines a register class. These register classes can 41292 be used by inline `asm' constructs. REGISTERS may be a single 41293 register, register range separated by ellipses, or comma-separated 41294 list of those. Example: 41295 41296 #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6 41297 41298 asm ("cpfoo %0" : "=B" (x)); 41299 41300`GCC disinterrupt NAME , NAME ...' 41301 For the named functions, the compiler adds code to disable 41302 interrupts for the duration of those functions. If any functions 41303 so named are not encountered in the source, a warning is emitted 41304 that the pragma is not used. Examples: 41305 41306 #pragma disinterrupt foo 41307 #pragma disinterrupt bar, grill 41308 int foo () { ... } 41309 41310`GCC call NAME , NAME ...' 41311 For the named functions, the compiler always uses a 41312 register-indirect call model when calling the named functions. 41313 Examples: 41314 41315 extern int foo (); 41316 #pragma call foo 41317 41318 41319 41320File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: MeP Pragmas, Up: Pragmas 41321 413226.60.4 RS/6000 and PowerPC Pragmas 41323---------------------------------- 41324 41325The RS/6000 and PowerPC targets define one pragma for controlling 41326whether or not the `longcall' attribute is added to function 41327declarations by default. This pragma overrides the `-mlongcall' 41328option, but not the `longcall' and `shortcall' attributes. *Note 41329RS/6000 and PowerPC Options::, for more information about when long 41330calls are and are not necessary. 41331 41332`longcall (1)' 41333 Apply the `longcall' attribute to all subsequent function 41334 declarations. 41335 41336`longcall (0)' 41337 Do not apply the `longcall' attribute to subsequent function 41338 declarations. 41339 41340 41341File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 41342 413436.60.5 Darwin Pragmas 41344--------------------- 41345 41346The following pragmas are available for all architectures running the 41347Darwin operating system. These are useful for compatibility with other 41348Mac OS compilers. 41349 41350`mark TOKENS...' 41351 This pragma is accepted, but has no effect. 41352 41353`options align=ALIGNMENT' 41354 This pragma sets the alignment of fields in structures. The 41355 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 41356 `power', to emulate PowerPC alignment. Uses of this pragma nest 41357 properly; to restore the previous setting, use `reset' for the 41358 ALIGNMENT. 41359 41360`segment TOKENS...' 41361 This pragma is accepted, but has no effect. 41362 41363`unused (VAR [, VAR]...)' 41364 This pragma declares variables to be possibly unused. GCC does not 41365 produce warnings for the listed variables. The effect is similar 41366 to that of the `unused' attribute, except that this pragma may 41367 appear anywhere within the variables' scopes. 41368 41369 41370File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 41371 413726.60.6 Solaris Pragmas 41373---------------------- 41374 41375The Solaris target supports `#pragma redefine_extname' (*note 41376Symbol-Renaming Pragmas::). It also supports additional `#pragma' 41377directives for compatibility with the system compiler. 41378 41379`align ALIGNMENT (VARIABLE [, VARIABLE]...)' 41380 Increase the minimum alignment of each VARIABLE to ALIGNMENT. 41381 This is the same as GCC's `aligned' attribute *note Variable 41382 Attributes::). Macro expansion occurs on the arguments to this 41383 pragma when compiling C and Objective-C. It does not currently 41384 occur when compiling C++, but this is a bug which may be fixed in 41385 a future release. 41386 41387`fini (FUNCTION [, FUNCTION]...)' 41388 This pragma causes each listed FUNCTION to be called after main, 41389 or during shared module unloading, by adding a call to the `.fini' 41390 section. 41391 41392`init (FUNCTION [, FUNCTION]...)' 41393 This pragma causes each listed FUNCTION to be called during 41394 initialization (before `main') or during shared module loading, by 41395 adding a call to the `.init' section. 41396 41397 41398 41399File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 41400 414016.60.7 Symbol-Renaming Pragmas 41402------------------------------ 41403 41404GCC supports a `#pragma' directive that changes the name used in 41405assembly for a given declaration. While this pragma is supported on all 41406platforms, it is intended primarily to provide compatibility with the 41407Solaris system headers. This effect can also be achieved using the asm 41408labels extension (*note Asm Labels::). 41409 41410`redefine_extname OLDNAME NEWNAME' 41411 This pragma gives the C function OLDNAME the assembly symbol 41412 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' is 41413 defined if this pragma is available (currently on all platforms). 41414 41415 This pragma and the asm labels extension interact in a complicated 41416manner. Here are some corner cases you may want to be aware of: 41417 41418 1. This pragma silently applies only to declarations with external 41419 linkage. Asm labels do not have this restriction. 41420 41421 2. In C++, this pragma silently applies only to declarations with "C" 41422 linkage. Again, asm labels do not have this restriction. 41423 41424 3. If either of the ways of changing the assembly name of a 41425 declaration are applied to a declaration whose assembly name has 41426 already been determined (either by a previous use of one of these 41427 features, or because the compiler needed the assembly name in 41428 order to generate code), and the new name is different, a warning 41429 issues and the name does not change. 41430 41431 4. The OLDNAME used by `#pragma redefine_extname' is always the 41432 C-language name. 41433 41434 41435File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 41436 414376.60.8 Structure-Packing Pragmas 41438-------------------------------- 41439 41440For compatibility with Microsoft Windows compilers, GCC supports a set 41441of `#pragma' directives that change the maximum alignment of members of 41442structures (other than zero-width bit-fields), unions, and classes 41443subsequently defined. The N value below always is required to be a 41444small power of two and specifies the new alignment in bytes. 41445 41446 1. `#pragma pack(N)' simply sets the new alignment. 41447 41448 2. `#pragma pack()' sets the alignment to the one that was in effect 41449 when compilation started (see also command-line option 41450 `-fpack-struct[=N]' *note Code Gen Options::). 41451 41452 3. `#pragma pack(push[,N])' pushes the current alignment setting on 41453 an internal stack and then optionally sets the new alignment. 41454 41455 4. `#pragma pack(pop)' restores the alignment setting to the one 41456 saved at the top of the internal stack (and removes that stack 41457 entry). Note that `#pragma pack([N])' does not influence this 41458 internal stack; thus it is possible to have `#pragma pack(push)' 41459 followed by multiple `#pragma pack(N)' instances and finalized by 41460 a single `#pragma pack(pop)'. 41461 41462 Some targets, e.g. x86 and PowerPC, support the `ms_struct' `#pragma' 41463which lays out a structure as the documented `__attribute__ 41464((ms_struct))'. 41465 1. `#pragma ms_struct on' turns on the layout for structures declared. 41466 41467 2. `#pragma ms_struct off' turns off the layout for structures 41468 declared. 41469 41470 3. `#pragma ms_struct reset' goes back to the default layout. 41471 41472 41473File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 41474 414756.60.9 Weak Pragmas 41476------------------- 41477 41478For compatibility with SVR4, GCC supports a set of `#pragma' directives 41479for declaring symbols to be weak, and defining weak aliases. 41480 41481`#pragma weak SYMBOL' 41482 This pragma declares SYMBOL to be weak, as if the declaration had 41483 the attribute of the same name. The pragma may appear before or 41484 after the declaration of SYMBOL. It is not an error for SYMBOL to 41485 never be defined at all. 41486 41487`#pragma weak SYMBOL1 = SYMBOL2' 41488 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 41489 an error if SYMBOL2 is not defined in the current translation unit. 41490 41491 41492File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 41493 414946.60.10 Diagnostic Pragmas 41495-------------------------- 41496 41497GCC allows the user to selectively enable or disable certain types of 41498diagnostics, and change the kind of the diagnostic. For example, a 41499project's policy might require that all sources compile with `-Werror' 41500but certain files might have exceptions allowing specific types of 41501warnings. Or, a project might selectively enable diagnostics and treat 41502them as errors depending on which preprocessor macros are defined. 41503 41504`#pragma GCC diagnostic KIND OPTION' 41505 Modifies the disposition of a diagnostic. Note that not all 41506 diagnostics are modifiable; at the moment only warnings (normally 41507 controlled by `-W...') can be controlled, and not all of them. 41508 Use `-fdiagnostics-show-option' to determine which diagnostics are 41509 controllable and which option controls them. 41510 41511 KIND is `error' to treat this diagnostic as an error, `warning' to 41512 treat it like a warning (even if `-Werror' is in effect), or 41513 `ignored' if the diagnostic is to be ignored. OPTION is a double 41514 quoted string that matches the command-line option. 41515 41516 #pragma GCC diagnostic warning "-Wformat" 41517 #pragma GCC diagnostic error "-Wformat" 41518 #pragma GCC diagnostic ignored "-Wformat" 41519 41520 Note that these pragmas override any command-line options. GCC 41521 keeps track of the location of each pragma, and issues diagnostics 41522 according to the state as of that point in the source file. Thus, 41523 pragmas occurring after a line do not affect diagnostics caused by 41524 that line. 41525 41526`#pragma GCC diagnostic push' 41527`#pragma GCC diagnostic pop' 41528 Causes GCC to remember the state of the diagnostics as of each 41529 `push', and restore to that point at each `pop'. If a `pop' has 41530 no matching `push', the command-line options are restored. 41531 41532 #pragma GCC diagnostic error "-Wuninitialized" 41533 foo(a); /* error is given for this one */ 41534 #pragma GCC diagnostic push 41535 #pragma GCC diagnostic ignored "-Wuninitialized" 41536 foo(b); /* no diagnostic for this one */ 41537 #pragma GCC diagnostic pop 41538 foo(c); /* error is given for this one */ 41539 #pragma GCC diagnostic pop 41540 foo(d); /* depends on command-line options */ 41541 41542 41543 GCC also offers a simple mechanism for printing messages during 41544compilation. 41545 41546`#pragma message STRING' 41547 Prints STRING as a compiler message on compilation. The message 41548 is informational only, and is neither a compilation warning nor an 41549 error. 41550 41551 #pragma message "Compiling " __FILE__ "..." 41552 41553 STRING may be parenthesized, and is printed with location 41554 information. For example, 41555 41556 #define DO_PRAGMA(x) _Pragma (#x) 41557 #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) 41558 41559 TODO(Remember to fix this) 41560 41561 prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to 41562 fix this'. 41563 41564 41565 41566File: gcc.info, Node: Visibility Pragmas, Next: Push/Pop Macro Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 41567 415686.60.11 Visibility Pragmas 41569-------------------------- 41570 41571`#pragma GCC visibility push(VISIBILITY)' 41572`#pragma GCC visibility pop' 41573 This pragma allows the user to set the visibility for multiple 41574 declarations without having to give each a visibility attribute 41575 (*note Function Attributes::). 41576 41577 In C++, `#pragma GCC visibility' affects only namespace-scope 41578 declarations. Class members and template specializations are not 41579 affected; if you want to override the visibility for a particular 41580 member or instantiation, you must use an attribute. 41581 41582 41583 41584File: gcc.info, Node: Push/Pop Macro Pragmas, Next: Function Specific Option Pragmas, Prev: Visibility Pragmas, Up: Pragmas 41585 415866.60.12 Push/Pop Macro Pragmas 41587------------------------------ 41588 41589For compatibility with Microsoft Windows compilers, GCC supports 41590`#pragma push_macro("MACRO_NAME")' and `#pragma 41591pop_macro("MACRO_NAME")'. 41592 41593`#pragma push_macro("MACRO_NAME")' 41594 This pragma saves the value of the macro named as MACRO_NAME to 41595 the top of the stack for this macro. 41596 41597`#pragma pop_macro("MACRO_NAME")' 41598 This pragma sets the value of the macro named as MACRO_NAME to the 41599 value on top of the stack for this macro. If the stack for 41600 MACRO_NAME is empty, the value of the macro remains unchanged. 41601 41602 For example: 41603 41604 #define X 1 41605 #pragma push_macro("X") 41606 #undef X 41607 #define X -1 41608 #pragma pop_macro("X") 41609 int x [X]; 41610 41611In this example, the definition of X as 1 is saved by `#pragma 41612push_macro' and restored by `#pragma pop_macro'. 41613 41614 41615File: gcc.info, Node: Function Specific Option Pragmas, Next: Loop-Specific Pragmas, Prev: Push/Pop Macro Pragmas, Up: Pragmas 41616 416176.60.13 Function Specific Option Pragmas 41618---------------------------------------- 41619 41620`#pragma GCC target ("STRING"...)' 41621 This pragma allows you to set target specific options for functions 41622 defined later in the source file. One or more strings can be 41623 specified. Each function that is defined after this point is as 41624 if `attribute((target("STRING")))' was specified for that 41625 function. The parenthesis around the options is optional. *Note 41626 Function Attributes::, for more information about the `target' 41627 attribute and the attribute syntax. 41628 41629 The `#pragma GCC target' pragma is presently implemented for x86, 41630 PowerPC, and Nios II targets only. 41631 41632`#pragma GCC optimize ("STRING"...)' 41633 This pragma allows you to set global optimization options for 41634 functions defined later in the source file. One or more strings 41635 can be specified. Each function that is defined after this point 41636 is as if `attribute((optimize("STRING")))' was specified for that 41637 function. The parenthesis around the options is optional. *Note 41638 Function Attributes::, for more information about the `optimize' 41639 attribute and the attribute syntax. 41640 41641`#pragma GCC push_options' 41642`#pragma GCC pop_options' 41643 These pragmas maintain a stack of the current target and 41644 optimization options. It is intended for include files where you 41645 temporarily want to switch to using a different `#pragma GCC 41646 target' or `#pragma GCC optimize' and then to pop back to the 41647 previous options. 41648 41649`#pragma GCC reset_options' 41650 This pragma clears the current `#pragma GCC target' and `#pragma 41651 GCC optimize' to use the default switches as specified on the 41652 command line. 41653 41654 41655File: gcc.info, Node: Loop-Specific Pragmas, Prev: Function Specific Option Pragmas, Up: Pragmas 41656 416576.60.14 Loop-Specific Pragmas 41658----------------------------- 41659 41660`#pragma GCC ivdep' 41661 41662 With this pragma, the programmer asserts that there are no loop-carried 41663dependencies which would prevent consecutive iterations of the 41664following loop from executing concurrently with SIMD (single 41665instruction multiple data) instructions. 41666 41667 For example, the compiler can only unconditionally vectorize the 41668following loop with the pragma: 41669 41670 void foo (int n, int *a, int *b, int *c) 41671 { 41672 int i, j; 41673 #pragma GCC ivdep 41674 for (i = 0; i < n; ++i) 41675 a[i] = b[i] + c[i]; 41676 } 41677 41678In this example, using the `restrict' qualifier had the same effect. In 41679the following example, that would not be possible. Assume k < -m or k 41680>= m. Only with the pragma, the compiler knows that it can 41681unconditionally vectorize the following loop: 41682 41683 void ignore_vec_dep (int *a, int k, int c, int m) 41684 { 41685 #pragma GCC ivdep 41686 for (int i = 0; i < m; i++) 41687 a[i] = a[i + k] * c; 41688 } 41689 41690 41691File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 41692 416936.61 Unnamed Structure and Union Fields 41694======================================= 41695 41696As permitted by ISO C11 and for compatibility with other compilers, GCC 41697allows you to define a structure or union that contains, as fields, 41698structures and unions without names. For example: 41699 41700 struct { 41701 int a; 41702 union { 41703 int b; 41704 float c; 41705 }; 41706 int d; 41707 } foo; 41708 41709In this example, you are able to access members of the unnamed union 41710with code like `foo.b'. Note that only unnamed structs and unions are 41711allowed, you may not have, for example, an unnamed `int'. 41712 41713 You must never create such structures that cause ambiguous field 41714definitions. For example, in this structure: 41715 41716 struct { 41717 int a; 41718 struct { 41719 int a; 41720 }; 41721 } foo; 41722 41723it is ambiguous which `a' is being referred to with `foo.a'. The 41724compiler gives errors for such constructs. 41725 41726 Unless `-fms-extensions' is used, the unnamed field must be a 41727structure or union definition without a tag (for example, `struct { int 41728a; };'). If `-fms-extensions' is used, the field may also be a 41729definition with a tag such as `struct foo { int a; };', a reference to 41730a previously defined structure or union such as `struct foo;', or a 41731reference to a `typedef' name for a previously defined structure or 41732union type. 41733 41734 The option `-fplan9-extensions' enables `-fms-extensions' as well as 41735two other extensions. First, a pointer to a structure is automatically 41736converted to a pointer to an anonymous field for assignments and 41737function calls. For example: 41738 41739 struct s1 { int a; }; 41740 struct s2 { struct s1; }; 41741 extern void f1 (struct s1 *); 41742 void f2 (struct s2 *p) { f1 (p); } 41743 41744In the call to `f1' inside `f2', the pointer `p' is converted into a 41745pointer to the anonymous field. 41746 41747 Second, when the type of an anonymous field is a `typedef' for a 41748`struct' or `union', code may refer to the field using the name of the 41749`typedef'. 41750 41751 typedef struct { int a; } s1; 41752 struct s2 { s1; }; 41753 s1 f1 (struct s2 *p) { return p->s1; } 41754 41755 These usages are only permitted when they are not ambiguous. 41756 41757 41758File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions 41759 417606.62 Thread-Local Storage 41761========================= 41762 41763Thread-local storage (TLS) is a mechanism by which variables are 41764allocated such that there is one instance of the variable per extant 41765thread. The runtime model GCC uses to implement this originates in the 41766IA-64 processor-specific ABI, but has since been migrated to other 41767processors as well. It requires significant support from the linker 41768(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 41769`libpthread.so'), so it is not available everywhere. 41770 41771 At the user level, the extension is visible with a new storage class 41772keyword: `__thread'. For example: 41773 41774 __thread int i; 41775 extern __thread struct state s; 41776 static __thread char *p; 41777 41778 The `__thread' specifier may be used alone, with the `extern' or 41779`static' specifiers, but with no other storage class specifier. When 41780used with `extern' or `static', `__thread' must appear immediately 41781after the other storage class specifier. 41782 41783 The `__thread' specifier may be applied to any global, file-scoped 41784static, function-scoped static, or static data member of a class. It 41785may not be applied to block-scoped automatic or non-static data member. 41786 41787 When the address-of operator is applied to a thread-local variable, it 41788is evaluated at run time and returns the address of the current thread's 41789instance of that variable. An address so obtained may be used by any 41790thread. When a thread terminates, any pointers to thread-local 41791variables in that thread become invalid. 41792 41793 No static initialization may refer to the address of a thread-local 41794variable. 41795 41796 In C++, if an initializer is present for a thread-local variable, it 41797must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 41798standard. 41799 41800 See ELF Handling For Thread-Local Storage 41801(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of 41802the four thread-local storage addressing models, and how the runtime is 41803expected to function. 41804 41805* Menu: 41806 41807* C99 Thread-Local Edits:: 41808* C++98 Thread-Local Edits:: 41809 41810 41811File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 41812 418136.62.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 41814------------------------------------------------------- 41815 41816The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 41817document the exact semantics of the language extension. 41818 41819 * `5.1.2 Execution environments' 41820 41821 Add new text after paragraph 1 41822 41823 Within either execution environment, a "thread" is a flow of 41824 control within a program. It is implementation defined 41825 whether or not there may be more than one thread associated 41826 with a program. It is implementation defined how threads 41827 beyond the first are created, the name and type of the 41828 function called at thread startup, and how threads may be 41829 terminated. However, objects with thread storage duration 41830 shall be initialized before thread startup. 41831 41832 * `6.2.4 Storage durations of objects' 41833 41834 Add new text before paragraph 3 41835 41836 An object whose identifier is declared with the storage-class 41837 specifier `__thread' has "thread storage duration". Its 41838 lifetime is the entire execution of the thread, and its 41839 stored value is initialized only once, prior to thread 41840 startup. 41841 41842 * `6.4.1 Keywords' 41843 41844 Add `__thread'. 41845 41846 * `6.7.1 Storage-class specifiers' 41847 41848 Add `__thread' to the list of storage class specifiers in 41849 paragraph 1. 41850 41851 Change paragraph 2 to 41852 41853 With the exception of `__thread', at most one storage-class 41854 specifier may be given [...]. The `__thread' specifier may 41855 be used alone, or immediately following `extern' or `static'. 41856 41857 Add new text after paragraph 6 41858 41859 The declaration of an identifier for a variable that has 41860 block scope that specifies `__thread' shall also specify 41861 either `extern' or `static'. 41862 41863 The `__thread' specifier shall be used only with variables. 41864 41865 41866File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 41867 418686.62.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 41869-------------------------------------------------------- 41870 41871The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 41872that document the exact semantics of the language extension. 41873 41874 * [intro.execution] 41875 41876 New text after paragraph 4 41877 41878 A "thread" is a flow of control within the abstract machine. 41879 It is implementation defined whether or not there may be more 41880 than one thread. 41881 41882 New text after paragraph 7 41883 41884 It is unspecified whether additional action must be taken to 41885 ensure when and whether side effects are visible to other 41886 threads. 41887 41888 * [lex.key] 41889 41890 Add `__thread'. 41891 41892 * [basic.start.main] 41893 41894 Add after paragraph 5 41895 41896 The thread that begins execution at the `main' function is 41897 called the "main thread". It is implementation defined how 41898 functions beginning threads other than the main thread are 41899 designated or typed. A function so designated, as well as 41900 the `main' function, is called a "thread startup function". 41901 It is implementation defined what happens if a thread startup 41902 function returns. It is implementation defined what happens 41903 to other threads when any thread calls `exit'. 41904 41905 * [basic.start.init] 41906 41907 Add after paragraph 4 41908 41909 The storage for an object of thread storage duration shall be 41910 statically initialized before the first statement of the 41911 thread startup function. An object of thread storage 41912 duration shall not require dynamic initialization. 41913 41914 * [basic.start.term] 41915 41916 Add after paragraph 3 41917 41918 The type of an object with thread storage duration shall not 41919 have a non-trivial destructor, nor shall it be an array type 41920 whose elements (directly or indirectly) have non-trivial 41921 destructors. 41922 41923 * [basic.stc] 41924 41925 Add "thread storage duration" to the list in paragraph 1. 41926 41927 Change paragraph 2 41928 41929 Thread, static, and automatic storage durations are 41930 associated with objects introduced by declarations [...]. 41931 41932 Add `__thread' to the list of specifiers in paragraph 3. 41933 41934 * [basic.stc.thread] 41935 41936 New section before [basic.stc.static] 41937 41938 The keyword `__thread' applied to a non-local object gives the 41939 object thread storage duration. 41940 41941 A local variable or class data member declared both `static' 41942 and `__thread' gives the variable or member thread storage 41943 duration. 41944 41945 * [basic.stc.static] 41946 41947 Change paragraph 1 41948 41949 All objects that have neither thread storage duration, dynamic 41950 storage duration nor are local [...]. 41951 41952 * [dcl.stc] 41953 41954 Add `__thread' to the list in paragraph 1. 41955 41956 Change paragraph 1 41957 41958 With the exception of `__thread', at most one 41959 STORAGE-CLASS-SPECIFIER shall appear in a given 41960 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 41961 alone, or immediately following the `extern' or `static' 41962 specifiers. [...] 41963 41964 Add after paragraph 5 41965 41966 The `__thread' specifier can be applied only to the names of 41967 objects and to anonymous unions. 41968 41969 * [class.mem] 41970 41971 Add after paragraph 6 41972 41973 Non-`static' members shall not be `__thread'. 41974 41975 41976File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions 41977 419786.63 Binary Constants using the `0b' Prefix 41979=========================================== 41980 41981Integer constants can be written as binary constants, consisting of a 41982sequence of `0' and `1' digits, prefixed by `0b' or `0B'. This is 41983particularly useful in environments that operate a lot on the bit level 41984(like microcontrollers). 41985 41986 The following statements are identical: 41987 41988 i = 42; 41989 i = 0x2a; 41990 i = 052; 41991 i = 0b101010; 41992 41993 The type of these constants follows the same rules as for octal or 41994hexadecimal integer constants, so suffixes like `L' or `UL' can be 41995applied. 41996 41997 41998File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top 41999 420007 Extensions to the C++ Language 42001******************************** 42002 42003The GNU compiler provides these extensions to the C++ language (and you 42004can also use most of the C language extensions in your C++ programs). 42005If you want to write code that checks whether these features are 42006available, you can test for the GNU compiler the same way as for C 42007programs: check for a predefined macro `__GNUC__'. You can also use 42008`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 42009(cpp)Common Predefined Macros.). 42010 42011* Menu: 42012 42013* C++ Volatiles:: What constitutes an access to a volatile object. 42014* Restricted Pointers:: C99 restricted pointers and references. 42015* Vague Linkage:: Where G++ puts inlines, vtables and such. 42016* C++ Interface:: You can use a single C++ header file for both 42017 declarations and definitions. 42018* Template Instantiation:: Methods for ensuring that exactly one copy of 42019 each needed template instantiation is emitted. 42020* Bound member functions:: You can extract a function pointer to the 42021 method denoted by a `->*' or `.*' expression. 42022* C++ Attributes:: Variable, function, and type attributes for C++ only. 42023* Function Multiversioning:: Declaring multiple function versions. 42024* Namespace Association:: Strong using-directives for namespace association. 42025* Type Traits:: Compiler support for type traits 42026* Java Exceptions:: Tweaking exception handling to work with Java. 42027* Deprecated Features:: Things will disappear from G++. 42028* Backwards Compatibility:: Compatibilities with earlier definitions of C++. 42029 42030 42031File: gcc.info, Node: C++ Volatiles, Next: Restricted Pointers, Up: C++ Extensions 42032 420337.1 When is a Volatile C++ Object Accessed? 42034=========================================== 42035 42036The C++ standard differs from the C standard in its treatment of 42037volatile objects. It fails to specify what constitutes a volatile 42038access, except to say that C++ should behave in a similar manner to C 42039with respect to volatiles, where possible. However, the different 42040lvalueness of expressions between C and C++ complicate the behavior. 42041G++ behaves the same as GCC for volatile access, *Note Volatiles: C 42042Extensions, for a description of GCC's behavior. 42043 42044 The C and C++ language specifications differ when an object is 42045accessed in a void context: 42046 42047 volatile int *src = SOMEVALUE; 42048 *src; 42049 42050 The C++ standard specifies that such expressions do not undergo lvalue 42051to rvalue conversion, and that the type of the dereferenced object may 42052be incomplete. The C++ standard does not specify explicitly that it is 42053lvalue to rvalue conversion that is responsible for causing an access. 42054There is reason to believe that it is, because otherwise certain simple 42055expressions become undefined. However, because it would surprise most 42056programmers, G++ treats dereferencing a pointer to volatile object of 42057complete type as GCC would do for an equivalent type in C. When the 42058object has incomplete type, G++ issues a warning; if you wish to force 42059an error, you must force a conversion to rvalue with, for instance, a 42060static cast. 42061 42062 When using a reference to volatile, G++ does not treat equivalent 42063expressions as accesses to volatiles, but instead issues a warning that 42064no volatile is accessed. The rationale for this is that otherwise it 42065becomes difficult to determine where volatile access occur, and not 42066possible to ignore the return value from functions returning volatile 42067references. Again, if you wish to force a read, cast the reference to 42068an rvalue. 42069 42070 G++ implements the same behavior as GCC does when assigning to a 42071volatile object--there is no reread of the assigned-to object, the 42072assigned rvalue is reused. Note that in C++ assignment expressions are 42073lvalues, and if used as an lvalue, the volatile object is referred to. 42074For instance, VREF refers to VOBJ, as expected, in the following 42075example: 42076 42077 volatile int vobj; 42078 volatile int &vref = vobj = SOMETHING; 42079 42080 42081File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: C++ Volatiles, Up: C++ Extensions 42082 420837.2 Restricting Pointer Aliasing 42084================================ 42085 42086As with the C front end, G++ understands the C99 feature of restricted 42087pointers, specified with the `__restrict__', or `__restrict' type 42088qualifier. Because you cannot compile C++ by specifying the `-std=c99' 42089language flag, `restrict' is not a keyword in C++. 42090 42091 In addition to allowing restricted pointers, you can specify restricted 42092references, which indicate that the reference is not aliased in the 42093local context. 42094 42095 void fn (int *__restrict__ rptr, int &__restrict__ rref) 42096 { 42097 /* ... */ 42098 } 42099 42100In the body of `fn', RPTR points to an unaliased integer and RREF 42101refers to a (different) unaliased integer. 42102 42103 You may also specify whether a member function's THIS pointer is 42104unaliased by using `__restrict__' as a member function qualifier. 42105 42106 void T::fn () __restrict__ 42107 { 42108 /* ... */ 42109 } 42110 42111Within the body of `T::fn', THIS has the effective definition `T 42112*__restrict__ const this'. Notice that the interpretation of a 42113`__restrict__' member function qualifier is different to that of 42114`const' or `volatile' qualifier, in that it is applied to the pointer 42115rather than the object. This is consistent with other compilers that 42116implement restricted pointers. 42117 42118 As with all outermost parameter qualifiers, `__restrict__' is ignored 42119in function definition matching. This means you only need to specify 42120`__restrict__' in a function definition, rather than in a function 42121prototype as well. 42122 42123 42124File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 42125 421267.3 Vague Linkage 42127================= 42128 42129There are several constructs in C++ that require space in the object 42130file but are not clearly tied to a single translation unit. We say that 42131these constructs have "vague linkage". Typically such constructs are 42132emitted wherever they are needed, though sometimes we can be more 42133clever. 42134 42135Inline Functions 42136 Inline functions are typically defined in a header file which can 42137 be included in many different compilations. Hopefully they can 42138 usually be inlined, but sometimes an out-of-line copy is 42139 necessary, if the address of the function is taken or if inlining 42140 fails. In general, we emit an out-of-line copy in all translation 42141 units where one is needed. As an exception, we only emit inline 42142 virtual functions with the vtable, since it always requires a copy. 42143 42144 Local static variables and string constants used in an inline 42145 function are also considered to have vague linkage, since they 42146 must be shared between all inlined and out-of-line instances of 42147 the function. 42148 42149VTables 42150 C++ virtual functions are implemented in most compilers using a 42151 lookup table, known as a vtable. The vtable contains pointers to 42152 the virtual functions provided by a class, and each object of the 42153 class contains a pointer to its vtable (or vtables, in some 42154 multiple-inheritance situations). If the class declares any 42155 non-inline, non-pure virtual functions, the first one is chosen as 42156 the "key method" for the class, and the vtable is only emitted in 42157 the translation unit where the key method is defined. 42158 42159 _Note:_ If the chosen key method is later defined as inline, the 42160 vtable is still emitted in every translation unit that defines it. 42161 Make sure that any inline virtuals are declared inline in the class 42162 body, even if they are not defined there. 42163 42164`type_info' objects 42165 C++ requires information about types to be written out in order to 42166 implement `dynamic_cast', `typeid' and exception handling. For 42167 polymorphic classes (classes with virtual functions), the 42168 `type_info' object is written out along with the vtable so that 42169 `dynamic_cast' can determine the dynamic type of a class object at 42170 run time. For all other types, we write out the `type_info' 42171 object when it is used: when applying `typeid' to an expression, 42172 throwing an object, or referring to a type in a catch clause or 42173 exception specification. 42174 42175Template Instantiations 42176 Most everything in this section also applies to template 42177 instantiations, but there are other options as well. *Note 42178 Where's the Template?: Template Instantiation. 42179 42180 42181 When used with GNU ld version 2.8 or later on an ELF system such as 42182GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 42183these constructs will be discarded at link time. This is known as 42184COMDAT support. 42185 42186 On targets that don't support COMDAT, but do support weak symbols, GCC 42187uses them. This way one copy overrides all the others, but the unused 42188copies still take up space in the executable. 42189 42190 For targets that do not support either COMDAT or weak symbols, most 42191entities with vague linkage are emitted as local symbols to avoid 42192duplicate definition errors from the linker. This does not happen for 42193local statics in inlines, however, as having multiple copies almost 42194certainly breaks things. 42195 42196 *Note Declarations and Definitions in One Header: C++ Interface, for 42197another way to control placement of these constructs. 42198 42199 42200File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 42201 422027.4 C++ Interface and Implementation Pragmas 42203============================================ 42204 42205`#pragma interface' and `#pragma implementation' provide the user with 42206a way of explicitly directing the compiler to emit entities with vague 42207linkage (and debugging information) in a particular translation unit. 42208 42209 _Note:_ These `#pragma's have been superceded as of GCC 2.7.2 by 42210COMDAT support and the "key method" heuristic mentioned in *note Vague 42211Linkage::. Using them can actually cause your program to grow due to 42212unnecessary out-of-line copies of inline functions. 42213 42214`#pragma interface' 42215`#pragma interface "SUBDIR/OBJECTS.h"' 42216 Use this directive in _header files_ that define object classes, 42217 to save space in most of the object files that use those classes. 42218 Normally, local copies of certain information (backup copies of 42219 inline member functions, debugging information, and the internal 42220 tables that implement virtual functions) must be kept in each 42221 object file that includes class definitions. You can use this 42222 pragma to avoid such duplication. When a header file containing 42223 `#pragma interface' is included in a compilation, this auxiliary 42224 information is not generated (unless the main input source file 42225 itself uses `#pragma implementation'). Instead, the object files 42226 contain references to be resolved at link time. 42227 42228 The second form of this directive is useful for the case where you 42229 have multiple headers with the same name in different directories. 42230 If you use this form, you must specify the same string to `#pragma 42231 implementation'. 42232 42233`#pragma implementation' 42234`#pragma implementation "OBJECTS.h"' 42235 Use this pragma in a _main input file_, when you want full output 42236 from included header files to be generated (and made globally 42237 visible). The included header file, in turn, should use `#pragma 42238 interface'. Backup copies of inline member functions, debugging 42239 information, and the internal tables used to implement virtual 42240 functions are all generated in implementation files. 42241 42242 If you use `#pragma implementation' with no argument, it applies to 42243 an include file with the same basename(1) as your source file. 42244 For example, in `allclass.cc', giving just `#pragma implementation' 42245 by itself is equivalent to `#pragma implementation "allclass.h"'. 42246 42247 Use the string argument if you want a single implementation file to 42248 include code from multiple header files. (You must also use 42249 `#include' to include the header file; `#pragma implementation' 42250 only specifies how to use the file--it doesn't actually include 42251 it.) 42252 42253 There is no way to split up the contents of a single header file 42254 into multiple implementation files. 42255 42256 `#pragma implementation' and `#pragma interface' also have an effect 42257on function inlining. 42258 42259 If you define a class in a header file marked with `#pragma 42260interface', the effect on an inline function defined in that class is 42261similar to an explicit `extern' declaration--the compiler emits no code 42262at all to define an independent version of the function. Its 42263definition is used only for inlining with its callers. 42264 42265 Conversely, when you include the same header file in a main source file 42266that declares it as `#pragma implementation', the compiler emits code 42267for the function itself; this defines a version of the function that 42268can be found via pointers (or by callers compiled without inlining). 42269If all calls to the function can be inlined, you can avoid emitting the 42270function by compiling with `-fno-implement-inlines'. If any calls are 42271not inlined, you will get linker errors. 42272 42273 ---------- Footnotes ---------- 42274 42275 (1) A file's "basename" is the name stripped of all leading path 42276information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 42277 42278 42279File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 42280 422817.5 Where's the Template? 42282========================= 42283 42284C++ templates are the first language feature to require more 42285intelligence from the environment than one usually finds on a UNIX 42286system. Somehow the compiler and linker have to make sure that each 42287template instance occurs exactly once in the executable if it is needed, 42288and not at all otherwise. There are two basic approaches to this 42289problem, which are referred to as the Borland model and the Cfront 42290model. 42291 42292Borland model 42293 Borland C++ solved the template instantiation problem by adding 42294 the code equivalent of common blocks to their linker; the compiler 42295 emits template instances in each translation unit that uses them, 42296 and the linker collapses them together. The advantage of this 42297 model is that the linker only has to consider the object files 42298 themselves; there is no external complexity to worry about. This 42299 disadvantage is that compilation time is increased because the 42300 template code is being compiled repeatedly. Code written for this 42301 model tends to include definitions of all templates in the header 42302 file, since they must be seen to be instantiated. 42303 42304Cfront model 42305 The AT&T C++ translator, Cfront, solved the template instantiation 42306 problem by creating the notion of a template repository, an 42307 automatically maintained place where template instances are 42308 stored. A more modern version of the repository works as follows: 42309 As individual object files are built, the compiler places any 42310 template definitions and instantiations encountered in the 42311 repository. At link time, the link wrapper adds in the objects in 42312 the repository and compiles any needed instances that were not 42313 previously emitted. The advantages of this model are more optimal 42314 compilation speed and the ability to use the system linker; to 42315 implement the Borland model a compiler vendor also needs to 42316 replace the linker. The disadvantages are vastly increased 42317 complexity, and thus potential for error; for some code this can be 42318 just as transparent, but in practice it can been very difficult to 42319 build multiple programs in one directory and one program in 42320 multiple directories. Code written for this model tends to 42321 separate definitions of non-inline member templates into a 42322 separate file, which should be compiled separately. 42323 42324 When used with GNU ld version 2.8 or later on an ELF system such as 42325GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 42326Borland model. On other systems, G++ implements neither automatic 42327model. 42328 42329 You have the following options for dealing with template 42330instantiations: 42331 42332 1. Compile your template-using code with `-frepo'. The compiler 42333 generates files with the extension `.rpo' listing all of the 42334 template instantiations used in the corresponding object files that 42335 could be instantiated there; the link wrapper, `collect2', then 42336 updates the `.rpo' files to tell the compiler where to place those 42337 instantiations and rebuild any affected object files. The 42338 link-time overhead is negligible after the first pass, as the 42339 compiler continues to place the instantiations in the same files. 42340 42341 This is your best option for application code written for the 42342 Borland model, as it just works. Code written for the Cfront model 42343 needs to be modified so that the template definitions are 42344 available at one or more points of instantiation; usually this is 42345 as simple as adding `#include <tmethods.cc>' to the end of each 42346 template header. 42347 42348 For library code, if you want the library to provide all of the 42349 template instantiations it needs, just try to link all of its 42350 object files together; the link will fail, but cause the 42351 instantiations to be generated as a side effect. Be warned, 42352 however, that this may cause conflicts if multiple libraries try 42353 to provide the same instantiations. For greater control, use 42354 explicit instantiation as described in the next option. 42355 42356 2. Compile your code with `-fno-implicit-templates' to disable the 42357 implicit generation of template instances, and explicitly 42358 instantiate all the ones you use. This approach requires more 42359 knowledge of exactly which instances you need than do the others, 42360 but it's less mysterious and allows greater control. You can 42361 scatter the explicit instantiations throughout your program, 42362 perhaps putting them in the translation units where the instances 42363 are used or the translation units that define the templates 42364 themselves; you can put all of the explicit instantiations you 42365 need into one big file; or you can create small files like 42366 42367 #include "Foo.h" 42368 #include "Foo.cc" 42369 42370 template class Foo<int>; 42371 template ostream& operator << 42372 (ostream&, const Foo<int>&); 42373 42374 for each of the instances you need, and create a template 42375 instantiation library from those. 42376 42377 If you are using Cfront-model code, you can probably get away with 42378 not using `-fno-implicit-templates' when compiling files that don't 42379 `#include' the member template definitions. 42380 42381 If you use one big file to do the instantiations, you may want to 42382 compile it without `-fno-implicit-templates' so you get all of the 42383 instances required by your explicit instantiations (but not by any 42384 other files) without having to specify them as well. 42385 42386 The ISO C++ 2011 standard allows forward declaration of explicit 42387 instantiations (with `extern'). G++ supports explicit instantiation 42388 declarations in C++98 mode and has extended the template 42389 instantiation syntax to support instantiation of the compiler 42390 support data for a template class (i.e. the vtable) without 42391 instantiating any of its members (with `inline'), and 42392 instantiation of only the static data members of a template class, 42393 without the support data or member functions (with `static'): 42394 42395 extern template int max (int, int); 42396 inline template class Foo<int>; 42397 static template class Foo<int>; 42398 42399 3. Do nothing. Pretend G++ does implement automatic instantiation 42400 management. Code written for the Borland model works fine, but 42401 each translation unit contains instances of each of the templates 42402 it uses. In a large program, this can lead to an unacceptable 42403 amount of code duplication. 42404 42405 42406File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 42407 424087.6 Extracting the Function Pointer from a Bound Pointer to Member Function 42409=========================================================================== 42410 42411In C++, pointer to member functions (PMFs) are implemented using a wide 42412pointer of sorts to handle all the possible call mechanisms; the PMF 42413needs to store information about how to adjust the `this' pointer, and 42414if the function pointed to is virtual, where to find the vtable, and 42415where in the vtable to look for the member function. If you are using 42416PMFs in an inner loop, you should really reconsider that decision. If 42417that is not an option, you can extract the pointer to the function that 42418would be called for a given object/PMF pair and call it directly inside 42419the inner loop, to save a bit of time. 42420 42421 Note that you still pay the penalty for the call through a function 42422pointer; on most modern architectures, such a call defeats the branch 42423prediction features of the CPU. This is also true of normal virtual 42424function calls. 42425 42426 The syntax for this extension is 42427 42428 extern A a; 42429 extern int (A::*fp)(); 42430 typedef int (*fptr)(A *); 42431 42432 fptr p = (fptr)(a.*fp); 42433 42434 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 42435object is needed to obtain the address of the function. They can be 42436converted to function pointers directly: 42437 42438 fptr p1 = (fptr)(&A::foo); 42439 42440 You must specify `-Wno-pmf-conversions' to use this extension. 42441 42442 42443File: gcc.info, Node: C++ Attributes, Next: Function Multiversioning, Prev: Bound member functions, Up: C++ Extensions 42444 424457.7 C++-Specific Variable, Function, and Type Attributes 42446======================================================== 42447 42448Some attributes only make sense for C++ programs. 42449 42450`abi_tag ("TAG", ...)' 42451 The `abi_tag' attribute can be applied to a function, variable, or 42452 class declaration. It modifies the mangled name of the entity to 42453 incorporate the tag name, in order to distinguish the function or 42454 class from an earlier version with a different ABI; perhaps the 42455 class has changed size, or the function has a different return 42456 type that is not encoded in the mangled name. 42457 42458 The attribute can also be applied to an inline namespace, but does 42459 not affect the mangled name of the namespace; in this case it is 42460 only used for `-Wabi-tag' warnings and automatic tagging of 42461 functions and variables. Tagging inline namespaces is generally 42462 preferable to tagging individual declarations, but the latter is 42463 sometimes necessary, such as when only certain members of a class 42464 need to be tagged. 42465 42466 The argument can be a list of strings of arbitrary length. The 42467 strings are sorted on output, so the order of the list is 42468 unimportant. 42469 42470 A redeclaration of an entity must not add new ABI tags, since 42471 doing so would change the mangled name. 42472 42473 The ABI tags apply to a name, so all instantiations and 42474 specializations of a template have the same tags. The attribute 42475 will be ignored if applied to an explicit specialization or 42476 instantiation. 42477 42478 The `-Wabi-tag' flag enables a warning about a class which does 42479 not have all the ABI tags used by its subobjects and virtual 42480 functions; for users with code that needs to coexist with an 42481 earlier ABI, using this option can help to find all affected types 42482 that need to be tagged. 42483 42484 When a type involving an ABI tag is used as the type of a variable 42485 or return type of a function where that tag is not already present 42486 in the signature of the function, the tag is automatically applied 42487 to the variable or function. `-Wabi-tag' also warns about this 42488 situation; this warning can be avoided by explicitly tagging the 42489 variable or function or moving it into a tagged inline namespace. 42490 42491`init_priority (PRIORITY)' 42492 In Standard C++, objects defined at namespace scope are guaranteed 42493 to be initialized in an order in strict accordance with that of 42494 their definitions _in a given translation unit_. No guarantee is 42495 made for initializations across translation units. However, GNU 42496 C++ allows users to control the order of initialization of objects 42497 defined at namespace scope with the `init_priority' attribute by 42498 specifying a relative PRIORITY, a constant integral expression 42499 currently bounded between 101 and 65535 inclusive. Lower numbers 42500 indicate a higher priority. 42501 42502 In the following example, `A' would normally be created before 42503 `B', but the `init_priority' attribute reverses that order: 42504 42505 Some_Class A __attribute__ ((init_priority (2000))); 42506 Some_Class B __attribute__ ((init_priority (543))); 42507 42508 Note that the particular values of PRIORITY do not matter; only 42509 their relative ordering. 42510 42511`java_interface' 42512 This type attribute informs C++ that the class is a Java 42513 interface. It may only be applied to classes declared within an 42514 `extern "Java"' block. Calls to methods declared in this 42515 interface are dispatched using GCJ's interface table mechanism, 42516 instead of regular virtual table dispatch. 42517 42518`warn_unused' 42519 For C++ types with non-trivial constructors and/or destructors it 42520 is impossible for the compiler to determine whether a variable of 42521 this type is truly unused if it is not referenced. This type 42522 attribute informs the compiler that variables of this type should 42523 be warned about if they appear to be unused, just like variables 42524 of fundamental types. 42525 42526 This attribute is appropriate for types which just represent a 42527 value, such as `std::string'; it is not appropriate for types which 42528 control a resource, such as `std::mutex'. 42529 42530 This attribute is also accepted in C, but it is unnecessary 42531 because C does not have constructors or destructors. 42532 42533 42534 See also *note Namespace Association::. 42535 42536 42537File: gcc.info, Node: Function Multiversioning, Next: Namespace Association, Prev: C++ Attributes, Up: C++ Extensions 42538 425397.8 Function Multiversioning 42540============================ 42541 42542With the GNU C++ front end, for x86 targets, you may specify multiple 42543versions of a function, where each function is specialized for a 42544specific target feature. At runtime, the appropriate version of the 42545function is automatically executed depending on the characteristics of 42546the execution platform. Here is an example. 42547 42548 __attribute__ ((target ("default"))) 42549 int foo () 42550 { 42551 // The default version of foo. 42552 return 0; 42553 } 42554 42555 __attribute__ ((target ("sse4.2"))) 42556 int foo () 42557 { 42558 // foo version for SSE4.2 42559 return 1; 42560 } 42561 42562 __attribute__ ((target ("arch=atom"))) 42563 int foo () 42564 { 42565 // foo version for the Intel ATOM processor 42566 return 2; 42567 } 42568 42569 __attribute__ ((target ("arch=amdfam10"))) 42570 int foo () 42571 { 42572 // foo version for the AMD Family 0x10 processors. 42573 return 3; 42574 } 42575 42576 int main () 42577 { 42578 int (*p)() = &foo; 42579 assert ((*p) () == foo ()); 42580 return 0; 42581 } 42582 42583 In the above example, four versions of function foo are created. The 42584first version of foo with the target attribute "default" is the default 42585version. This version gets executed when no other target specific 42586version qualifies for execution on a particular platform. A new version 42587of foo is created by using the same function signature but with a 42588different target string. Function foo is called or a pointer to it is 42589taken just like a regular function. GCC takes care of doing the 42590dispatching to call the right version at runtime. Refer to the GCC 42591wiki on Function Multiversioning 42592(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details. 42593 42594 42595File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: Function Multiversioning, Up: C++ Extensions 42596 425977.9 Namespace Association 42598========================= 42599 42600*Caution:* The semantics of this extension are equivalent to C++ 2011 42601inline namespaces. Users should use inline namespaces instead as this 42602extension will be removed in future versions of G++. 42603 42604 A using-directive with `__attribute ((strong))' is stronger than a 42605normal using-directive in two ways: 42606 42607 * Templates from the used namespace can be specialized and explicitly 42608 instantiated as though they were members of the using namespace. 42609 42610 * The using namespace is considered an associated namespace of all 42611 templates in the used namespace for purposes of argument-dependent 42612 name lookup. 42613 42614 The used namespace must be nested within the using namespace so that 42615normal unqualified lookup works properly. 42616 42617 This is useful for composing a namespace transparently from 42618implementation namespaces. For example: 42619 42620 namespace std { 42621 namespace debug { 42622 template <class T> struct A { }; 42623 } 42624 using namespace debug __attribute ((__strong__)); 42625 template <> struct A<int> { }; // OK to specialize 42626 42627 template <class T> void f (A<T>); 42628 } 42629 42630 int main() 42631 { 42632 f (std::A<float>()); // lookup finds std::f 42633 f (std::A<int>()); 42634 } 42635 42636 42637File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions 42638 426397.10 Type Traits 42640================ 42641 42642The C++ front end implements syntactic extensions that allow 42643compile-time determination of various characteristics of a type (or of a 42644pair of types). 42645 42646`__has_nothrow_assign (type)' 42647 If `type' is const qualified or is a reference type then the trait 42648 is false. Otherwise if `__has_trivial_assign (type)' is true then 42649 the trait is true, else if `type' is a cv class or union type with 42650 copy assignment operators that are known not to throw an exception 42651 then the trait is true, else it is false. Requires: `type' shall 42652 be a complete type, (possibly cv-qualified) `void', or an array of 42653 unknown bound. 42654 42655`__has_nothrow_copy (type)' 42656 If `__has_trivial_copy (type)' is true then the trait is true, 42657 else if `type' is a cv class or union type with copy constructors 42658 that are known not to throw an exception then the trait is true, 42659 else it is false. Requires: `type' shall be a complete type, 42660 (possibly cv-qualified) `void', or an array of unknown bound. 42661 42662`__has_nothrow_constructor (type)' 42663 If `__has_trivial_constructor (type)' is true then the trait is 42664 true, else if `type' is a cv class or union type (or array 42665 thereof) with a default constructor that is known not to throw an 42666 exception then the trait is true, else it is false. Requires: 42667 `type' shall be a complete type, (possibly cv-qualified) `void', 42668 or an array of unknown bound. 42669 42670`__has_trivial_assign (type)' 42671 If `type' is const qualified or is a reference type then the trait 42672 is false. Otherwise if `__is_pod (type)' is true then the trait is 42673 true, else if `type' is a cv class or union type with a trivial 42674 copy assignment ([class.copy]) then the trait is true, else it is 42675 false. Requires: `type' shall be a complete type, (possibly 42676 cv-qualified) `void', or an array of unknown bound. 42677 42678`__has_trivial_copy (type)' 42679 If `__is_pod (type)' is true or `type' is a reference type then 42680 the trait is true, else if `type' is a cv class or union type with 42681 a trivial copy constructor ([class.copy]) then the trait is true, 42682 else it is false. Requires: `type' shall be a complete type, 42683 (possibly cv-qualified) `void', or an array of unknown bound. 42684 42685`__has_trivial_constructor (type)' 42686 If `__is_pod (type)' is true then the trait is true, else if 42687 `type' is a cv class or union type (or array thereof) with a 42688 trivial default constructor ([class.ctor]) then the trait is true, 42689 else it is false. Requires: `type' shall be a complete type, 42690 (possibly cv-qualified) `void', or an array of unknown bound. 42691 42692`__has_trivial_destructor (type)' 42693 If `__is_pod (type)' is true or `type' is a reference type then 42694 the trait is true, else if `type' is a cv class or union type (or 42695 array thereof) with a trivial destructor ([class.dtor]) then the 42696 trait is true, else it is false. Requires: `type' shall be a 42697 complete type, (possibly cv-qualified) `void', or an array of 42698 unknown bound. 42699 42700`__has_virtual_destructor (type)' 42701 If `type' is a class type with a virtual destructor ([class.dtor]) 42702 then the trait is true, else it is false. Requires: `type' shall 42703 be a complete type, (possibly cv-qualified) `void', or an array of 42704 unknown bound. 42705 42706`__is_abstract (type)' 42707 If `type' is an abstract class ([class.abstract]) then the trait 42708 is true, else it is false. Requires: `type' shall be a complete 42709 type, (possibly cv-qualified) `void', or an array of unknown bound. 42710 42711`__is_base_of (base_type, derived_type)' 42712 If `base_type' is a base class of `derived_type' ([class.derived]) 42713 then the trait is true, otherwise it is false. Top-level cv 42714 qualifications of `base_type' and `derived_type' are ignored. For 42715 the purposes of this trait, a class type is considered is own 42716 base. Requires: if `__is_class (base_type)' and `__is_class 42717 (derived_type)' are true and `base_type' and `derived_type' are 42718 not the same type (disregarding cv-qualifiers), `derived_type' 42719 shall be a complete type. Diagnostic is produced if this 42720 requirement is not met. 42721 42722`__is_class (type)' 42723 If `type' is a cv class type, and not a union type 42724 ([basic.compound]) the trait is true, else it is false. 42725 42726`__is_empty (type)' 42727 If `__is_class (type)' is false then the trait is false. 42728 Otherwise `type' is considered empty if and only if: `type' has no 42729 non-static data members, or all non-static data members, if any, 42730 are bit-fields of length 0, and `type' has no virtual members, and 42731 `type' has no virtual base classes, and `type' has no base classes 42732 `base_type' for which `__is_empty (base_type)' is false. 42733 Requires: `type' shall be a complete type, (possibly cv-qualified) 42734 `void', or an array of unknown bound. 42735 42736`__is_enum (type)' 42737 If `type' is a cv enumeration type ([basic.compound]) the trait is 42738 true, else it is false. 42739 42740`__is_literal_type (type)' 42741 If `type' is a literal type ([basic.types]) the trait is true, 42742 else it is false. Requires: `type' shall be a complete type, 42743 (possibly cv-qualified) `void', or an array of unknown bound. 42744 42745`__is_pod (type)' 42746 If `type' is a cv POD type ([basic.types]) then the trait is true, 42747 else it is false. Requires: `type' shall be a complete type, 42748 (possibly cv-qualified) `void', or an array of unknown bound. 42749 42750`__is_polymorphic (type)' 42751 If `type' is a polymorphic class ([class.virtual]) then the trait 42752 is true, else it is false. Requires: `type' shall be a complete 42753 type, (possibly cv-qualified) `void', or an array of unknown bound. 42754 42755`__is_standard_layout (type)' 42756 If `type' is a standard-layout type ([basic.types]) the trait is 42757 true, else it is false. Requires: `type' shall be a complete 42758 type, (possibly cv-qualified) `void', or an array of unknown bound. 42759 42760`__is_trivial (type)' 42761 If `type' is a trivial type ([basic.types]) the trait is true, 42762 else it is false. Requires: `type' shall be a complete type, 42763 (possibly cv-qualified) `void', or an array of unknown bound. 42764 42765`__is_union (type)' 42766 If `type' is a cv union type ([basic.compound]) the trait is true, 42767 else it is false. 42768 42769`__underlying_type (type)' 42770 The underlying type of `type'. Requires: `type' shall be an 42771 enumeration type ([dcl.enum]). 42772 42773 42774 42775File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions 42776 427777.11 Java Exceptions 42778==================== 42779 42780The Java language uses a slightly different exception handling model 42781from C++. Normally, GNU C++ automatically detects when you are writing 42782C++ code that uses Java exceptions, and handle them appropriately. 42783However, if C++ code only needs to execute destructors when Java 42784exceptions are thrown through it, GCC guesses incorrectly. Sample 42785problematic code is: 42786 42787 struct S { ~S(); }; 42788 extern void bar(); // is written in Java, and may throw exceptions 42789 void foo() 42790 { 42791 S s; 42792 bar(); 42793 } 42794 42795The usual effect of an incorrect guess is a link failure, complaining of 42796a missing routine called `__gxx_personality_v0'. 42797 42798 You can inform the compiler that Java exceptions are to be used in a 42799translation unit, irrespective of what it might think, by writing 42800`#pragma GCC java_exceptions' at the head of the file. This `#pragma' 42801must appear before any functions that throw or catch exceptions, or run 42802destructors when exceptions are thrown through them. 42803 42804 You cannot mix Java and C++ exceptions in the same translation unit. 42805It is believed to be safe to throw a C++ exception from one file through 42806another file compiled for the Java exception model, or vice versa, but 42807there may be bugs in this area. 42808 42809 42810File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 42811 428127.12 Deprecated Features 42813======================== 42814 42815In the past, the GNU C++ compiler was extended to experiment with new 42816features, at a time when the C++ language was still evolving. Now that 42817the C++ standard is complete, some of those features are superseded by 42818superior alternatives. Using the old features might cause a warning in 42819some cases that the feature will be dropped in the future. In other 42820cases, the feature might be gone already. 42821 42822 While the list below is not exhaustive, it documents some of the 42823options that are now deprecated: 42824 42825`-fexternal-templates' 42826`-falt-external-templates' 42827 These are two of the many ways for G++ to implement template 42828 instantiation. *Note Template Instantiation::. The C++ standard 42829 clearly defines how template definitions have to be organized 42830 across implementation units. G++ has an implicit instantiation 42831 mechanism that should work just fine for standard-conforming code. 42832 42833`-fstrict-prototype' 42834`-fno-strict-prototype' 42835 Previously it was possible to use an empty prototype parameter 42836 list to indicate an unspecified number of parameters (like C), 42837 rather than no parameters, as C++ demands. This feature has been 42838 removed, except where it is required for backwards compatibility. 42839 *Note Backwards Compatibility::. 42840 42841 G++ allows a virtual function returning `void *' to be overridden by 42842one returning a different pointer type. This extension to the 42843covariant return type rules is now deprecated and will be removed from a 42844future version. 42845 42846 The G++ minimum and maximum operators (`<?' and `>?') and their 42847compound forms (`<?=') and `>?=') have been deprecated and are now 42848removed from G++. Code using these operators should be modified to use 42849`std::min' and `std::max' instead. 42850 42851 The named return value extension has been deprecated, and is now 42852removed from G++. 42853 42854 The use of initializer lists with new expressions has been deprecated, 42855and is now removed from G++. 42856 42857 Floating and complex non-type template parameters have been deprecated, 42858and are now removed from G++. 42859 42860 The implicit typename extension has been deprecated and is now removed 42861from G++. 42862 42863 The use of default arguments in function pointers, function typedefs 42864and other places where they are not permitted by the standard is 42865deprecated and will be removed from a future version of G++. 42866 42867 G++ allows floating-point literals to appear in integral constant 42868expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is 42869deprecated and will be removed from a future version. 42870 42871 G++ allows static data members of const floating-point type to be 42872declared with an initializer in a class definition. The standard only 42873allows initializers for static members of const integral types and const 42874enumeration types so this extension has been deprecated and will be 42875removed from a future version. 42876 42877 42878File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 42879 428807.13 Backwards Compatibility 42881============================ 42882 42883Now that there is a definitive ISO standard C++, G++ has a specification 42884to adhere to. The C++ language evolved over time, and features that 42885used to be acceptable in previous drafts of the standard, such as the 42886ARM [Annotated C++ Reference Manual], are no longer accepted. In order 42887to allow compilation of C++ written to such drafts, G++ contains some 42888backwards compatibilities. _All such backwards compatibility features 42889are liable to disappear in future versions of G++._ They should be 42890considered deprecated. *Note Deprecated Features::. 42891 42892`For scope' 42893 If a variable is declared at for scope, it used to remain in scope 42894 until the end of the scope that contained the for statement 42895 (rather than just within the for scope). G++ retains this, but 42896 issues a warning, if such a variable is accessed outside the for 42897 scope. 42898 42899`Implicit C language' 42900 Old C system header files did not contain an `extern "C" {...}' 42901 scope to set the language. On such systems, all header files are 42902 implicitly scoped inside a C language scope. Also, an empty 42903 prototype `()' is treated as an unspecified number of arguments, 42904 rather than no arguments, as C++ demands. 42905 42906 42907File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 42908 429098 GNU Objective-C Features 42910************************** 42911 42912This document is meant to describe some of the GNU Objective-C 42913features. It is not intended to teach you Objective-C. There are 42914several resources on the Internet that present the language. 42915 42916* Menu: 42917 42918* GNU Objective-C runtime API:: 42919* Executing code before main:: 42920* Type encoding:: 42921* Garbage Collection:: 42922* Constant string objects:: 42923* compatibility_alias:: 42924* Exceptions:: 42925* Synchronization:: 42926* Fast enumeration:: 42927* Messaging with the GNU Objective-C runtime:: 42928 42929 42930File: gcc.info, Node: GNU Objective-C runtime API, Next: Executing code before main, Up: Objective-C 42931 429328.1 GNU Objective-C Runtime API 42933=============================== 42934 42935This section is specific for the GNU Objective-C runtime. If you are 42936using a different runtime, you can skip it. 42937 42938 The GNU Objective-C runtime provides an API that allows you to 42939interact with the Objective-C runtime system, querying the live runtime 42940structures and even manipulating them. This allows you for example to 42941inspect and navigate classes, methods and protocols; to define new 42942classes or new methods, and even to modify existing classes or 42943protocols. 42944 42945 If you are using a "Foundation" library such as GNUstep-Base, this 42946library will provide you with a rich set of functionality to do most of 42947the inspection tasks, and you probably will only need direct access to 42948the GNU Objective-C runtime API to define new classes or methods. 42949 42950* Menu: 42951 42952* Modern GNU Objective-C runtime API:: 42953* Traditional GNU Objective-C runtime API:: 42954 42955 42956File: gcc.info, Node: Modern GNU Objective-C runtime API, Next: Traditional GNU Objective-C runtime API, Up: GNU Objective-C runtime API 42957 429588.1.1 Modern GNU Objective-C Runtime API 42959---------------------------------------- 42960 42961The GNU Objective-C runtime provides an API which is similar to the one 42962provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime. The 42963API is documented in the public header files of the GNU Objective-C 42964runtime: 42965 42966 * `objc/objc.h': this is the basic Objective-C header file, defining 42967 the basic Objective-C types such as `id', `Class' and `BOOL'. You 42968 have to include this header to do almost anything with Objective-C. 42969 42970 * `objc/runtime.h': this header declares most of the public runtime 42971 API functions allowing you to inspect and manipulate the 42972 Objective-C runtime data structures. These functions are fairly 42973 standardized across Objective-C runtimes and are almost identical 42974 to the Apple/NeXT Objective-C runtime ones. It does not declare 42975 functions in some specialized areas (constructing and forwarding 42976 message invocations, threading) which are in the other headers 42977 below. You have to include `objc/objc.h' and `objc/runtime.h' to 42978 use any of the functions, such as `class_getName()', declared in 42979 `objc/runtime.h'. 42980 42981 * `objc/message.h': this header declares public functions used to 42982 construct, deconstruct and forward message invocations. Because 42983 messaging is done in quite a different way on different runtimes, 42984 functions in this header are specific to the GNU Objective-C 42985 runtime implementation. 42986 42987 * `objc/objc-exception.h': this header declares some public 42988 functions related to Objective-C exceptions. For example 42989 functions in this header allow you to throw an Objective-C 42990 exception from plain C/C++ code. 42991 42992 * `objc/objc-sync.h': this header declares some public functions 42993 related to the Objective-C `@synchronized()' syntax, allowing you 42994 to emulate an Objective-C `@synchronized()' block in plain C/C++ 42995 code. 42996 42997 * `objc/thr.h': this header declares a public runtime API threading 42998 layer that is only provided by the GNU Objective-C runtime. It 42999 declares functions such as `objc_mutex_lock()', which provide a 43000 platform-independent set of threading functions. 43001 43002 43003 The header files contain detailed documentation for each function in 43004the GNU Objective-C runtime API. 43005 43006 43007File: gcc.info, Node: Traditional GNU Objective-C runtime API, Prev: Modern GNU Objective-C runtime API, Up: GNU Objective-C runtime API 43008 430098.1.2 Traditional GNU Objective-C Runtime API 43010--------------------------------------------- 43011 43012The GNU Objective-C runtime used to provide a different API, which we 43013call the "traditional" GNU Objective-C runtime API. Functions 43014belonging to this API are easy to recognize because they use a 43015different naming convention, such as `class_get_super_class()' 43016(traditional API) instead of `class_getSuperclass()' (modern API). 43017Software using this API includes the file `objc/objc-api.h' where it is 43018declared. 43019 43020 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer 43021available. 43022 43023 43024File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: GNU Objective-C runtime API, Up: Objective-C 43025 430268.2 `+load': Executing Code before `main' 43027========================================= 43028 43029This section is specific for the GNU Objective-C runtime. If you are 43030using a different runtime, you can skip it. 43031 43032 The GNU Objective-C runtime provides a way that allows you to execute 43033code before the execution of the program enters the `main' function. 43034The code is executed on a per-class and a per-category basis, through a 43035special class method `+load'. 43036 43037 This facility is very useful if you want to initialize global variables 43038which can be accessed by the program directly, without sending a message 43039to the class first. The usual way to initialize global variables, in 43040the `+initialize' method, might not be useful because `+initialize' is 43041only called when the first message is sent to a class object, which in 43042some cases could be too late. 43043 43044 Suppose for example you have a `FileStream' class that declares 43045`Stdin', `Stdout' and `Stderr' as global variables, like below: 43046 43047 43048 FileStream *Stdin = nil; 43049 FileStream *Stdout = nil; 43050 FileStream *Stderr = nil; 43051 43052 @implementation FileStream 43053 43054 + (void)initialize 43055 { 43056 Stdin = [[FileStream new] initWithFd:0]; 43057 Stdout = [[FileStream new] initWithFd:1]; 43058 Stderr = [[FileStream new] initWithFd:2]; 43059 } 43060 43061 /* Other methods here */ 43062 @end 43063 43064 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 43065in `+initialize' occurs too late. The programmer can send a message to 43066one of these objects before the variables are actually initialized, 43067thus sending messages to the `nil' object. The `+initialize' method 43068which actually initializes the global variables is not invoked until 43069the first message is sent to the class object. The solution would 43070require these variables to be initialized just before entering `main'. 43071 43072 The correct solution of the above problem is to use the `+load' method 43073instead of `+initialize': 43074 43075 43076 @implementation FileStream 43077 43078 + (void)load 43079 { 43080 Stdin = [[FileStream new] initWithFd:0]; 43081 Stdout = [[FileStream new] initWithFd:1]; 43082 Stderr = [[FileStream new] initWithFd:2]; 43083 } 43084 43085 /* Other methods here */ 43086 @end 43087 43088 The `+load' is a method that is not overridden by categories. If a 43089class and a category of it both implement `+load', both methods are 43090invoked. This allows some additional initializations to be performed in 43091a category. 43092 43093 This mechanism is not intended to be a replacement for `+initialize'. 43094You should be aware of its limitations when you decide to use it 43095instead of `+initialize'. 43096 43097* Menu: 43098 43099* What you can and what you cannot do in +load:: 43100 43101 43102File: gcc.info, Node: What you can and what you cannot do in +load, Up: Executing code before main 43103 431048.2.1 What You Can and Cannot Do in `+load' 43105------------------------------------------- 43106 43107`+load' is to be used only as a last resort. Because it is executed 43108very early, most of the Objective-C runtime machinery will not be ready 43109when `+load' is executed; hence `+load' works best for executing C code 43110that is independent on the Objective-C runtime. 43111 43112 The `+load' implementation in the GNU runtime guarantees you the 43113following things: 43114 43115 * you can write whatever C code you like; 43116 43117 * you can allocate and send messages to objects whose class is 43118 implemented in the same file; 43119 43120 * the `+load' implementation of all super classes of a class are 43121 executed before the `+load' of that class is executed; 43122 43123 * the `+load' implementation of a class is executed before the 43124 `+load' implementation of any category. 43125 43126 43127 In particular, the following things, even if they can work in a 43128particular case, are not guaranteed: 43129 43130 * allocation of or sending messages to arbitrary objects; 43131 43132 * allocation of or sending messages to objects whose classes have a 43133 category implemented in the same file; 43134 43135 * sending messages to Objective-C constant strings (`@"this is a 43136 constant string"'); 43137 43138 43139 You should make no assumptions about receiving `+load' in sibling 43140classes when you write `+load' of a class. The order in which sibling 43141classes receive `+load' is not guaranteed. 43142 43143 The order in which `+load' and `+initialize' are called could be 43144problematic if this matters. If you don't allocate objects inside 43145`+load', it is guaranteed that `+load' is called before `+initialize'. 43146If you create an object inside `+load' the `+initialize' method of 43147object's class is invoked even if `+load' was not invoked. Note if you 43148explicitly call `+load' on a class, `+initialize' will be called first. 43149To avoid possible problems try to implement only one of these methods. 43150 43151 The `+load' method is also invoked when a bundle is dynamically loaded 43152into your running program. This happens automatically without any 43153intervening operation from you. When you write bundles and you need to 43154write `+load' you can safely create and send messages to objects whose 43155classes already exist in the running program. The same restrictions as 43156above apply to classes defined in bundle. 43157 43158 43159File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 43160 431618.3 Type Encoding 43162================= 43163 43164This is an advanced section. Type encodings are used extensively by 43165the compiler and by the runtime, but you generally do not need to know 43166about them to use Objective-C. 43167 43168 The Objective-C compiler generates type encodings for all the types. 43169These type encodings are used at runtime to find out information about 43170selectors and methods and about objects and classes. 43171 43172 The types are encoded in the following way: 43173 43174`_Bool' `B' 43175`char' `c' 43176`unsigned char' `C' 43177`short' `s' 43178`unsigned short' `S' 43179`int' `i' 43180`unsigned int' `I' 43181`long' `l' 43182`unsigned long' `L' 43183`long long' `q' 43184`unsigned long `Q' 43185long' 43186`float' `f' 43187`double' `d' 43188`long double' `D' 43189`void' `v' 43190`id' `@' 43191`Class' `#' 43192`SEL' `:' 43193`char*' `*' 43194`enum' an `enum' is encoded exactly as the integer type that 43195 the compiler uses for it, which depends on the 43196 enumeration values. Often the compiler users 43197 `unsigned int', which is then encoded as `I'. 43198unknown type `?' 43199Complex types `j' followed by the inner type. For example 43200 `_Complex double' is encoded as "jd". 43201bit-fields `b' followed by the starting position of the 43202 bit-field, the type of the bit-field and the size of 43203 the bit-field (the bit-fields encoding was changed 43204 from the NeXT's compiler encoding, see below) 43205 43206 The encoding of bit-fields has changed to allow bit-fields to be 43207properly handled by the runtime functions that compute sizes and 43208alignments of types that contain bit-fields. The previous encoding 43209contained only the size of the bit-field. Using only this information 43210it is not possible to reliably compute the size occupied by the 43211bit-field. This is very important in the presence of the Boehm's 43212garbage collector because the objects are allocated using the typed 43213memory facility available in this collector. The typed memory 43214allocation requires information about where the pointers are located 43215inside the object. 43216 43217 The position in the bit-field is the position, counting in bits, of the 43218bit closest to the beginning of the structure. 43219 43220 The non-atomic types are encoded as follows: 43221 43222pointers `^' followed by the pointed type. 43223arrays `[' followed by the number of elements in the array 43224 followed by the type of the elements followed by `]' 43225structures `{' followed by the name of the structure (or `?' if the 43226 structure is unnamed), the `=' sign, the type of the 43227 members and by `}' 43228unions `(' followed by the name of the structure (or `?' if the 43229 union is unnamed), the `=' sign, the type of the members 43230 followed by `)' 43231vectors `![' followed by the vector_size (the number of bytes 43232 composing the vector) followed by a comma, followed by 43233 the alignment (in bytes) of the vector, followed by the 43234 type of the elements followed by `]' 43235 43236 Here are some types and their encodings, as they are generated by the 43237compiler on an i386 machine: 43238 43239 43240Objective-C type Compiler encoding 43241 int a[10]; `[10i]' 43242 struct { `{?=i[3f]b128i3b131i2c}' 43243 int i; 43244 float f[3]; 43245 int a:3; 43246 int b:2; 43247 char c; 43248 } 43249 int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine) 43250 43251 43252 In addition to the types the compiler also encodes the type 43253specifiers. The table below describes the encoding of the current 43254Objective-C type specifiers: 43255 43256 43257Specifier Encoding 43258`const' `r' 43259`in' `n' 43260`inout' `N' 43261`out' `o' 43262`bycopy' `O' 43263`byref' `R' 43264`oneway' `V' 43265 43266 43267 The type specifiers are encoded just before the type. Unlike types 43268however, the type specifiers are only encoded when they appear in method 43269argument types. 43270 43271 Note how `const' interacts with pointers: 43272 43273 43274Objective-C type Compiler encoding 43275 const int `ri' 43276 const int* `^ri' 43277 int *const `r^i' 43278 43279 43280 `const int*' is a pointer to a `const int', and so is encoded as 43281`^ri'. `int* const', instead, is a `const' pointer to an `int', and so 43282is encoded as `r^i'. 43283 43284 Finally, there is a complication when encoding `const char *' versus 43285`char * const'. Because `char *' is encoded as `*' and not as `^c', 43286there is no way to express the fact that `r' applies to the pointer or 43287to the pointee. 43288 43289 Hence, it is assumed as a convention that `r*' means `const char *' 43290(since it is what is most often meant), and there is no way to encode 43291`char *const'. `char *const' would simply be encoded as `*', and the 43292`const' is lost. 43293 43294* Menu: 43295 43296* Legacy type encoding:: 43297* @encode:: 43298* Method signatures:: 43299 43300 43301File: gcc.info, Node: Legacy type encoding, Next: @encode, Up: Type encoding 43302 433038.3.1 Legacy Type Encoding 43304-------------------------- 43305 43306Unfortunately, historically GCC used to have a number of bugs in its 43307encoding code. The NeXT runtime expects GCC to emit type encodings in 43308this historical format (compatible with GCC-3.3), so when using the 43309NeXT runtime, GCC will introduce on purpose a number of incorrect 43310encodings: 43311 43312 * the read-only qualifier of the pointee gets emitted before the '^'. 43313 The read-only qualifier of the pointer itself gets ignored, unless 43314 it is a typedef. Also, the 'r' is only emitted for the outermost 43315 type. 43316 43317 * 32-bit longs are encoded as 'l' or 'L', but not always. For 43318 typedefs, the compiler uses 'i' or 'I' instead if encoding a 43319 struct field or a pointer. 43320 43321 * `enum's are always encoded as 'i' (int) even if they are actually 43322 unsigned or long. 43323 43324 43325 In addition to that, the NeXT runtime uses a different encoding for 43326bitfields. It encodes them as `b' followed by the size, without a bit 43327offset or the underlying field type. 43328 43329 43330File: gcc.info, Node: @encode, Next: Method signatures, Prev: Legacy type encoding, Up: Type encoding 43331 433328.3.2 `@encode' 43333--------------- 43334 43335GNU Objective-C supports the `@encode' syntax that allows you to create 43336a type encoding from a C/Objective-C type. For example, `@encode(int)' 43337is compiled by the compiler into `"i"'. 43338 43339 `@encode' does not support type qualifiers other than `const'. For 43340example, `@encode(const char*)' is valid and is compiled into `"r*"', 43341while `@encode(bycopy char *)' is invalid and will cause a compilation 43342error. 43343 43344 43345File: gcc.info, Node: Method signatures, Prev: @encode, Up: Type encoding 43346 433478.3.3 Method Signatures 43348----------------------- 43349 43350This section documents the encoding of method types, which is rarely 43351needed to use Objective-C. You should skip it at a first reading; the 43352runtime provides functions that will work on methods and can walk 43353through the list of parameters and interpret them for you. These 43354functions are part of the public "API" and are the preferred way to 43355interact with method signatures from user code. 43356 43357 But if you need to debug a problem with method signatures and need to 43358know how they are implemented (i.e., the "ABI"), read on. 43359 43360 Methods have their "signature" encoded and made available to the 43361runtime. The "signature" encodes all the information required to 43362dynamically build invocations of the method at runtime: return type and 43363arguments. 43364 43365 The "signature" is a null-terminated string, composed of the following: 43366 43367 * The return type, including type qualifiers. For example, a method 43368 returning `int' would have `i' here. 43369 43370 * The total size (in bytes) required to pass all the parameters. 43371 This includes the two hidden parameters (the object `self' and the 43372 method selector `_cmd'). 43373 43374 * Each argument, with the type encoding, followed by the offset (in 43375 bytes) of the argument in the list of parameters. 43376 43377 43378 For example, a method with no arguments and returning `int' would have 43379the signature `i8@0:4' if the size of a pointer is 4. The signature is 43380interpreted as follows: the `i' is the return type (an `int'), the `8' 43381is the total size of the parameters in bytes (two pointers each of size 433824), the `@0' is the first parameter (an object at byte offset `0') and 43383`:4' is the second parameter (a `SEL' at byte offset `4'). 43384 43385 You can easily find more examples by running the "strings" program on 43386an Objective-C object file compiled by GCC. You'll see a lot of 43387strings that look very much like `i8@0:4'. They are signatures of 43388Objective-C methods. 43389 43390 43391File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 43392 433938.4 Garbage Collection 43394====================== 43395 43396This section is specific for the GNU Objective-C runtime. If you are 43397using a different runtime, you can skip it. 43398 43399 Support for garbage collection with the GNU runtime has been added by 43400using a powerful conservative garbage collector, known as the 43401Boehm-Demers-Weiser conservative garbage collector. 43402 43403 To enable the support for it you have to configure the compiler using 43404an additional argument, `--enable-objc-gc'. This will build the 43405boehm-gc library, and build an additional runtime library which has 43406several enhancements to support the garbage collector. The new library 43407has a new name, `libobjc_gc.a' to not conflict with the 43408non-garbage-collected library. 43409 43410 When the garbage collector is used, the objects are allocated using the 43411so-called typed memory allocation mechanism available in the 43412Boehm-Demers-Weiser collector. This mode requires precise information 43413on where pointers are located inside objects. This information is 43414computed once per class, immediately after the class has been 43415initialized. 43416 43417 There is a new runtime function `class_ivar_set_gcinvisible()' which 43418can be used to declare a so-called "weak pointer" reference. Such a 43419pointer is basically hidden for the garbage collector; this can be 43420useful in certain situations, especially when you want to keep track of 43421the allocated objects, yet allow them to be collected. This kind of 43422pointers can only be members of objects, you cannot declare a global 43423pointer as a weak reference. Every type which is a pointer type can be 43424declared a weak pointer, including `id', `Class' and `SEL'. 43425 43426 Here is an example of how to use this feature. Suppose you want to 43427implement a class whose instances hold a weak pointer reference; the 43428following class does this: 43429 43430 43431 @interface WeakPointer : Object 43432 { 43433 const void* weakPointer; 43434 } 43435 43436 - initWithPointer:(const void*)p; 43437 - (const void*)weakPointer; 43438 @end 43439 43440 43441 @implementation WeakPointer 43442 43443 + (void)initialize 43444 { 43445 if (self == objc_lookUpClass ("WeakPointer")) 43446 class_ivar_set_gcinvisible (self, "weakPointer", YES); 43447 } 43448 43449 - initWithPointer:(const void*)p 43450 { 43451 weakPointer = p; 43452 return self; 43453 } 43454 43455 - (const void*)weakPointer 43456 { 43457 return weakPointer; 43458 } 43459 43460 @end 43461 43462 Weak pointers are supported through a new type character specifier 43463represented by the `!' character. The `class_ivar_set_gcinvisible()' 43464function adds or removes this specifier to the string type description 43465of the instance variable named as argument. 43466 43467 43468File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 43469 434708.5 Constant String Objects 43471=========================== 43472 43473GNU Objective-C provides constant string objects that are generated 43474directly by the compiler. You declare a constant string object by 43475prefixing a C constant string with the character `@': 43476 43477 id myString = @"this is a constant string object"; 43478 43479 The constant string objects are by default instances of the 43480`NXConstantString' class which is provided by the GNU Objective-C 43481runtime. To get the definition of this class you must include the 43482`objc/NXConstStr.h' header file. 43483 43484 User defined libraries may want to implement their own constant string 43485class. To be able to support them, the GNU Objective-C compiler 43486provides a new command line options 43487`-fconstant-string-class=CLASS-NAME'. The provided class should adhere 43488to a strict structure, the same as `NXConstantString''s structure: 43489 43490 43491 @interface MyConstantStringClass 43492 { 43493 Class isa; 43494 char *c_string; 43495 unsigned int len; 43496 } 43497 @end 43498 43499 `NXConstantString' inherits from `Object'; user class libraries may 43500choose to inherit the customized constant string class from a different 43501class than `Object'. There is no requirement in the methods the 43502constant string class has to implement, but the final ivar layout of 43503the class must be the compatible with the given structure. 43504 43505 When the compiler creates the statically allocated constant string 43506object, the `c_string' field will be filled by the compiler with the 43507string; the `length' field will be filled by the compiler with the 43508string length; the `isa' pointer will be filled with `NULL' by the 43509compiler, and it will later be fixed up automatically at runtime by the 43510GNU Objective-C runtime library to point to the class which was set by 43511the `-fconstant-string-class' option when the object file is loaded (if 43512you wonder how it works behind the scenes, the name of the class to 43513use, and the list of static objects to fixup, are stored by the 43514compiler in the object file in a place where the GNU runtime library 43515will find them at runtime). 43516 43517 As a result, when a file is compiled with the 43518`-fconstant-string-class' option, all the constant string objects will 43519be instances of the class specified as argument to this option. It is 43520possible to have multiple compilation units referring to different 43521constant string classes, neither the compiler nor the linker impose any 43522restrictions in doing this. 43523 43524 43525File: gcc.info, Node: compatibility_alias, Next: Exceptions, Prev: Constant string objects, Up: Objective-C 43526 435278.6 `compatibility_alias' 43528========================= 43529 43530The keyword `@compatibility_alias' allows you to define a class name as 43531equivalent to another class name. For example: 43532 43533 @compatibility_alias WOApplication GSWApplication; 43534 43535 tells the compiler that each time it encounters `WOApplication' as a 43536class name, it should replace it with `GSWApplication' (that is, 43537`WOApplication' is just an alias for `GSWApplication'). 43538 43539 There are some constraints on how this can be used-- 43540 43541 * `WOApplication' (the alias) must not be an existing class; 43542 43543 * `GSWApplication' (the real class) must be an existing class. 43544 43545 43546 43547File: gcc.info, Node: Exceptions, Next: Synchronization, Prev: compatibility_alias, Up: Objective-C 43548 435498.7 Exceptions 43550============== 43551 43552GNU Objective-C provides exception support built into the language, as 43553in the following example: 43554 43555 @try { 43556 ... 43557 @throw expr; 43558 ... 43559 } 43560 @catch (AnObjCClass *exc) { 43561 ... 43562 @throw expr; 43563 ... 43564 @throw; 43565 ... 43566 } 43567 @catch (AnotherClass *exc) { 43568 ... 43569 } 43570 @catch (id allOthers) { 43571 ... 43572 } 43573 @finally { 43574 ... 43575 @throw expr; 43576 ... 43577 } 43578 43579 The `@throw' statement may appear anywhere in an Objective-C or 43580Objective-C++ program; when used inside of a `@catch' block, the 43581`@throw' may appear without an argument (as shown above), in which case 43582the object caught by the `@catch' will be rethrown. 43583 43584 Note that only (pointers to) Objective-C objects may be thrown and 43585caught using this scheme. When an object is thrown, it will be caught 43586by the nearest `@catch' clause capable of handling objects of that 43587type, analogously to how `catch' blocks work in C++ and Java. A 43588`@catch(id ...)' clause (as shown above) may also be provided to catch 43589any and all Objective-C exceptions not caught by previous `@catch' 43590clauses (if any). 43591 43592 The `@finally' clause, if present, will be executed upon exit from the 43593immediately preceding `@try ... @catch' section. This will happen 43594regardless of whether any exceptions are thrown, caught or rethrown 43595inside the `@try ... @catch' section, analogously to the behavior of 43596the `finally' clause in Java. 43597 43598 There are several caveats to using the new exception mechanism: 43599 43600 * The `-fobjc-exceptions' command line option must be used when 43601 compiling Objective-C files that use exceptions. 43602 43603 * With the GNU runtime, exceptions are always implemented as "native" 43604 exceptions and it is recommended that the `-fexceptions' and 43605 `-shared-libgcc' options are used when linking. 43606 43607 * With the NeXT runtime, although currently designed to be binary 43608 compatible with `NS_HANDLER'-style idioms provided by the 43609 `NSException' class, the new exceptions can only be used on Mac OS 43610 X 10.3 (Panther) and later systems, due to additional functionality 43611 needed in the NeXT Objective-C runtime. 43612 43613 * As mentioned above, the new exceptions do not support handling 43614 types other than Objective-C objects. Furthermore, when used from 43615 Objective-C++, the Objective-C exception model does not 43616 interoperate with C++ exceptions at this time. This means you 43617 cannot `@throw' an exception from Objective-C and `catch' it in 43618 C++, or vice versa (i.e., `throw ... @catch'). 43619 43620 43621File: gcc.info, Node: Synchronization, Next: Fast enumeration, Prev: Exceptions, Up: Objective-C 43622 436238.8 Synchronization 43624=================== 43625 43626GNU Objective-C provides support for synchronized blocks: 43627 43628 @synchronized (ObjCClass *guard) { 43629 ... 43630 } 43631 43632 Upon entering the `@synchronized' block, a thread of execution shall 43633first check whether a lock has been placed on the corresponding `guard' 43634object by another thread. If it has, the current thread shall wait 43635until the other thread relinquishes its lock. Once `guard' becomes 43636available, the current thread will place its own lock on it, execute 43637the code contained in the `@synchronized' block, and finally relinquish 43638the lock (thereby making `guard' available to other threads). 43639 43640 Unlike Java, Objective-C does not allow for entire methods to be 43641marked `@synchronized'. Note that throwing exceptions out of 43642`@synchronized' blocks is allowed, and will cause the guarding object 43643to be unlocked properly. 43644 43645 Because of the interactions between synchronization and exception 43646handling, you can only use `@synchronized' when compiling with 43647exceptions enabled, that is with the command line option 43648`-fobjc-exceptions'. 43649 43650 43651File: gcc.info, Node: Fast enumeration, Next: Messaging with the GNU Objective-C runtime, Prev: Synchronization, Up: Objective-C 43652 436538.9 Fast Enumeration 43654==================== 43655 43656* Menu: 43657 43658* Using fast enumeration:: 43659* c99-like fast enumeration syntax:: 43660* Fast enumeration details:: 43661* Fast enumeration protocol:: 43662 43663 43664File: gcc.info, Node: Using fast enumeration, Next: c99-like fast enumeration syntax, Up: Fast enumeration 43665 436668.9.1 Using Fast Enumeration 43667---------------------------- 43668 43669GNU Objective-C provides support for the fast enumeration syntax: 43670 43671 id array = ...; 43672 id object; 43673 43674 for (object in array) 43675 { 43676 /* Do something with 'object' */ 43677 } 43678 43679 `array' needs to be an Objective-C object (usually a collection 43680object, for example an array, a dictionary or a set) which implements 43681the "Fast Enumeration Protocol" (see below). If you are using a 43682Foundation library such as GNUstep Base or Apple Cocoa Foundation, all 43683collection objects in the library implement this protocol and can be 43684used in this way. 43685 43686 The code above would iterate over all objects in `array'. For each of 43687them, it assigns it to `object', then executes the `Do something with 43688'object'' statements. 43689 43690 Here is a fully worked-out example using a Foundation library (which 43691provides the implementation of `NSArray', `NSString' and `NSLog'): 43692 43693 NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil]; 43694 NSString *object; 43695 43696 for (object in array) 43697 NSLog (@"Iterating over %@", object); 43698 43699 43700File: gcc.info, Node: c99-like fast enumeration syntax, Next: Fast enumeration details, Prev: Using fast enumeration, Up: Fast enumeration 43701 437028.9.2 C99-Like Fast Enumeration Syntax 43703-------------------------------------- 43704 43705A c99-like declaration syntax is also allowed: 43706 43707 id array = ...; 43708 43709 for (id object in array) 43710 { 43711 /* Do something with 'object' */ 43712 } 43713 43714 this is completely equivalent to: 43715 43716 id array = ...; 43717 43718 { 43719 id object; 43720 for (object in array) 43721 { 43722 /* Do something with 'object' */ 43723 } 43724 } 43725 43726 but can save some typing. 43727 43728 Note that the option `-std=c99' is not required to allow this syntax 43729in Objective-C. 43730 43731 43732File: gcc.info, Node: Fast enumeration details, Next: Fast enumeration protocol, Prev: c99-like fast enumeration syntax, Up: Fast enumeration 43733 437348.9.3 Fast Enumeration Details 43735------------------------------ 43736 43737Here is a more technical description with the gory details. Consider 43738the code 43739 43740 for (OBJECT EXPRESSION in COLLECTION EXPRESSION) 43741 { 43742 STATEMENTS 43743 } 43744 43745 here is what happens when you run it: 43746 43747 * `COLLECTION EXPRESSION' is evaluated exactly once and the result 43748 is used as the collection object to iterate over. This means it 43749 is safe to write code such as `for (object in [NSDictionary 43750 keyEnumerator]) ...'. 43751 43752 * the iteration is implemented by the compiler by repeatedly getting 43753 batches of objects from the collection object using the fast 43754 enumeration protocol (see below), then iterating over all objects 43755 in the batch. This is faster than a normal enumeration where 43756 objects are retrieved one by one (hence the name "fast 43757 enumeration"). 43758 43759 * if there are no objects in the collection, then `OBJECT 43760 EXPRESSION' is set to `nil' and the loop immediately terminates. 43761 43762 * if there are objects in the collection, then for each object in the 43763 collection (in the order they are returned) `OBJECT EXPRESSION' is 43764 set to the object, then `STATEMENTS' are executed. 43765 43766 * `STATEMENTS' can contain `break' and `continue' commands, which 43767 will abort the iteration or skip to the next loop iteration as 43768 expected. 43769 43770 * when the iteration ends because there are no more objects to 43771 iterate over, `OBJECT EXPRESSION' is set to `nil'. This allows 43772 you to determine whether the iteration finished because a `break' 43773 command was used (in which case `OBJECT EXPRESSION' will remain 43774 set to the last object that was iterated over) or because it 43775 iterated over all the objects (in which case `OBJECT EXPRESSION' 43776 will be set to `nil'). 43777 43778 * `STATEMENTS' must not make any changes to the collection object; 43779 if they do, it is a hard error and the fast enumeration terminates 43780 by invoking `objc_enumerationMutation', a runtime function that 43781 normally aborts the program but which can be customized by 43782 Foundation libraries via `objc_set_mutation_handler' to do 43783 something different, such as raising an exception. 43784 43785 43786 43787File: gcc.info, Node: Fast enumeration protocol, Prev: Fast enumeration details, Up: Fast enumeration 43788 437898.9.4 Fast Enumeration Protocol 43790------------------------------- 43791 43792If you want your own collection object to be usable with fast 43793enumeration, you need to have it implement the method 43794 43795 - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state 43796 objects: (id *)objects 43797 count: (unsigned long)len; 43798 43799 where `NSFastEnumerationState' must be defined in your code as follows: 43800 43801 typedef struct 43802 { 43803 unsigned long state; 43804 id *itemsPtr; 43805 unsigned long *mutationsPtr; 43806 unsigned long extra[5]; 43807 } NSFastEnumerationState; 43808 43809 If no `NSFastEnumerationState' is defined in your code, the compiler 43810will automatically replace `NSFastEnumerationState *' with `struct 43811__objcFastEnumerationState *', where that type is silently defined by 43812the compiler in an identical way. This can be confusing and we 43813recommend that you define `NSFastEnumerationState' (as shown above) 43814instead. 43815 43816 The method is called repeatedly during a fast enumeration to retrieve 43817batches of objects. Each invocation of the method should retrieve the 43818next batch of objects. 43819 43820 The return value of the method is the number of objects in the current 43821batch; this should not exceed `len', which is the maximum size of a 43822batch as requested by the caller. The batch itself is returned in the 43823`itemsPtr' field of the `NSFastEnumerationState' struct. 43824 43825 To help with returning the objects, the `objects' array is a C array 43826preallocated by the caller (on the stack) of size `len'. In many cases 43827you can put the objects you want to return in that `objects' array, 43828then do `itemsPtr = objects'. But you don't have to; if your 43829collection already has the objects to return in some form of C array, 43830it could return them from there instead. 43831 43832 The `state' and `extra' fields of the `NSFastEnumerationState' 43833structure allows your collection object to keep track of the state of 43834the enumeration. In a simple array implementation, `state' may keep 43835track of the index of the last object that was returned, and `extra' 43836may be unused. 43837 43838 The `mutationsPtr' field of the `NSFastEnumerationState' is used to 43839keep track of mutations. It should point to a number; before working 43840on each object, the fast enumeration loop will check that this number 43841has not changed. If it has, a mutation has happened and the fast 43842enumeration will abort. So, `mutationsPtr' could be set to point to 43843some sort of version number of your collection, which is increased by 43844one every time there is a change (for example when an object is added 43845or removed). Or, if you are content with less strict mutation checks, 43846it could point to the number of objects in your collection or some 43847other value that can be checked to perform an approximate check that 43848the collection has not been mutated. 43849 43850 Finally, note how we declared the `len' argument and the return value 43851to be of type `unsigned long'. They could also be declared to be of 43852type `unsigned int' and everything would still work. 43853 43854 43855File: gcc.info, Node: Messaging with the GNU Objective-C runtime, Prev: Fast enumeration, Up: Objective-C 43856 438578.10 Messaging with the GNU Objective-C Runtime 43858=============================================== 43859 43860This section is specific for the GNU Objective-C runtime. If you are 43861using a different runtime, you can skip it. 43862 43863 The implementation of messaging in the GNU Objective-C runtime is 43864designed to be portable, and so is based on standard C. 43865 43866 Sending a message in the GNU Objective-C runtime is composed of two 43867separate steps. First, there is a call to the lookup function, 43868`objc_msg_lookup ()' (or, in the case of messages to super, 43869`objc_msg_lookup_super ()'). This runtime function takes as argument 43870the receiver and the selector of the method to be called; it returns 43871the `IMP', that is a pointer to the function implementing the method. 43872The second step of method invocation consists of casting this pointer 43873function to the appropriate function pointer type, and calling the 43874function pointed to it with the right arguments. 43875 43876 For example, when the compiler encounters a method invocation such as 43877`[object init]', it compiles it into a call to `objc_msg_lookup 43878(object, @selector(init))' followed by a cast of the returned value to 43879the appropriate function pointer type, and then it calls it. 43880 43881* Menu: 43882 43883* Dynamically registering methods:: 43884* Forwarding hook:: 43885 43886 43887File: gcc.info, Node: Dynamically registering methods, Next: Forwarding hook, Up: Messaging with the GNU Objective-C runtime 43888 438898.10.1 Dynamically Registering Methods 43890-------------------------------------- 43891 43892If `objc_msg_lookup()' does not find a suitable method implementation, 43893because the receiver does not implement the required method, it tries 43894to see if the class can dynamically register the method. 43895 43896 To do so, the runtime checks if the class of the receiver implements 43897the method 43898 43899 + (BOOL) resolveInstanceMethod: (SEL)selector; 43900 43901 in the case of an instance method, or 43902 43903 + (BOOL) resolveClassMethod: (SEL)selector; 43904 43905 in the case of a class method. If the class implements it, the 43906runtime invokes it, passing as argument the selector of the original 43907method, and if it returns `YES', the runtime tries the lookup again, 43908which could now succeed if a matching method was added dynamically by 43909`+resolveInstanceMethod:' or `+resolveClassMethod:'. 43910 43911 This allows classes to dynamically register methods (by adding them to 43912the class using `class_addMethod') when they are first called. To do 43913so, a class should implement `+resolveInstanceMethod:' (or, depending 43914on the case, `+resolveClassMethod:') and have it recognize the 43915selectors of methods that can be registered dynamically at runtime, 43916register them, and return `YES'. It should return `NO' for methods 43917that it does not dynamically registered at runtime. 43918 43919 If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not 43920implemented or returns `NO', the runtime then tries the forwarding hook. 43921 43922 Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was 43923added to the GNU Objective-C runtime in GCC version 4.6. 43924 43925 43926File: gcc.info, Node: Forwarding hook, Prev: Dynamically registering methods, Up: Messaging with the GNU Objective-C runtime 43927 439288.10.2 Forwarding Hook 43929---------------------- 43930 43931The GNU Objective-C runtime provides a hook, called 43932`__objc_msg_forward2', which is called by `objc_msg_lookup()' when it 43933can't find a method implementation in the runtime tables and after 43934calling `+resolveInstanceMethod:' and `+resolveClassMethod:' has been 43935attempted and did not succeed in dynamically registering the method. 43936 43937 To configure the hook, you set the global variable 43938`__objc_msg_forward2' to a function with the same argument and return 43939types of `objc_msg_lookup()'. When `objc_msg_lookup()' can not find a 43940method implementation, it invokes the hook function you provided to get 43941a method implementation to return. So, in practice 43942`__objc_msg_forward2' allows you to extend `objc_msg_lookup()' by 43943adding some custom code that is called to do a further lookup when no 43944standard method implementation can be found using the normal lookup. 43945 43946 This hook is generally reserved for "Foundation" libraries such as 43947GNUstep Base, which use it to implement their high-level method 43948forwarding API, typically based around the `forwardInvocation:' method. 43949So, unless you are implementing your own "Foundation" library, you 43950should not set this hook. 43951 43952 In a typical forwarding implementation, the `__objc_msg_forward2' hook 43953function determines the argument and return type of the method that is 43954being looked up, and then creates a function that takes these arguments 43955and has that return type, and returns it to the caller. Creating this 43956function is non-trivial and is typically performed using a dedicated 43957library such as `libffi'. 43958 43959 The forwarding method implementation thus created is returned by 43960`objc_msg_lookup()' and is executed as if it was a normal method 43961implementation. When the forwarding method implementation is called, 43962it is usually expected to pack all arguments into some sort of object 43963(typically, an `NSInvocation' in a "Foundation" library), and hand it 43964over to the programmer (`forwardInvocation:') who is then allowed to 43965manipulate the method invocation using a high-level API provided by the 43966"Foundation" library. For example, the programmer may want to examine 43967the method invocation arguments and name and potentially change them 43968before forwarding the method invocation to one or more local objects 43969(`performInvocation:') or even to remote objects (by using Distributed 43970Objects or some other mechanism). When all this completes, the return 43971value is passed back and must be returned correctly to the original 43972caller. 43973 43974 Note that the GNU Objective-C runtime currently provides no support 43975for method forwarding or method invocations other than the 43976`__objc_msg_forward2' hook. 43977 43978 If the forwarding hook does not exist or returns `NULL', the runtime 43979currently attempts forwarding using an older, deprecated API, and if 43980that fails, it aborts the program. In future versions of the GNU 43981Objective-C runtime, the runtime will immediately abort. 43982 43983 43984File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 43985 439869 Binary Compatibility 43987********************** 43988 43989Binary compatibility encompasses several related concepts: 43990 43991"application binary interface (ABI)" 43992 The set of runtime conventions followed by all of the tools that 43993 deal with binary representations of a program, including 43994 compilers, assemblers, linkers, and language runtime support. 43995 Some ABIs are formal with a written specification, possibly 43996 designed by multiple interested parties. Others are simply the 43997 way things are actually done by a particular set of tools. 43998 43999"ABI conformance" 44000 A compiler conforms to an ABI if it generates code that follows 44001 all of the specifications enumerated by that ABI. A library 44002 conforms to an ABI if it is implemented according to that ABI. An 44003 application conforms to an ABI if it is built using tools that 44004 conform to that ABI and does not contain source code that 44005 specifically changes behavior specified by the ABI. 44006 44007"calling conventions" 44008 Calling conventions are a subset of an ABI that specify of how 44009 arguments are passed and function results are returned. 44010 44011"interoperability" 44012 Different sets of tools are interoperable if they generate files 44013 that can be used in the same program. The set of tools includes 44014 compilers, assemblers, linkers, libraries, header files, startup 44015 files, and debuggers. Binaries produced by different sets of 44016 tools are not interoperable unless they implement the same ABI. 44017 This applies to different versions of the same tools as well as 44018 tools from different vendors. 44019 44020"intercallability" 44021 Whether a function in a binary built by one set of tools can call a 44022 function in a binary built by a different set of tools is a subset 44023 of interoperability. 44024 44025"implementation-defined features" 44026 Language standards include lists of implementation-defined 44027 features whose behavior can vary from one implementation to 44028 another. Some of these features are normally covered by a 44029 platform's ABI and others are not. The features that are not 44030 covered by an ABI generally affect how a program behaves, but not 44031 intercallability. 44032 44033"compatibility" 44034 Conformance to the same ABI and the same behavior of 44035 implementation-defined features are both relevant for 44036 compatibility. 44037 44038 The application binary interface implemented by a C or C++ compiler 44039affects code generation and runtime support for: 44040 44041 * size and alignment of data types 44042 44043 * layout of structured types 44044 44045 * calling conventions 44046 44047 * register usage conventions 44048 44049 * interfaces for runtime arithmetic support 44050 44051 * object file formats 44052 44053 In addition, the application binary interface implemented by a C++ 44054compiler affects code generation and runtime support for: 44055 * name mangling 44056 44057 * exception handling 44058 44059 * invoking constructors and destructors 44060 44061 * layout, alignment, and padding of classes 44062 44063 * layout and alignment of virtual tables 44064 44065 Some GCC compilation options cause the compiler to generate code that 44066does not conform to the platform's default ABI. Other options cause 44067different program behavior for implementation-defined features that are 44068not covered by an ABI. These options are provided for consistency with 44069other compilers that do not follow the platform's default ABI or the 44070usual behavior of implementation-defined features for the platform. Be 44071very careful about using such options. 44072 44073 Most platforms have a well-defined ABI that covers C code, but ABIs 44074that cover C++ functionality are not yet common. 44075 44076 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 44077written, vendor-neutral C++ ABI that was designed to be specific to 4407864-bit Itanium but also includes generic specifications that apply to 44079any platform. This C++ ABI is also implemented by other compiler 44080vendors on some platforms, notably GNU/Linux and BSD systems. We have 44081tried hard to provide a stable ABI that will be compatible with future 44082GCC releases, but it is possible that we will encounter problems that 44083make this difficult. Such problems could include different 44084interpretations of the C++ ABI by different vendors, bugs in the ABI, or 44085bugs in the implementation of the ABI in different compilers. GCC's 44086`-Wabi' switch warns when G++ generates code that is probably not 44087compatible with the C++ ABI. 44088 44089 The C++ library used with a C++ compiler includes the Standard C++ 44090Library, with functionality defined in the C++ Standard, plus language 44091runtime support. The runtime support is included in a C++ ABI, but 44092there is no formal ABI for the Standard C++ Library. Two 44093implementations of that library are interoperable if one follows the 44094de-facto ABI of the other and if they are both built with the same 44095compiler, or with compilers that conform to the same ABI for C++ 44096compiler and runtime support. 44097 44098 When G++ and another C++ compiler conform to the same C++ ABI, but the 44099implementations of the Standard C++ Library that they normally use do 44100not follow the same ABI for the Standard C++ Library, object files 44101built with those compilers can be used in the same program only if they 44102use the same C++ library. This requires specifying the location of the 44103C++ library header files when invoking the compiler whose usual library 44104is not being used. The location of GCC's C++ header files depends on 44105how the GCC build was configured, but can be seen by using the G++ `-v' 44106option. With default configuration options for G++ 3.3 the compile 44107line for a different C++ compiler needs to include 44108 44109 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 44110 44111 Similarly, compiling code with G++ that must use a C++ library other 44112than the GNU C++ library requires specifying the location of the header 44113files for that other library. 44114 44115 The most straightforward way to link a program to use a particular C++ 44116library is to use a C++ driver that specifies that C++ library by 44117default. The `g++' driver, for example, tells the linker where to find 44118GCC's C++ library (`libstdc++') plus the other libraries and startup 44119files it needs, in the proper order. 44120 44121 If a program must use a different C++ library and it's not possible to 44122do the final link using a C++ driver that uses that library by default, 44123it is necessary to tell `g++' the location and name of that library. 44124It might also be necessary to specify different startup files and other 44125runtime support libraries, and to suppress the use of GCC's support 44126libraries with one or more of the options `-nostdlib', `-nostartfiles', 44127and `-nodefaultlibs'. 44128 44129 44130File: gcc.info, Node: Gcov, Next: Gcov-tool, Prev: Compatibility, Up: Top 44131 4413210 `gcov'--a Test Coverage Program 44133********************************** 44134 44135`gcov' is a tool you can use in conjunction with GCC to test code 44136coverage in your programs. 44137 44138* Menu: 44139 44140* Gcov Intro:: Introduction to gcov. 44141* Invoking Gcov:: How to use gcov. 44142* Gcov and Optimization:: Using gcov with GCC optimization. 44143* Gcov Data Files:: The files used by gcov. 44144* Cross-profiling:: Data file relocation. 44145 44146 44147File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 44148 4414910.1 Introduction to `gcov' 44150=========================== 44151 44152`gcov' is a test coverage program. Use it in concert with GCC to 44153analyze your programs to help create more efficient, faster running 44154code and to discover untested parts of your program. You can use 44155`gcov' as a profiling tool to help discover where your optimization 44156efforts will best affect your code. You can also use `gcov' along with 44157the other profiling tool, `gprof', to assess which parts of your code 44158use the greatest amount of computing time. 44159 44160 Profiling tools help you analyze your code's performance. Using a 44161profiler such as `gcov' or `gprof', you can find out some basic 44162performance statistics, such as: 44163 44164 * how often each line of code executes 44165 44166 * what lines of code are actually executed 44167 44168 * how much computing time each section of code uses 44169 44170 Once you know these things about how your code works when compiled, you 44171can look at each module to see which modules should be optimized. 44172`gcov' helps you determine where to work on optimization. 44173 44174 Software developers also use coverage testing in concert with 44175testsuites, to make sure software is actually good enough for a release. 44176Testsuites can verify that a program works as expected; a coverage 44177program tests to see how much of the program is exercised by the 44178testsuite. Developers can then determine what kinds of test cases need 44179to be added to the testsuites to create both better testing and a better 44180final product. 44181 44182 You should compile your code without optimization if you plan to use 44183`gcov' because the optimization, by combining some lines of code into 44184one function, may not give you as much information as you need to look 44185for `hot spots' where the code is using a great deal of computer time. 44186Likewise, because `gcov' accumulates statistics by line (at the lowest 44187resolution), it works best with a programming style that places only 44188one statement on each line. If you use complicated macros that expand 44189to loops or to other control structures, the statistics are less 44190helpful--they only report on the line where the macro call appears. If 44191your complex macros behave like functions, you can replace them with 44192inline functions to solve this problem. 44193 44194 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 44195many times each line of a source file `SOURCEFILE.c' has executed. You 44196can use these logfiles along with `gprof' to aid in fine-tuning the 44197performance of your programs. `gprof' gives timing information you can 44198use along with the information you get from `gcov'. 44199 44200 `gcov' works only on code compiled with GCC. It is not compatible 44201with any other profiling or test coverage mechanism. 44202 44203 44204File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 44205 4420610.2 Invoking `gcov' 44207==================== 44208 44209 gcov [OPTIONS] FILES 44210 44211 `gcov' accepts the following options: 44212 44213`-h' 44214`--help' 44215 Display help about using `gcov' (on the standard output), and exit 44216 without doing any further processing. 44217 44218`-v' 44219`--version' 44220 Display the `gcov' version number (on the standard output), and 44221 exit without doing any further processing. 44222 44223`-a' 44224`--all-blocks' 44225 Write individual execution counts for every basic block. Normally 44226 gcov outputs execution counts only for the main blocks of a line. 44227 With this option you can determine if blocks within a single line 44228 are not being executed. 44229 44230`-b' 44231`--branch-probabilities' 44232 Write branch frequencies to the output file, and write branch 44233 summary info to the standard output. This option allows you to 44234 see how often each branch in your program was taken. 44235 Unconditional branches will not be shown, unless the `-u' option 44236 is given. 44237 44238`-c' 44239`--branch-counts' 44240 Write branch frequencies as the number of branches taken, rather 44241 than the percentage of branches taken. 44242 44243`-n' 44244`--no-output' 44245 Do not create the `gcov' output file. 44246 44247`-l' 44248`--long-file-names' 44249 Create long file names for included source files. For example, if 44250 the header file `x.h' contains code, and was included in the file 44251 `a.c', then running `gcov' on the file `a.c' will produce an 44252 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 44253 can be useful if `x.h' is included in multiple source files and 44254 you want to see the individual contributions. If you use the `-p' 44255 option, both the including and included file names will be 44256 complete path names. 44257 44258`-p' 44259`--preserve-paths' 44260 Preserve complete path information in the names of generated 44261 `.gcov' files. Without this option, just the filename component is 44262 used. With this option, all directories are used, with `/' 44263 characters translated to `#' characters, `.' directory components 44264 removed and unremoveable `..' components renamed to `^'. This is 44265 useful if sourcefiles are in several different directories. 44266 44267`-r' 44268`--relative-only' 44269 Only output information about source files with a relative pathname 44270 (after source prefix elision). Absolute paths are usually system 44271 header files and coverage of any inline functions therein is 44272 normally uninteresting. 44273 44274`-f' 44275`--function-summaries' 44276 Output summaries for each function in addition to the file level 44277 summary. 44278 44279`-o DIRECTORY|FILE' 44280`--object-directory DIRECTORY' 44281`--object-file FILE' 44282 Specify either the directory containing the gcov data files, or the 44283 object path name. The `.gcno', and `.gcda' data files are 44284 searched for using this option. If a directory is specified, the 44285 data files are in that directory and named after the input file 44286 name, without its extension. If a file is specified here, the 44287 data files are named after that file, without its extension. 44288 44289`-s DIRECTORY' 44290`--source-prefix DIRECTORY' 44291 A prefix for source file names to remove when generating the output 44292 coverage files. This option is useful when building in a separate 44293 directory, and the pathname to the source directory is not wanted 44294 when determining the output file names. Note that this prefix 44295 detection is applied before determining whether the source file is 44296 absolute. 44297 44298`-u' 44299`--unconditional-branches' 44300 When branch probabilities are given, include those of 44301 unconditional branches. Unconditional branches are normally not 44302 interesting. 44303 44304`-d' 44305`--display-progress' 44306 Display the progress on the standard output. 44307 44308`-i' 44309`--intermediate-format' 44310 Output gcov file in an easy-to-parse intermediate text format that 44311 can be used by `lcov' or other tools. The output is a single 44312 `.gcov' file per `.gcda' file. No source code is required. 44313 44314 The format of the intermediate `.gcov' file is plain text with one 44315 entry per line 44316 44317 file:SOURCE_FILE_NAME 44318 function:LINE_NUMBER,EXECUTION_COUNT,FUNCTION_NAME 44319 lcount:LINE NUMBER,EXECUTION_COUNT 44320 branch:LINE_NUMBER,BRANCH_COVERAGE_TYPE 44321 44322 Where the BRANCH_COVERAGE_TYPE is 44323 notexec (Branch not executed) 44324 taken (Branch executed and taken) 44325 nottaken (Branch executed, but not taken) 44326 44327 There can be multiple FILE entries in an intermediate gcov 44328 file. All entries following a FILE pertain to that source file 44329 until the next FILE entry. 44330 44331 Here is a sample when `-i' is used in conjunction with `-b' option: 44332 44333 file:array.cc 44334 function:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE 44335 function:22,1,main 44336 lcount:11,1 44337 lcount:12,1 44338 lcount:14,1 44339 branch:14,taken 44340 lcount:26,1 44341 branch:28,nottaken 44342 44343`-m' 44344`--demangled-names' 44345 Display demangled function names in output. The default is to show 44346 mangled function names. 44347 44348 44349 `gcov' should be run with the current directory the same as that when 44350you invoked the compiler. Otherwise it will not be able to locate the 44351source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 44352current directory. These contain the coverage information of the 44353source file they correspond to. One `.gcov' file is produced for each 44354source (or header) file containing code, which was compiled to produce 44355the data files. The MANGLEDNAME part of the output file name is 44356usually simply the source file name, but can be something more 44357complicated if the `-l' or `-p' options are given. Refer to those 44358options for details. 44359 44360 If you invoke `gcov' with multiple input files, the contributions from 44361each input file are summed. Typically you would invoke it with the 44362same list of files as the final link of your executable. 44363 44364 The `.gcov' files contain the `:' separated fields along with program 44365source code. The format is 44366 44367 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 44368 44369 Additional block information may succeed each line, when requested by 44370command line option. The EXECUTION_COUNT is `-' for lines containing 44371no code. Unexecuted lines are marked `#####' or `====', depending on 44372whether they are reachable by non-exceptional paths or only exceptional 44373paths such as C++ exception handlers, respectively. 44374 44375 Some lines of information at the start have LINE_NUMBER of zero. 44376These preamble lines are of the form 44377 44378 -:0:TAG:VALUE 44379 44380 The ordering and number of these preamble lines will be augmented as 44381`gcov' development progresses -- do not rely on them remaining 44382unchanged. Use TAG to locate a particular preamble line. 44383 44384 The additional block information is of the form 44385 44386 TAG INFORMATION 44387 44388 The INFORMATION is human readable, but designed to be simple enough 44389for machine parsing too. 44390 44391 When printing percentages, 0% and 100% are only printed when the values 44392are _exactly_ 0% and 100% respectively. Other values which would 44393conventionally be rounded to 0% or 100% are instead printed as the 44394nearest non-boundary value. 44395 44396 When using `gcov', you must first compile your program with two 44397special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 44398compiler to generate additional information needed by gcov (basically a 44399flow graph of the program) and also includes additional code in the 44400object files for generating the extra profiling information needed by 44401gcov. These additional files are placed in the directory where the 44402object file is located. 44403 44404 Running the program will cause profile output to be generated. For 44405each source file compiled with `-fprofile-arcs', an accompanying 44406`.gcda' file will be placed in the object file directory. 44407 44408 Running `gcov' with your program's source file names as arguments will 44409now produce a listing of the code along with frequency of execution for 44410each line. For example, if your program is called `tmp.c', this is 44411what you see when you use the basic `gcov' facility: 44412 44413 $ gcc -fprofile-arcs -ftest-coverage tmp.c 44414 $ a.out 44415 $ gcov tmp.c 44416 90.00% of 10 source lines executed in file tmp.c 44417 Creating tmp.c.gcov. 44418 44419 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 44420 44421 -: 0:Source:tmp.c 44422 -: 0:Graph:tmp.gcno 44423 -: 0:Data:tmp.gcda 44424 -: 0:Runs:1 44425 -: 0:Programs:1 44426 -: 1:#include <stdio.h> 44427 -: 2: 44428 -: 3:int main (void) 44429 1: 4:{ 44430 1: 5: int i, total; 44431 -: 6: 44432 1: 7: total = 0; 44433 -: 8: 44434 11: 9: for (i = 0; i < 10; i++) 44435 10: 10: total += i; 44436 -: 11: 44437 1: 12: if (total != 45) 44438 #####: 13: printf ("Failure\n"); 44439 -: 14: else 44440 1: 15: printf ("Success\n"); 44441 1: 16: return 0; 44442 -: 17:} 44443 44444 When you use the `-a' option, you will get individual block counts, 44445and the output looks like this: 44446 44447 -: 0:Source:tmp.c 44448 -: 0:Graph:tmp.gcno 44449 -: 0:Data:tmp.gcda 44450 -: 0:Runs:1 44451 -: 0:Programs:1 44452 -: 1:#include <stdio.h> 44453 -: 2: 44454 -: 3:int main (void) 44455 1: 4:{ 44456 1: 4-block 0 44457 1: 5: int i, total; 44458 -: 6: 44459 1: 7: total = 0; 44460 -: 8: 44461 11: 9: for (i = 0; i < 10; i++) 44462 11: 9-block 0 44463 10: 10: total += i; 44464 10: 10-block 0 44465 -: 11: 44466 1: 12: if (total != 45) 44467 1: 12-block 0 44468 #####: 13: printf ("Failure\n"); 44469 $$$$$: 13-block 0 44470 -: 14: else 44471 1: 15: printf ("Success\n"); 44472 1: 15-block 0 44473 1: 16: return 0; 44474 1: 16-block 0 44475 -: 17:} 44476 44477 In this mode, each basic block is only shown on one line - the last 44478line of the block. A multi-line block will only contribute to the 44479execution count of that last line, and other lines will not be shown to 44480contain code, unless previous blocks end on those lines. The total 44481execution count of a line is shown and subsequent lines show the 44482execution counts for individual blocks that end on that line. After 44483each block, the branch and call counts of the block will be shown, if 44484the `-b' option is given. 44485 44486 Because of the way GCC instruments calls, a call count can be shown 44487after a line with no individual blocks. As you can see, line 13 44488contains a basic block that was not executed. 44489 44490 When you use the `-b' option, your output looks like this: 44491 44492 $ gcov -b tmp.c 44493 90.00% of 10 source lines executed in file tmp.c 44494 80.00% of 5 branches executed in file tmp.c 44495 80.00% of 5 branches taken at least once in file tmp.c 44496 50.00% of 2 calls executed in file tmp.c 44497 Creating tmp.c.gcov. 44498 44499 Here is a sample of a resulting `tmp.c.gcov' file: 44500 44501 -: 0:Source:tmp.c 44502 -: 0:Graph:tmp.gcno 44503 -: 0:Data:tmp.gcda 44504 -: 0:Runs:1 44505 -: 0:Programs:1 44506 -: 1:#include <stdio.h> 44507 -: 2: 44508 -: 3:int main (void) 44509 function main called 1 returned 1 blocks executed 75% 44510 1: 4:{ 44511 1: 5: int i, total; 44512 -: 6: 44513 1: 7: total = 0; 44514 -: 8: 44515 11: 9: for (i = 0; i < 10; i++) 44516 branch 0 taken 91% (fallthrough) 44517 branch 1 taken 9% 44518 10: 10: total += i; 44519 -: 11: 44520 1: 12: if (total != 45) 44521 branch 0 taken 0% (fallthrough) 44522 branch 1 taken 100% 44523 #####: 13: printf ("Failure\n"); 44524 call 0 never executed 44525 -: 14: else 44526 1: 15: printf ("Success\n"); 44527 call 0 called 1 returned 100% 44528 1: 16: return 0; 44529 -: 17:} 44530 44531 For each function, a line is printed showing how many times the 44532function is called, how many times it returns and what percentage of the 44533function's blocks were executed. 44534 44535 For each basic block, a line is printed after the last line of the 44536basic block describing the branch or call that ends the basic block. 44537There can be multiple branches and calls listed for a single source 44538line if there are multiple basic blocks that end on that line. In this 44539case, the branches and calls are each given a number. There is no 44540simple way to map these branches and calls back to source constructs. 44541In general, though, the lowest numbered branch or call will correspond 44542to the leftmost construct on the source line. 44543 44544 For a branch, if it was executed at least once, then a percentage 44545indicating the number of times the branch was taken divided by the 44546number of times the branch was executed will be printed. Otherwise, the 44547message "never executed" is printed. 44548 44549 For a call, if it was executed at least once, then a percentage 44550indicating the number of times the call returned divided by the number 44551of times the call was executed will be printed. This will usually be 44552100%, but may be less for functions that call `exit' or `longjmp', and 44553thus may not return every time they are called. 44554 44555 The execution counts are cumulative. If the example program were 44556executed again without removing the `.gcda' file, the count for the 44557number of times each line in the source was executed would be added to 44558the results of the previous run(s). This is potentially useful in 44559several ways. For example, it could be used to accumulate data over a 44560number of program runs as part of a test verification suite, or to 44561provide more accurate long-term information over a large number of 44562program runs. 44563 44564 The data in the `.gcda' files is saved immediately before the program 44565exits. For each source file compiled with `-fprofile-arcs', the 44566profiling code first attempts to read in an existing `.gcda' file; if 44567the file doesn't match the executable (differing number of basic block 44568counts) it will ignore the contents of the file. It then adds in the 44569new execution counts and finally writes the data to the file. 44570 44571 44572File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 44573 4457410.3 Using `gcov' with GCC Optimization 44575======================================= 44576 44577If you plan to use `gcov' to help optimize your code, you must first 44578compile your program with two special GCC options: `-fprofile-arcs 44579-ftest-coverage'. Aside from that, you can use any other GCC options; 44580but if you want to prove that every single line in your program was 44581executed, you should not compile with optimization at the same time. 44582On some machines the optimizer can eliminate some simple code lines by 44583combining them with other lines. For example, code like this: 44584 44585 if (a != b) 44586 c = 1; 44587 else 44588 c = 0; 44589 44590can be compiled into one instruction on some machines. In this case, 44591there is no way for `gcov' to calculate separate execution counts for 44592each line because there isn't separate code for each line. Hence the 44593`gcov' output looks like this if you compiled the program with 44594optimization: 44595 44596 100: 12:if (a != b) 44597 100: 13: c = 1; 44598 100: 14:else 44599 100: 15: c = 0; 44600 44601 The output shows that this block of code, combined by optimization, 44602executed 100 times. In one sense this result is correct, because there 44603was only one instruction representing all four of these lines. However, 44604the output does not indicate how many times the result was 0 and how 44605many times the result was 1. 44606 44607 Inlineable functions can create unexpected line counts. Line counts 44608are shown for the source code of the inlineable function, but what is 44609shown depends on where the function is inlined, or if it is not inlined 44610at all. 44611 44612 If the function is not inlined, the compiler must emit an out of line 44613copy of the function, in any object file that needs it. If `fileA.o' 44614and `fileB.o' both contain out of line bodies of a particular 44615inlineable function, they will also both contain coverage counts for 44616that function. When `fileA.o' and `fileB.o' are linked together, the 44617linker will, on many systems, select one of those out of line bodies 44618for all calls to that function, and remove or ignore the other. 44619Unfortunately, it will not remove the coverage counters for the unused 44620function body. Hence when instrumented, all but one use of that 44621function will show zero counts. 44622 44623 If the function is inlined in several places, the block structure in 44624each location might not be the same. For instance, a condition might 44625now be calculable at compile time in some instances. Because the 44626coverage of all the uses of the inline function will be shown for the 44627same source lines, the line counts themselves might seem inconsistent. 44628 44629 Long-running applications can use the `_gcov_reset' and `_gcov_dump' 44630facilities to restrict profile collection to the program region of 44631interest. Calling `_gcov_reset(void)' will clear all profile counters 44632to zero, and calling `_gcov_dump(void)' will cause the profile 44633information collected at that point to be dumped to `.gcda' output 44634files. 44635 44636 44637File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 44638 4463910.4 Brief Description of `gcov' Data Files 44640=========================================== 44641 44642`gcov' uses two files for profiling. The names of these files are 44643derived from the original _object_ file by substituting the file suffix 44644with either `.gcno', or `.gcda'. The files contain coverage and 44645profile data stored in a platform-independent format. The `.gcno' 44646files are placed in the same directory as the object file. By default, 44647the `.gcda' files are also stored in the same directory as the object 44648file, but the GCC `-fprofile-dir' option may be used to store the 44649`.gcda' files in a separate directory. 44650 44651 The `.gcno' notes file is generated when the source file is compiled 44652with the GCC `-ftest-coverage' option. It contains information to 44653reconstruct the basic block graphs and assign source line numbers to 44654blocks. 44655 44656 The `.gcda' count data file is generated when a program containing 44657object files built with the GCC `-fprofile-arcs' option is executed. A 44658separate `.gcda' file is created for each object file compiled with 44659this option. It contains arc transition counts, value profile counts, 44660and some summary information. 44661 44662 The full details of the file format is specified in `gcov-io.h', and 44663functions provided in that header file should be used to access the 44664coverage files. 44665 44666 44667File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 44668 4466910.5 Data File Relocation to Support Cross-Profiling 44670==================================================== 44671 44672Running the program will cause profile output to be generated. For each 44673source file compiled with `-fprofile-arcs', an accompanying `.gcda' 44674file will be placed in the object file directory. That implicitly 44675requires running the program on the same system as it was built or 44676having the same absolute directory structure on the target system. The 44677program will try to create the needed directory structure, if it is not 44678already present. 44679 44680 To support cross-profiling, a program compiled with `-fprofile-arcs' 44681can relocate the data files based on two environment variables: 44682 44683 * GCOV_PREFIX contains the prefix to add to the absolute paths in 44684 the object file. Prefix can be absolute, or relative. The default 44685 is no prefix. 44686 44687 * GCOV_PREFIX_STRIP indicates the how many initial directory names 44688 to strip off the hardwired absolute paths. Default value is 0. 44689 44690 _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is 44691 undefined, then a relative path is made out of the hardwired 44692 absolute paths. 44693 44694 For example, if the object file `/user/build/foo.o' was built with 44695`-fprofile-arcs', the final executable will try to create the data file 44696`/user/build/foo.gcda' when running on the target system. This will 44697fail if the corresponding directory does not exist and it is unable to 44698create it. This can be overcome by, for example, setting the 44699environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. 44700Such a setting will name the data file `/target/run/build/foo.gcda'. 44701 44702 You must move the data files to the expected directory tree in order to 44703use them for profile directed optimizations (`--use-profile'), or to 44704use the `gcov' tool. 44705 44706 44707File: gcc.info, Node: Gcov-tool, Next: Trouble, Prev: Gcov, Up: Top 44708 4470911 `gcov-tool'--an Offline Gcda Profile Processing Tool 44710******************************************************* 44711 44712`gcov-tool' is a tool you can use in conjunction with GCC to manipulate 44713or process gcda profile files offline. 44714 44715* Menu: 44716 44717* Gcov-tool Intro:: Introduction to gcov-tool. 44718* Invoking Gcov-tool:: How to use gcov-tool. 44719 44720 44721File: gcc.info, Node: Gcov-tool Intro, Next: Invoking Gcov-tool, Up: Gcov-tool 44722 4472311.1 Introduction to `gcov-tool' 44724================================ 44725 44726`gcov-tool' is an offline tool to process gcc's gcda profile files. 44727 44728 Current gcov-tool supports the following functionalities: 44729 44730 * merge two sets of profiles with weights. 44731 44732 * read one set of profile and rewrite profile contents. One can 44733 scale or normalize the count values. 44734 44735 Examples of the use cases for this tool are: 44736 * Collect the profiles for different set of inputs, and use this 44737 tool to merge them. One can specify the weight to factor in the 44738 relative importance of each input. 44739 44740 * Rewrite the profile after removing a subset of the gcda files, 44741 while maintaining the consistency of the summary and the histogram. 44742 44743 * It can also be used to debug or libgcov code as the tools shares 44744 the majority code as the runtime library. 44745 44746 Note that for the merging operation, this profile generated offline may 44747contain slight different values from the online merged profile. Here are 44748a list of typical differences: 44749 44750 * histogram difference: This offline tool recomputes the histogram 44751 after merging the counters. The resulting histogram, therefore, is 44752 precise. The online merging does not have this capability - the 44753 histogram is merged from two histograms and the result is an 44754 approximation. 44755 44756 * summary checksum difference: Summary checksum uses a CRC32 44757 operation. The value depends on the link list order of gcov-info 44758 objects. This order is different in gcov-tool from that in the 44759 online merge. It's expected to have different summary checksums. 44760 It does not really matter as the compiler does not use this 44761 checksum anywhere. 44762 44763 * value profile counter values difference: Some counter values for 44764 value profile are runtime dependent, like heap addresses. It's 44765 normal to see some difference in these kind of counters. 44766 44767 44768File: gcc.info, Node: Invoking Gcov-tool, Prev: Gcov-tool Intro, Up: Gcov-tool 44769 4477011.2 Invoking `gcov-tool' 44771========================= 44772 44773 gcov-tool [GLOBAL-OPTIONS] SUB_COMMAND [SUB_COMMAND-OPTIONS] PROFILE_DIR 44774 44775 `gcov-tool' accepts the following options: 44776 44777`-h' 44778`--help' 44779 Display help about using `gcov-tool' (on the standard output), and 44780 exit without doing any further processing. 44781 44782`-v' 44783`--version' 44784 Display the `gcov-tool' version number (on the standard output), 44785 and exit without doing any further processing. 44786 44787`merge' 44788 Merge two profile directories. 44789 44790 `-v' 44791 `--verbose' 44792 Set the verbose mode. 44793 44794 `-o DIRECTORY' 44795 `--output DIRECTORY' 44796 Set the output profile directory. Default output directory 44797 name is MERGED_PROFILE. 44798 44799 `-w W1,W2' 44800 `--weight W1,W2' 44801 Set the merge weights of the DIRECTORY1 and DIRECTORY2, 44802 respectively. The default weights are 1 for both. 44803 44804`rewrite' 44805 Read the specified profile directory and rewrite to a new 44806 directory. 44807 44808 `-v' 44809 `--verbose' 44810 Set the verbose mode. 44811 44812 `-o DIRECTORY' 44813 `--output DIRECTORY' 44814 Set the output profile directory. Default output name is 44815 REWRITE_PROFILE. 44816 44817 `-s FLOAT_OR_SIMPLE-FRAC_VALUE' 44818 `--scale FLOAT_OR_SIMPLE-FRAC_VALUE' 44819 Scale the profile counters. The specified value can be in 44820 floating point value, or simple fraction value form, such 1, 44821 2, 2/3, and 5/3. 44822 44823 `-n LONG_LONG_VALUE' 44824 `--normalize <long_long_value>' 44825 Normalize the profile. The specified value is the max counter 44826 value in the new profile. 44827 44828`overlap' 44829 Computer the overlap score between the two specified profile 44830 directories. The overlap score is computed based on the arc 44831 profiles. It is defined as the sum of min (p1_counter[i] / 44832 p1_sum_all, p2_counter[i] / p2_sum_all), for all arc counter i, 44833 where p1_counter[i] and p2_counter[i] are two matched counters and 44834 p1_sum_all and p2_sum_all are the sum of counter values in profile 44835 1 and profile 2, respectively. 44836 44837 `-v' 44838 `--verbose' 44839 Set the verbose mode. 44840 44841 `-h' 44842 `--hotonly' 44843 Only print info for hot objects/functions. 44844 44845 `-f' 44846 `--function' 44847 Print function level overlap score. 44848 44849 `-F' 44850 `--fullname' 44851 Print full gcda filename. 44852 44853 `-o' 44854 `--object' 44855 Print object level overlap score. 44856 44857 `-t FLOAT' 44858 `--hot_threshold <float>' 44859 Set the threshold for hot counter value. 44860 44861 44862 44863File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov-tool, Up: Top 44864 4486512 Known Causes of Trouble with GCC 44866*********************************** 44867 44868This section describes known problems that affect users of GCC. Most 44869of these are not GCC bugs per se--if they were, we would fix them. But 44870the result for a user may be like the result of a bug. 44871 44872 Some of these problems are due to bugs in other software, some are 44873missing features that are too much work to add, and some are places 44874where people's opinions differ as to what is best. 44875 44876* Menu: 44877 44878* Actual Bugs:: Bugs we will fix later. 44879* Interoperation:: Problems using GCC with other compilers, 44880 and with certain linkers, assemblers and debuggers. 44881* Incompatibilities:: GCC is incompatible with traditional C. 44882* Fixed Headers:: GCC uses corrected versions of system header files. 44883 This is necessary, but doesn't always work smoothly. 44884* Standard Libraries:: GCC uses the system C library, which might not be 44885 compliant with the ISO C standard. 44886* Disappointments:: Regrettable things we can't change, but not quite bugs. 44887* C++ Misunderstandings:: Common misunderstandings with GNU C++. 44888* Non-bugs:: Things we think are right, but some others disagree. 44889* Warnings and Errors:: Which problems in your code get warnings, 44890 and which get errors. 44891 44892 44893File: gcc.info, Node: Actual Bugs, Next: Interoperation, Up: Trouble 44894 4489512.1 Actual Bugs We Haven't Fixed Yet 44896===================================== 44897 44898 * The `fixincludes' script interacts badly with automounters; if the 44899 directory of system header files is automounted, it tends to be 44900 unmounted while `fixincludes' is running. This would seem to be a 44901 bug in the automounter. We don't know any good way to work around 44902 it. 44903 44904 44905File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Actual Bugs, Up: Trouble 44906 4490712.2 Interoperation 44908=================== 44909 44910This section lists various difficulties encountered in using GCC 44911together with other compilers or with the assemblers, linkers, 44912libraries and debuggers on certain systems. 44913 44914 * On many platforms, GCC supports a different ABI for C++ than do 44915 other compilers, so the object files compiled by GCC cannot be 44916 used with object files generated by another C++ compiler. 44917 44918 An area where the difference is most apparent is name mangling. 44919 The use of different name mangling is intentional, to protect you 44920 from more subtle problems. Compilers differ as to many internal 44921 details of C++ implementation, including: how class instances are 44922 laid out, how multiple inheritance is implemented, and how virtual 44923 function calls are handled. If the name encoding were made the 44924 same, your programs would link against libraries provided from 44925 other compilers--but the programs would then crash when run. 44926 Incompatible libraries are then detected at link time, rather than 44927 at run time. 44928 44929 * On some BSD systems, including some versions of Ultrix, use of 44930 profiling causes static variable destructors (currently used only 44931 in C++) not to be run. 44932 44933 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 44934 boundary, and it expects every `double' to be so aligned. The Sun 44935 compiler usually gives `double' values 8-byte alignment, with one 44936 exception: function arguments of type `double' may not be aligned. 44937 44938 As a result, if a function compiled with Sun CC takes the address 44939 of an argument of type `double' and passes this pointer of type 44940 `double *' to a function compiled with GCC, dereferencing the 44941 pointer may cause a fatal signal. 44942 44943 One way to solve this problem is to compile your entire program 44944 with GCC. Another solution is to modify the function that is 44945 compiled with Sun CC to copy the argument into a local variable; 44946 local variables are always properly aligned. A third solution is 44947 to modify the function that uses the pointer to dereference it via 44948 the following function `access_double' instead of directly with 44949 `*': 44950 44951 inline double 44952 access_double (double *unaligned_ptr) 44953 { 44954 union d2i { double d; int i[2]; }; 44955 44956 union d2i *p = (union d2i *) unaligned_ptr; 44957 union d2i u; 44958 44959 u.i[0] = p->i[0]; 44960 u.i[1] = p->i[1]; 44961 44962 return u.d; 44963 } 44964 44965 Storing into the pointer can be done likewise with the same union. 44966 44967 * On Solaris, the `malloc' function in the `libmalloc.a' library may 44968 allocate memory that is only 4 byte aligned. Since GCC on the 44969 SPARC assumes that doubles are 8 byte aligned, this may result in a 44970 fatal signal if doubles are stored in memory allocated by the 44971 `libmalloc.a' library. 44972 44973 The solution is to not use the `libmalloc.a' library. Use instead 44974 `malloc' and related functions from `libc.a'; they do not have 44975 this problem. 44976 44977 * On the HP PA machine, ADB sometimes fails to work on functions 44978 compiled with GCC. Specifically, it fails to work on functions 44979 that use `alloca' or variable-size arrays. This is because GCC 44980 doesn't generate HP-UX unwind descriptors for such functions. It 44981 may even be impossible to generate them. 44982 44983 * Debugging (`-g') is not supported on the HP PA machine, unless you 44984 use the preliminary GNU tools. 44985 44986 * Taking the address of a label may generate errors from the HP-UX 44987 PA assembler. GAS for the PA does not have this problem. 44988 44989 * Using floating point parameters for indirect calls to static 44990 functions will not work when using the HP assembler. There simply 44991 is no way for GCC to specify what registers hold arguments for 44992 static functions when using the HP assembler. GAS for the PA does 44993 not have this problem. 44994 44995 * In extremely rare cases involving some very large functions you may 44996 receive errors from the HP linker complaining about an out of 44997 bounds unconditional branch offset. This used to occur more often 44998 in previous versions of GCC, but is now exceptionally rare. If 44999 you should run into it, you can work around by making your 45000 function smaller. 45001 45002 * GCC compiled code sometimes emits warnings from the HP-UX 45003 assembler of the form: 45004 45005 (warning) Use of GR3 when 45006 frame >= 8192 may cause conflict. 45007 45008 These warnings are harmless and can be safely ignored. 45009 45010 * In extremely rare cases involving some very large functions you may 45011 receive errors from the AIX Assembler complaining about a 45012 displacement that is too large. If you should run into it, you 45013 can work around by making your function smaller. 45014 45015 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 45016 semantics which merges global symbols between libraries and 45017 applications, especially necessary for C++ streams functionality. 45018 This is not the default behavior of AIX shared libraries and 45019 dynamic linking. `libstdc++.a' is built on AIX with 45020 "runtime-linking" enabled so that symbol merging can occur. To 45021 utilize this feature, the application linked with `libstdc++.a' 45022 must include the `-Wl,-brtl' flag on the link line. G++ cannot 45023 impose this because this option may interfere with the semantics 45024 of the user program and users may not always use `g++' to link his 45025 or her application. Applications are not required to use the 45026 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 45027 library which is not dependent on the symbol merging semantics 45028 will continue to function correctly. 45029 45030 * An application can interpose its own definition of functions for 45031 functions invoked by `libstdc++.a' with "runtime-linking" enabled 45032 on AIX. To accomplish this the application must be linked with 45033 "runtime-linking" option and the functions explicitly must be 45034 exported by the application (`-Wl,-brtl,-bE:exportfile'). 45035 45036 * AIX on the RS/6000 provides support (NLS) for environments outside 45037 of the United States. Compilers and assemblers use NLS to support 45038 locale-specific representations of various objects including 45039 floating-point numbers (`.' vs `,' for separating decimal 45040 fractions). There have been problems reported where the library 45041 linked with GCC does not produce the same floating-point formats 45042 that the assembler accepts. If you have this problem, set the 45043 `LANG' environment variable to `C' or `En_US'. 45044 45045 * Even if you specify `-fdollars-in-identifiers', you cannot 45046 successfully use `$' in identifiers on the RS/6000 due to a 45047 restriction in the IBM assembler. GAS supports these identifiers. 45048 45049 45050 45051File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 45052 4505312.3 Incompatibilities of GCC 45054============================= 45055 45056There are several noteworthy incompatibilities between GNU C and K&R 45057(non-ISO) versions of C. 45058 45059 * GCC normally makes string constants read-only. If several 45060 identical-looking string constants are used, GCC stores only one 45061 copy of the string. 45062 45063 One consequence is that you cannot call `mktemp' with a string 45064 constant argument. The function `mktemp' always alters the string 45065 its argument points to. 45066 45067 Another consequence is that `sscanf' does not work on some very 45068 old systems when passed a string constant as its format control 45069 string or input. This is because `sscanf' incorrectly tries to 45070 write into the string constant. Likewise `fscanf' and `scanf'. 45071 45072 The solution to these problems is to change the program to use 45073 `char'-array variables with initialization strings for these 45074 purposes instead of string constants. 45075 45076 * `-2147483648' is positive. 45077 45078 This is because 2147483648 cannot fit in the type `int', so 45079 (following the ISO C rules) its data type is `unsigned long int'. 45080 Negating this value yields 2147483648 again. 45081 45082 * GCC does not substitute macro arguments when they appear inside of 45083 string constants. For example, the following macro in GCC 45084 45085 #define foo(a) "a" 45086 45087 will produce output `"a"' regardless of what the argument A is. 45088 45089 * When you use `setjmp' and `longjmp', the only automatic variables 45090 guaranteed to remain valid are those declared `volatile'. This is 45091 a consequence of automatic register allocation. Consider this 45092 function: 45093 45094 jmp_buf j; 45095 45096 foo () 45097 { 45098 int a, b; 45099 45100 a = fun1 (); 45101 if (setjmp (j)) 45102 return a; 45103 45104 a = fun2 (); 45105 /* `longjmp (j)' may occur in `fun3'. */ 45106 return a + fun3 (); 45107 } 45108 45109 Here `a' may or may not be restored to its first value when the 45110 `longjmp' occurs. If `a' is allocated in a register, then its 45111 first value is restored; otherwise, it keeps the last value stored 45112 in it. 45113 45114 If you use the `-W' option with the `-O' option, you will get a 45115 warning when GCC thinks such a problem might be possible. 45116 45117 * Programs that use preprocessing directives in the middle of macro 45118 arguments do not work with GCC. For example, a program like this 45119 will not work: 45120 45121 foobar ( 45122 #define luser 45123 hack) 45124 45125 ISO C does not permit such a construct. 45126 45127 * K&R compilers allow comments to cross over an inclusion boundary 45128 (i.e. started in an include file and ended in the including file). 45129 45130 * Declarations of external variables and functions within a block 45131 apply only to the block containing the declaration. In other 45132 words, they have the same scope as any other declaration in the 45133 same place. 45134 45135 In some other C compilers, an `extern' declaration affects all the 45136 rest of the file even if it happens within a block. 45137 45138 * In traditional C, you can combine `long', etc., with a typedef 45139 name, as shown here: 45140 45141 typedef int foo; 45142 typedef long foo bar; 45143 45144 In ISO C, this is not allowed: `long' and other type modifiers 45145 require an explicit `int'. 45146 45147 * PCC allows typedef names to be used as function parameters. 45148 45149 * Traditional C allows the following erroneous pair of declarations 45150 to appear together in a given scope: 45151 45152 typedef int foo; 45153 typedef foo foo; 45154 45155 * GCC treats all characters of identifiers as significant. 45156 According to K&R-1 (2.2), "No more than the first eight characters 45157 are significant, although more may be used.". Also according to 45158 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 45159 the first character must be a letter. The underscore _ counts as 45160 a letter.", but GCC also allows dollar signs in identifiers. 45161 45162 * PCC allows whitespace in the middle of compound assignment 45163 operators such as `+='. GCC, following the ISO standard, does not 45164 allow this. 45165 45166 * GCC complains about unterminated character constants inside of 45167 preprocessing conditionals that fail. Some programs have English 45168 comments enclosed in conditionals that are guaranteed to fail; if 45169 these comments contain apostrophes, GCC will probably report an 45170 error. For example, this code would produce an error: 45171 45172 #if 0 45173 You can't expect this to work. 45174 #endif 45175 45176 The best solution to such a problem is to put the text into an 45177 actual C comment delimited by `/*...*/'. 45178 45179 * Many user programs contain the declaration `long time ();'. In the 45180 past, the system header files on many systems did not actually 45181 declare `time', so it did not matter what type your program 45182 declared it to return. But in systems with ISO C headers, `time' 45183 is declared to return `time_t', and if that is not the same as 45184 `long', then `long time ();' is erroneous. 45185 45186 The solution is to change your program to use appropriate system 45187 headers (`<time.h>' on systems with ISO C headers) and not to 45188 declare `time' if the system header files declare it, or failing 45189 that to use `time_t' as the return type of `time'. 45190 45191 * When compiling functions that return `float', PCC converts it to a 45192 double. GCC actually returns a `float'. If you are concerned 45193 with PCC compatibility, you should declare your functions to return 45194 `double'; you might as well say what you mean. 45195 45196 * When compiling functions that return structures or unions, GCC 45197 output code normally uses a method different from that used on most 45198 versions of Unix. As a result, code compiled with GCC cannot call 45199 a structure-returning function compiled with PCC, and vice versa. 45200 45201 The method used by GCC is as follows: a structure or union which is 45202 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 45203 union with any other size is stored into an address supplied by 45204 the caller (usually in a special, fixed register, but on some 45205 machines it is passed on the stack). The target hook 45206 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 45207 45208 By contrast, PCC on most target machines returns structures and 45209 unions of any size by copying the data into an area of static 45210 storage, and then returning the address of that storage as if it 45211 were a pointer value. The caller must copy the data from that 45212 memory area to the place where the value is wanted. GCC does not 45213 use this method because it is slower and nonreentrant. 45214 45215 On some newer machines, PCC uses a reentrant convention for all 45216 structure and union returning. GCC on most of these machines uses 45217 a compatible convention when returning structures and unions in 45218 memory, but still returns small structures and unions in registers. 45219 45220 You can tell GCC to use a compatible convention for all structure 45221 and union returning with the option `-fpcc-struct-return'. 45222 45223 * GCC complains about program fragments such as `0x74ae-0x4000' 45224 which appear to be two hexadecimal constants separated by the minus 45225 operator. Actually, this string is a single "preprocessing token". 45226 Each such token must correspond to one token in C. Since this 45227 does not, GCC prints an error message. Although it may appear 45228 obvious that what is meant is an operator and two values, the ISO 45229 C standard specifically requires that this be treated as erroneous. 45230 45231 A "preprocessing token" is a "preprocessing number" if it begins 45232 with a digit and is followed by letters, underscores, digits, 45233 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 45234 character sequences. (In strict C90 mode, the sequences `p+', 45235 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 45236 45237 To make the above program fragment valid, place whitespace in 45238 front of the minus sign. This whitespace will end the 45239 preprocessing number. 45240 45241 45242File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 45243 4524412.4 Fixed Header Files 45245======================= 45246 45247GCC needs to install corrected versions of some system header files. 45248This is because most target systems have some header files that won't 45249work with GCC unless they are changed. Some have bugs, some are 45250incompatible with ISO C, and some depend on special features of other 45251compilers. 45252 45253 Installing GCC automatically creates and installs the fixed header 45254files, by running a program called `fixincludes'. Normally, you don't 45255need to pay attention to this. But there are cases where it doesn't do 45256the right thing automatically. 45257 45258 * If you update the system's header files, such as by installing a 45259 new system version, the fixed header files of GCC are not 45260 automatically updated. They can be updated using the `mkheaders' 45261 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 45262 45263 * On some systems, header file directories contain machine-specific 45264 symbolic links in certain places. This makes it possible to share 45265 most of the header files among hosts running the same version of 45266 the system on different machine models. 45267 45268 The programs that fix the header files do not understand this 45269 special way of using symbolic links; therefore, the directory of 45270 fixed header files is good only for the machine model used to 45271 build it. 45272 45273 It is possible to make separate sets of fixed header files for the 45274 different machine models, and arrange a structure of symbolic 45275 links so as to use the proper set, but you'll have to do this by 45276 hand. 45277 45278 45279File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 45280 4528112.5 Standard Libraries 45282======================= 45283 45284GCC by itself attempts to be a conforming freestanding implementation. 45285*Note Language Standards Supported by GCC: Standards, for details of 45286what this means. Beyond the library facilities required of such an 45287implementation, the rest of the C library is supplied by the vendor of 45288the operating system. If that C library doesn't conform to the C 45289standards, then your programs might get warnings (especially when using 45290`-Wall') that you don't expect. 45291 45292 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 45293while the C standard says that `sprintf' returns an `int'. The 45294`fixincludes' program could make the prototype for this function match 45295the Standard, but that would be wrong, since the function will still 45296return `char *'. 45297 45298 If you need a Standard compliant library, then you need to find one, as 45299GCC does not provide one. The GNU C library (called `glibc') provides 45300ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 45301HURD-based GNU systems; no recent version of it supports other systems, 45302though some very old versions did. Version 2.2 of the GNU C library 45303includes nearly complete C99 support. You could also ask your 45304operating system vendor if newer libraries are available. 45305 45306 45307File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 45308 4530912.6 Disappointments and Misunderstandings 45310========================================== 45311 45312These problems are perhaps regrettable, but we don't know any practical 45313way around them. 45314 45315 * Certain local variables aren't recognized by debuggers when you 45316 compile with optimization. 45317 45318 This occurs because sometimes GCC optimizes the variable out of 45319 existence. There is no way to tell the debugger how to compute the 45320 value such a variable "would have had", and it is not clear that 45321 would be desirable anyway. So GCC simply does not mention the 45322 eliminated variable when it writes debugging information. 45323 45324 You have to expect a certain amount of disagreement between the 45325 executable and your source code, when you use optimization. 45326 45327 * Users often think it is a bug when GCC reports an error for code 45328 like this: 45329 45330 int foo (struct mumble *); 45331 45332 struct mumble { ... }; 45333 45334 int foo (struct mumble *x) 45335 { ... } 45336 45337 This code really is erroneous, because the scope of `struct 45338 mumble' in the prototype is limited to the argument list 45339 containing it. It does not refer to the `struct mumble' defined 45340 with file scope immediately below--they are two unrelated types 45341 with similar names in different scopes. 45342 45343 But in the definition of `foo', the file-scope type is used 45344 because that is available to be inherited. Thus, the definition 45345 and the prototype do not match, and you get an error. 45346 45347 This behavior may seem silly, but it's what the ISO standard 45348 specifies. It is easy enough for you to make your code work by 45349 moving the definition of `struct mumble' above the prototype. 45350 It's not worth being incompatible with ISO C just to avoid an 45351 error for the example shown above. 45352 45353 * Accesses to bit-fields even in volatile objects works by accessing 45354 larger objects, such as a byte or a word. You cannot rely on what 45355 size of object is accessed in order to read or write the 45356 bit-field; it may even vary for a given bit-field according to the 45357 precise usage. 45358 45359 If you care about controlling the amount of memory that is 45360 accessed, use volatile but do not use bit-fields. 45361 45362 * GCC comes with shell scripts to fix certain known problems in 45363 system header files. They install corrected copies of various 45364 header files in a special directory where only GCC will normally 45365 look for them. The scripts adapt to various systems by searching 45366 all the system header files for the problem cases that we know 45367 about. 45368 45369 If new system header files are installed, nothing automatically 45370 arranges to update the corrected header files. They can be 45371 updated using the `mkheaders' script installed in 45372 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 45373 45374 * On 68000 and x86 systems, for instance, you can get paradoxical 45375 results if you test the precise values of floating point numbers. 45376 For example, you can find that a floating point value which is not 45377 a NaN is not equal to itself. This results from the fact that the 45378 floating point registers hold a few more bits of precision than 45379 fit in a `double' in memory. Compiled code moves values between 45380 memory and floating point registers at its convenience, and moving 45381 them into memory truncates them. 45382 45383 You can partially avoid this problem by using the `-ffloat-store' 45384 option (*note Optimize Options::). 45385 45386 * On AIX and other platforms without weak symbol support, templates 45387 need to be instantiated explicitly and symbols for static members 45388 of templates will not be generated. 45389 45390 * On AIX, GCC scans object files and library archives for static 45391 constructors and destructors when linking an application before the 45392 linker prunes unreferenced symbols. This is necessary to prevent 45393 the AIX linker from mistakenly assuming that static constructor or 45394 destructor are unused and removing them before the scanning can 45395 occur. All static constructors and destructors found will be 45396 referenced even though the modules in which they occur may not be 45397 used by the program. This may lead to both increased executable 45398 size and unexpected symbol references. 45399 45400 45401File: gcc.info, Node: C++ Misunderstandings, Next: Non-bugs, Prev: Disappointments, Up: Trouble 45402 4540312.7 Common Misunderstandings with GNU C++ 45404========================================== 45405 45406C++ is a complex language and an evolving one, and its standard 45407definition (the ISO C++ standard) was only recently completed. As a 45408result, your C++ compiler may occasionally surprise you, even when its 45409behavior is correct. This section discusses some areas that frequently 45410give rise to questions of this sort. 45411 45412* Menu: 45413 45414* Static Definitions:: Static member declarations are not definitions 45415* Name lookup:: Name lookup, templates, and accessing members of base classes 45416* Temporaries:: Temporaries may vanish before you expect 45417* Copy Assignment:: Copy Assignment operators copy virtual bases twice 45418 45419 45420File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 45421 4542212.7.1 Declare _and_ Define Static Members 45423------------------------------------------ 45424 45425When a class has static data members, it is not enough to _declare_ the 45426static member; you must also _define_ it. For example: 45427 45428 class Foo 45429 { 45430 ... 45431 void method(); 45432 static int bar; 45433 }; 45434 45435 This declaration only establishes that the class `Foo' has an `int' 45436named `Foo::bar', and a member function named `Foo::method'. But you 45437still need to define _both_ `method' and `bar' elsewhere. According to 45438the ISO standard, you must supply an initializer in one (and only one) 45439source file, such as: 45440 45441 int Foo::bar = 0; 45442 45443 Other C++ compilers may not correctly implement the standard behavior. 45444As a result, when you switch to `g++' from one of these compilers, you 45445may discover that a program that appeared to work correctly in fact 45446does not conform to the standard: `g++' reports as undefined symbols 45447any static data members that lack definitions. 45448 45449 45450File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 45451 4545212.7.2 Name Lookup, Templates, and Accessing Members of Base Classes 45453-------------------------------------------------------------------- 45454 45455The C++ standard prescribes that all names that are not dependent on 45456template parameters are bound to their present definitions when parsing 45457a template function or class.(1) Only names that are dependent are 45458looked up at the point of instantiation. For example, consider 45459 45460 void foo(double); 45461 45462 struct A { 45463 template <typename T> 45464 void f () { 45465 foo (1); // 1 45466 int i = N; // 2 45467 T t; 45468 t.bar(); // 3 45469 foo (t); // 4 45470 } 45471 45472 static const int N; 45473 }; 45474 45475 Here, the names `foo' and `N' appear in a context that does not depend 45476on the type of `T'. The compiler will thus require that they are 45477defined in the context of use in the template, not only before the 45478point of instantiation, and will here use `::foo(double)' and `A::N', 45479respectively. In particular, it will convert the integer value to a 45480`double' when passing it to `::foo(double)'. 45481 45482 Conversely, `bar' and the call to `foo' in the fourth marked line are 45483used in contexts that do depend on the type of `T', so they are only 45484looked up at the point of instantiation, and you can provide 45485declarations for them after declaring the template, but before 45486instantiating it. In particular, if you instantiate `A::f<int>', the 45487last line will call an overloaded `::foo(int)' if one was provided, 45488even if after the declaration of `struct A'. 45489 45490 This distinction between lookup of dependent and non-dependent names is 45491called two-stage (or dependent) name lookup. G++ implements it since 45492version 3.4. 45493 45494 Two-stage name lookup sometimes leads to situations with behavior 45495different from non-template codes. The most common is probably this: 45496 45497 template <typename T> struct Base { 45498 int i; 45499 }; 45500 45501 template <typename T> struct Derived : public Base<T> { 45502 int get_i() { return i; } 45503 }; 45504 45505 In `get_i()', `i' is not used in a dependent context, so the compiler 45506will look for a name declared at the enclosing namespace scope (which 45507is the global scope here). It will not look into the base class, since 45508that is dependent and you may declare specializations of `Base' even 45509after declaring `Derived', so the compiler can't really know what `i' 45510would refer to. If there is no global variable `i', then you will get 45511an error message. 45512 45513 In order to make it clear that you want the member of the base class, 45514you need to defer lookup until instantiation time, at which the base 45515class is known. For this, you need to access `i' in a dependent 45516context, by either using `this->i' (remember that `this' is of type 45517`Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 45518Alternatively, `Base<T>::i' might be brought into scope by a 45519`using'-declaration. 45520 45521 Another, similar example involves calling member functions of a base 45522class: 45523 45524 template <typename T> struct Base { 45525 int f(); 45526 }; 45527 45528 template <typename T> struct Derived : Base<T> { 45529 int g() { return f(); }; 45530 }; 45531 45532 Again, the call to `f()' is not dependent on template arguments (there 45533are no arguments that depend on the type `T', and it is also not 45534otherwise specified that the call should be in a dependent context). 45535Thus a global declaration of such a function must be available, since 45536the one in the base class is not visible until instantiation time. The 45537compiler will consequently produce the following error message: 45538 45539 x.cc: In member function `int Derived<T>::g()': 45540 x.cc:6: error: there are no arguments to `f' that depend on a template 45541 parameter, so a declaration of `f' must be available 45542 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 45543 allowing the use of an undeclared name is deprecated) 45544 45545 To make the code valid either use `this->f()', or `Base<T>::f()'. 45546Using the `-fpermissive' flag will also let the compiler accept the 45547code, by marking all function calls for which no declaration is visible 45548at the time of definition of the template for later lookup at 45549instantiation time, as if it were a dependent call. We do not 45550recommend using `-fpermissive' to work around invalid code, and it will 45551also only catch cases where functions in base classes are called, not 45552where variables in base classes are used (as in the example above). 45553 45554 Note that some compilers (including G++ versions prior to 3.4) get 45555these examples wrong and accept above code without an error. Those 45556compilers do not implement two-stage name lookup correctly. 45557 45558 ---------- Footnotes ---------- 45559 45560 (1) The C++ standard just uses the term "dependent" for names that 45561depend on the type or value of template parameters. This shorter term 45562will also be used in the rest of this section. 45563 45564 45565File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 45566 4556712.7.3 Temporaries May Vanish Before You Expect 45568----------------------------------------------- 45569 45570It is dangerous to use pointers or references to _portions_ of a 45571temporary object. The compiler may very well delete the object before 45572you expect it to, leaving a pointer to garbage. The most common place 45573where this problem crops up is in classes like string classes, 45574especially ones that define a conversion function to type `char *' or 45575`const char *'--which is one reason why the standard `string' class 45576requires you to call the `c_str' member function. However, any class 45577that returns a pointer to some internal structure is potentially 45578subject to this problem. 45579 45580 For example, a program may use a function `strfunc' that returns 45581`string' objects, and another function `charfunc' that operates on 45582pointers to `char': 45583 45584 string strfunc (); 45585 void charfunc (const char *); 45586 45587 void 45588 f () 45589 { 45590 const char *p = strfunc().c_str(); 45591 ... 45592 charfunc (p); 45593 ... 45594 charfunc (p); 45595 } 45596 45597In this situation, it may seem reasonable to save a pointer to the C 45598string returned by the `c_str' member function and use that rather than 45599call `c_str' repeatedly. However, the temporary string created by the 45600call to `strfunc' is destroyed after `p' is initialized, at which point 45601`p' is left pointing to freed memory. 45602 45603 Code like this may run successfully under some other compilers, 45604particularly obsolete cfront-based compilers that delete temporaries 45605along with normal local variables. However, the GNU C++ behavior is 45606standard-conforming, so if your program depends on late destruction of 45607temporaries it is not portable. 45608 45609 The safe way to write such code is to give the temporary a name, which 45610forces it to remain until the end of the scope of the name. For 45611example: 45612 45613 const string& tmp = strfunc (); 45614 charfunc (tmp.c_str ()); 45615 45616 45617File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 45618 4561912.7.4 Implicit Copy-Assignment for Virtual Bases 45620------------------------------------------------- 45621 45622When a base class is virtual, only one subobject of the base class 45623belongs to each full object. Also, the constructors and destructors are 45624invoked only once, and called from the most-derived class. However, 45625such objects behave unspecified when being assigned. For example: 45626 45627 struct Base{ 45628 char *name; 45629 Base(char *n) : name(strdup(n)){} 45630 Base& operator= (const Base& other){ 45631 free (name); 45632 name = strdup (other.name); 45633 } 45634 }; 45635 45636 struct A:virtual Base{ 45637 int val; 45638 A():Base("A"){} 45639 }; 45640 45641 struct B:virtual Base{ 45642 int bval; 45643 B():Base("B"){} 45644 }; 45645 45646 struct Derived:public A, public B{ 45647 Derived():Base("Derived"){} 45648 }; 45649 45650 void func(Derived &d1, Derived &d2) 45651 { 45652 d1 = d2; 45653 } 45654 45655 The C++ standard specifies that `Base::Base' is only called once when 45656constructing or copy-constructing a Derived object. It is unspecified 45657whether `Base::operator=' is called more than once when the implicit 45658copy-assignment for Derived objects is invoked (as it is inside `func' 45659in the example). 45660 45661 G++ implements the "intuitive" algorithm for copy-assignment: assign 45662all direct bases, then assign all members. In that algorithm, the 45663virtual base subobject can be encountered more than once. In the 45664example, copying proceeds in the following order: `val', `name' (via 45665`strdup'), `bval', and `name' again. 45666 45667 If application code relies on copy-assignment, a user-defined 45668copy-assignment operator removes any uncertainties. With such an 45669operator, the application can define whether and how the virtual base 45670subobject is assigned. 45671 45672 45673File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: C++ Misunderstandings, Up: Trouble 45674 4567512.8 Certain Changes We Don't Want to Make 45676========================================== 45677 45678This section lists changes that people frequently request, but which we 45679do not make because we think GCC is better without them. 45680 45681 * Checking the number and type of arguments to a function which has 45682 an old-fashioned definition and no prototype. 45683 45684 Such a feature would work only occasionally--only for calls that 45685 appear in the same file as the called function, following the 45686 definition. The only way to check all calls reliably is to add a 45687 prototype for the function. But adding a prototype eliminates the 45688 motivation for this feature. So the feature is not worthwhile. 45689 45690 * Warning about using an expression whose type is signed as a shift 45691 count. 45692 45693 Shift count operands are probably signed more often than unsigned. 45694 Warning about this would cause far more annoyance than good. 45695 45696 * Warning about assigning a signed value to an unsigned variable. 45697 45698 Such assignments must be very common; warning about them would 45699 cause more annoyance than good. 45700 45701 * Warning when a non-void function value is ignored. 45702 45703 C contains many standard functions that return a value that most 45704 programs choose to ignore. One obvious example is `printf'. 45705 Warning about this practice only leads the defensive programmer to 45706 clutter programs with dozens of casts to `void'. Such casts are 45707 required so frequently that they become visual noise. Writing 45708 those casts becomes so automatic that they no longer convey useful 45709 information about the intentions of the programmer. For functions 45710 where the return value should never be ignored, use the 45711 `warn_unused_result' function attribute (*note Function 45712 Attributes::). 45713 45714 * Making `-fshort-enums' the default. 45715 45716 This would cause storage layout to be incompatible with most other 45717 C compilers. And it doesn't seem very important, given that you 45718 can get the same result in other ways. The case where it matters 45719 most is when the enumeration-valued object is inside a structure, 45720 and in that case you can specify a field width explicitly. 45721 45722 * Making bit-fields unsigned by default on particular machines where 45723 "the ABI standard" says to do so. 45724 45725 The ISO C standard leaves it up to the implementation whether a 45726 bit-field declared plain `int' is signed or not. This in effect 45727 creates two alternative dialects of C. 45728 45729 The GNU C compiler supports both dialects; you can specify the 45730 signed dialect with `-fsigned-bitfields' and the unsigned dialect 45731 with `-funsigned-bitfields'. However, this leaves open the 45732 question of which dialect to use by default. 45733 45734 Currently, the preferred dialect makes plain bit-fields signed, 45735 because this is simplest. Since `int' is the same as `signed int' 45736 in every other context, it is cleanest for them to be the same in 45737 bit-fields as well. 45738 45739 Some computer manufacturers have published Application Binary 45740 Interface standards which specify that plain bit-fields should be 45741 unsigned. It is a mistake, however, to say anything about this 45742 issue in an ABI. This is because the handling of plain bit-fields 45743 distinguishes two dialects of C. Both dialects are meaningful on 45744 every type of machine. Whether a particular object file was 45745 compiled using signed bit-fields or unsigned is of no concern to 45746 other object files, even if they access the same bit-fields in the 45747 same data structures. 45748 45749 A given program is written in one or the other of these two 45750 dialects. The program stands a chance to work on most any machine 45751 if it is compiled with the proper dialect. It is unlikely to work 45752 at all if compiled with the wrong dialect. 45753 45754 Many users appreciate the GNU C compiler because it provides an 45755 environment that is uniform across machines. These users would be 45756 inconvenienced if the compiler treated plain bit-fields 45757 differently on certain machines. 45758 45759 Occasionally users write programs intended only for a particular 45760 machine type. On these occasions, the users would benefit if the 45761 GNU C compiler were to support by default the same dialect as the 45762 other compilers on that machine. But such applications are rare. 45763 And users writing a program to run on more than one type of 45764 machine cannot possibly benefit from this kind of compatibility. 45765 45766 This is why GCC does and will treat plain bit-fields in the same 45767 fashion on all types of machines (by default). 45768 45769 There are some arguments for making bit-fields unsigned by default 45770 on all machines. If, for example, this becomes a universal de 45771 facto standard, it would make sense for GCC to go along with it. 45772 This is something to be considered in the future. 45773 45774 (Of course, users strongly concerned about portability should 45775 indicate explicitly in each bit-field whether it is signed or not. 45776 In this way, they write programs which have the same meaning in 45777 both C dialects.) 45778 45779 * Undefining `__STDC__' when `-ansi' is not used. 45780 45781 Currently, GCC defines `__STDC__' unconditionally. This provides 45782 good results in practice. 45783 45784 Programmers normally use conditionals on `__STDC__' to ask whether 45785 it is safe to use certain features of ISO C, such as function 45786 prototypes or ISO token concatenation. Since plain `gcc' supports 45787 all the features of ISO C, the correct answer to these questions is 45788 "yes". 45789 45790 Some users try to use `__STDC__' to check for the availability of 45791 certain library facilities. This is actually incorrect usage in 45792 an ISO C program, because the ISO C standard says that a conforming 45793 freestanding implementation should define `__STDC__' even though it 45794 does not have the library facilities. `gcc -ansi -pedantic' is a 45795 conforming freestanding implementation, and it is therefore 45796 required to define `__STDC__', even though it does not come with 45797 an ISO C library. 45798 45799 Sometimes people say that defining `__STDC__' in a compiler that 45800 does not completely conform to the ISO C standard somehow violates 45801 the standard. This is illogical. The standard is a standard for 45802 compilers that claim to support ISO C, such as `gcc -ansi'--not 45803 for other compilers such as plain `gcc'. Whatever the ISO C 45804 standard says is relevant to the design of plain `gcc' without 45805 `-ansi' only for pragmatic reasons, not as a requirement. 45806 45807 GCC normally defines `__STDC__' to be 1, and in addition defines 45808 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 45809 option for strict conformance to some version of ISO C. On some 45810 hosts, system include files use a different convention, where 45811 `__STDC__' is normally 0, but is 1 if the user specifies strict 45812 conformance to the C Standard. GCC follows the host convention 45813 when processing system include files, but when processing user 45814 files it follows the usual GNU C convention. 45815 45816 * Undefining `__STDC__' in C++. 45817 45818 Programs written to compile with C++-to-C translators get the 45819 value of `__STDC__' that goes with the C compiler that is 45820 subsequently used. These programs must test `__STDC__' to 45821 determine what kind of C preprocessor that compiler uses: whether 45822 they should concatenate tokens in the ISO C fashion or in the 45823 traditional fashion. 45824 45825 These programs work properly with GNU C++ if `__STDC__' is defined. 45826 They would not work otherwise. 45827 45828 In addition, many header files are written to provide prototypes 45829 in ISO C but not in traditional C. Many of these header files can 45830 work without change in C++ provided `__STDC__' is defined. If 45831 `__STDC__' is not defined, they will all fail, and will all need 45832 to be changed to test explicitly for C++ as well. 45833 45834 * Deleting "empty" loops. 45835 45836 Historically, GCC has not deleted "empty" loops under the 45837 assumption that the most likely reason you would put one in a 45838 program is to have a delay, so deleting them will not make real 45839 programs run any faster. 45840 45841 However, the rationale here is that optimization of a nonempty loop 45842 cannot produce an empty one. This held for carefully written C 45843 compiled with less powerful optimizers but is not always the case 45844 for carefully written C++ or with more powerful optimizers. Thus 45845 GCC will remove operations from loops whenever it can determine 45846 those operations are not externally visible (apart from the time 45847 taken to execute them, of course). In case the loop can be proved 45848 to be finite, GCC will also remove the loop itself. 45849 45850 Be aware of this when performing timing tests, for instance the 45851 following loop can be completely removed, provided 45852 `some_expression' can provably not change any global state. 45853 45854 { 45855 int sum = 0; 45856 int ix; 45857 45858 for (ix = 0; ix != 10000; ix++) 45859 sum += some_expression; 45860 } 45861 45862 Even though `sum' is accumulated in the loop, no use is made of 45863 that summation, so the accumulation can be removed. 45864 45865 * Making side effects happen in the same order as in some other 45866 compiler. 45867 45868 It is never safe to depend on the order of evaluation of side 45869 effects. For example, a function call like this may very well 45870 behave differently from one compiler to another: 45871 45872 void func (int, int); 45873 45874 int i = 2; 45875 func (i++, i++); 45876 45877 There is no guarantee (in either the C or the C++ standard language 45878 definitions) that the increments will be evaluated in any 45879 particular order. Either increment might happen first. `func' 45880 might get the arguments `2, 3', or it might get `3, 2', or even 45881 `2, 2'. 45882 45883 * Making certain warnings into errors by default. 45884 45885 Some ISO C testsuites report failure when the compiler does not 45886 produce an error message for a certain program. 45887 45888 ISO C requires a "diagnostic" message for certain kinds of invalid 45889 programs, but a warning is defined by GCC to count as a 45890 diagnostic. If GCC produces a warning but not an error, that is 45891 correct ISO C support. If testsuites call this "failure", they 45892 should be run with the GCC option `-pedantic-errors', which will 45893 turn these warnings into errors. 45894 45895 45896 45897File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 45898 4589912.9 Warning Messages and Error Messages 45900======================================== 45901 45902The GNU compiler can produce two kinds of diagnostics: errors and 45903warnings. Each kind has a different purpose: 45904 45905 "Errors" report problems that make it impossible to compile your 45906 program. GCC reports errors with the source file name and line 45907 number where the problem is apparent. 45908 45909 "Warnings" report other unusual conditions in your code that _may_ 45910 indicate a problem, although compilation can (and does) proceed. 45911 Warning messages also report the source file name and line number, 45912 but include the text `warning:' to distinguish them from error 45913 messages. 45914 45915 Warnings may indicate danger points where you should check to make sure 45916that your program really does what you intend; or the use of obsolete 45917features; or the use of nonstandard features of GNU C or C++. Many 45918warnings are issued only if you ask for them, with one of the `-W' 45919options (for instance, `-Wall' requests a variety of useful warnings). 45920 45921 GCC always tries to compile your program if possible; it never 45922gratuitously rejects a program whose meaning is clear merely because 45923(for instance) it fails to conform to a standard. In some cases, 45924however, the C and C++ standards specify that certain extensions are 45925forbidden, and a diagnostic _must_ be issued by a conforming compiler. 45926The `-pedantic' option tells GCC to issue warnings in such cases; 45927`-pedantic-errors' says to make them errors instead. This does not 45928mean that _all_ non-ISO constructs get warnings or errors. 45929 45930 *Note Options to Request or Suppress Warnings: Warning Options, for 45931more detail on these and related command-line options. 45932 45933 45934File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 45935 4593613 Reporting Bugs 45937***************** 45938 45939Your bug reports play an essential role in making GCC reliable. 45940 45941 When you encounter a problem, the first thing to do is to see if it is 45942already known. *Note Trouble::. If it isn't known, then you should 45943report the problem. 45944 45945* Menu: 45946 45947* Criteria: Bug Criteria. Have you really found a bug? 45948* Reporting: Bug Reporting. How to report a bug effectively. 45949 45950 45951File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 45952 4595313.1 Have You Found a Bug? 45954========================== 45955 45956If you are not sure whether you have found a bug, here are some 45957guidelines: 45958 45959 * If the compiler gets a fatal signal, for any input whatever, that 45960 is a compiler bug. Reliable compilers never crash. 45961 45962 * If the compiler produces invalid assembly code, for any input 45963 whatever (except an `asm' statement), that is a compiler bug, 45964 unless the compiler reports errors (not just warnings) which would 45965 ordinarily prevent the assembler from being run. 45966 45967 * If the compiler produces valid assembly code that does not 45968 correctly execute the input source code, that is a compiler bug. 45969 45970 However, you must double-check to make sure, because you may have a 45971 program whose behavior is undefined, which happened by chance to 45972 give the desired results with another C or C++ compiler. 45973 45974 For example, in many nonoptimizing compilers, you can write `x;' 45975 at the end of a function instead of `return x;', with the same 45976 results. But the value of the function is undefined if `return' 45977 is omitted; it is not a bug when GCC produces different results. 45978 45979 Problems often result from expressions with two increment 45980 operators, as in `f (*p++, *p++)'. Your previous compiler might 45981 have interpreted that expression the way you intended; GCC might 45982 interpret it another way. Neither compiler is wrong. The bug is 45983 in your code. 45984 45985 After you have localized the error to a single source line, it 45986 should be easy to check for these things. If your program is 45987 correct and well defined, you have found a compiler bug. 45988 45989 * If the compiler produces an error message for valid input, that is 45990 a compiler bug. 45991 45992 * If the compiler does not produce an error message for invalid 45993 input, that is a compiler bug. However, you should note that your 45994 idea of "invalid input" might be someone else's idea of "an 45995 extension" or "support for traditional practice". 45996 45997 * If you are an experienced user of one of the languages GCC 45998 supports, your suggestions for improvement of GCC are welcome in 45999 any case. 46000 46001 46002File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 46003 4600413.2 How and Where to Report Bugs 46005================================= 46006 46007Bugs should be reported to the bug database at 46008`http://gcc.gnu.org/bugs.html'. 46009 46010 46011File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 46012 4601314 How To Get Help with GCC 46014*************************** 46015 46016If you need help installing, using or changing GCC, there are two ways 46017to find it: 46018 46019 * Send a message to a suitable network mailing list. First try 46020 <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if 46021 that brings no response, try <gcc@gcc.gnu.org>. For help changing 46022 GCC, ask <gcc@gcc.gnu.org>. If you think you have found a bug in 46023 GCC, please report it following the instructions at *note Bug 46024 Reporting::. 46025 46026 * Look in the service directory for someone who might help you for a 46027 fee. The service directory is found at 46028 `http://www.fsf.org/resources/service'. 46029 46030 For further information, see `http://gcc.gnu.org/faq.html#support'. 46031 46032 46033File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 46034 4603515 Contributing to GCC Development 46036********************************** 46037 46038If you would like to help pretest GCC releases to assure they work well, 46039current development sources are available by SVN (see 46040`http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 46041available for FTP; see `http://gcc.gnu.org/snapshots.html'. 46042 46043 If you would like to work on improvements to GCC, please read the 46044advice at these URLs: 46045 46046 `http://gcc.gnu.org/contribute.html' 46047 `http://gcc.gnu.org/contributewhy.html' 46048 46049for information on how to make useful contributions and avoid 46050duplication of effort. Suggested projects are listed at 46051`http://gcc.gnu.org/projects/'. 46052 46053 46054File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 46055 46056Funding Free Software 46057********************* 46058 46059If you want to have more free software a few years from now, it makes 46060sense for you to help encourage people to contribute funds for its 46061development. The most effective approach known is to encourage 46062commercial redistributors to donate. 46063 46064 Users of free software systems can boost the pace of development by 46065encouraging for-a-fee distributors to donate part of their selling price 46066to free software developers--the Free Software Foundation, and others. 46067 46068 The way to convince distributors to do this is to demand it and expect 46069it from them. So when you compare distributors, judge them partly by 46070how much they give to free software development. Show distributors 46071they must compete to be the one who gives the most. 46072 46073 To make this approach work, you must insist on numbers that you can 46074compare, such as, "We will donate ten dollars to the Frobnitz project 46075for each disk sold." Don't be satisfied with a vague promise, such as 46076"A portion of the profits are donated," since it doesn't give a basis 46077for comparison. 46078 46079 Even a precise fraction "of the profits from this disk" is not very 46080meaningful, since creative accounting and unrelated business decisions 46081can greatly alter what fraction of the sales price counts as profit. 46082If the price you pay is $50, ten percent of the profit is probably less 46083than a dollar; it might be a few cents, or nothing at all. 46084 46085 Some redistributors do development work themselves. This is useful 46086too; but to keep everyone honest, you need to inquire how much they do, 46087and what kind. Some kinds of development make much more long-term 46088difference than others. For example, maintaining a separate version of 46089a program contributes very little; maintaining the standard version of a 46090program for the whole community contributes much. Easy new ports 46091contribute little, since someone else would surely do them; difficult 46092ports such as adding a new CPU to the GNU Compiler Collection 46093contribute more; major new features or packages contribute the most. 46094 46095 By establishing the idea that supporting further development is "the 46096proper thing to do" when distributing free software for a fee, we can 46097assure a steady flow of resources into making more free software. 46098 46099 Copyright (C) 1994 Free Software Foundation, Inc. 46100 Verbatim copying and redistribution of this section is permitted 46101 without royalty; alteration is not permitted. 46102 46103 46104File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 46105 46106The GNU Project and GNU/Linux 46107***************************** 46108 46109The GNU Project was launched in 1984 to develop a complete Unix-like 46110operating system which is free software: the GNU system. (GNU is a 46111recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 46112Variants of the GNU operating system, which use the kernel Linux, are 46113now widely used; though these systems are often referred to as "Linux", 46114they are more accurately called GNU/Linux systems. 46115 46116 For more information, see: 46117 `http://www.gnu.org/' 46118 `http://www.gnu.org/gnu/linux-and-gnu.html' 46119 46120 46121File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 46122 46123GNU General Public License 46124************************** 46125 46126 Version 3, 29 June 2007 46127 46128 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' 46129 46130 Everyone is permitted to copy and distribute verbatim copies of this 46131 license document, but changing it is not allowed. 46132 46133Preamble 46134======== 46135 46136The GNU General Public License is a free, copyleft license for software 46137and other kinds of works. 46138 46139 The licenses for most software and other practical works are designed 46140to take away your freedom to share and change the works. By contrast, 46141the GNU General Public License is intended to guarantee your freedom to 46142share and change all versions of a program-to make sure it remains free 46143software for all its users. We, the Free Software Foundation, use the 46144GNU General Public License for most of our software; it applies also to 46145any other work released this way by its authors. You can apply it to 46146your programs, too. 46147 46148 When we speak of free software, we are referring to freedom, not 46149price. Our General Public Licenses are designed to make sure that you 46150have the freedom to distribute copies of free software (and charge for 46151them if you wish), that you receive source code or can get it if you 46152want it, that you can change the software or use pieces of it in new 46153free programs, and that you know you can do these things. 46154 46155 To protect your rights, we need to prevent others from denying you 46156these rights or asking you to surrender the rights. Therefore, you 46157have certain responsibilities if you distribute copies of the software, 46158or if you modify it: responsibilities to respect the freedom of others. 46159 46160 For example, if you distribute copies of such a program, whether 46161gratis or for a fee, you must pass on to the recipients the same 46162freedoms that you received. You must make sure that they, too, receive 46163or can get the source code. And you must show them these terms so they 46164know their rights. 46165 46166 Developers that use the GNU GPL protect your rights with two steps: 46167(1) assert copyright on the software, and (2) offer you this License 46168giving you legal permission to copy, distribute and/or modify it. 46169 46170 For the developers' and authors' protection, the GPL clearly explains 46171that there is no warranty for this free software. For both users' and 46172authors' sake, the GPL requires that modified versions be marked as 46173changed, so that their problems will not be attributed erroneously to 46174authors of previous versions. 46175 46176 Some devices are designed to deny users access to install or run 46177modified versions of the software inside them, although the 46178manufacturer can do so. This is fundamentally incompatible with the 46179aim of protecting users' freedom to change the software. The 46180systematic pattern of such abuse occurs in the area of products for 46181individuals to use, which is precisely where it is most unacceptable. 46182Therefore, we have designed this version of the GPL to prohibit the 46183practice for those products. If such problems arise substantially in 46184other domains, we stand ready to extend this provision to those domains 46185in future versions of the GPL, as needed to protect the freedom of 46186users. 46187 46188 Finally, every program is threatened constantly by software patents. 46189States should not allow patents to restrict development and use of 46190software on general-purpose computers, but in those that do, we wish to 46191avoid the special danger that patents applied to a free program could 46192make it effectively proprietary. To prevent this, the GPL assures that 46193patents cannot be used to render the program non-free. 46194 46195 The precise terms and conditions for copying, distribution and 46196modification follow. 46197 46198TERMS AND CONDITIONS 46199==================== 46200 46201 0. Definitions. 46202 46203 "This License" refers to version 3 of the GNU General Public 46204 License. 46205 46206 "Copyright" also means copyright-like laws that apply to other 46207 kinds of works, such as semiconductor masks. 46208 46209 "The Program" refers to any copyrightable work licensed under this 46210 License. Each licensee is addressed as "you". "Licensees" and 46211 "recipients" may be individuals or organizations. 46212 46213 To "modify" a work means to copy from or adapt all or part of the 46214 work in a fashion requiring copyright permission, other than the 46215 making of an exact copy. The resulting work is called a "modified 46216 version" of the earlier work or a work "based on" the earlier work. 46217 46218 A "covered work" means either the unmodified Program or a work 46219 based on the Program. 46220 46221 To "propagate" a work means to do anything with it that, without 46222 permission, would make you directly or secondarily liable for 46223 infringement under applicable copyright law, except executing it 46224 on a computer or modifying a private copy. Propagation includes 46225 copying, distribution (with or without modification), making 46226 available to the public, and in some countries other activities as 46227 well. 46228 46229 To "convey" a work means any kind of propagation that enables other 46230 parties to make or receive copies. Mere interaction with a user 46231 through a computer network, with no transfer of a copy, is not 46232 conveying. 46233 46234 An interactive user interface displays "Appropriate Legal Notices" 46235 to the extent that it includes a convenient and prominently visible 46236 feature that (1) displays an appropriate copyright notice, and (2) 46237 tells the user that there is no warranty for the work (except to 46238 the extent that warranties are provided), that licensees may 46239 convey the work under this License, and how to view a copy of this 46240 License. If the interface presents a list of user commands or 46241 options, such as a menu, a prominent item in the list meets this 46242 criterion. 46243 46244 1. Source Code. 46245 46246 The "source code" for a work means the preferred form of the work 46247 for making modifications to it. "Object code" means any 46248 non-source form of a work. 46249 46250 A "Standard Interface" means an interface that either is an 46251 official standard defined by a recognized standards body, or, in 46252 the case of interfaces specified for a particular programming 46253 language, one that is widely used among developers working in that 46254 language. 46255 46256 The "System Libraries" of an executable work include anything, 46257 other than the work as a whole, that (a) is included in the normal 46258 form of packaging a Major Component, but which is not part of that 46259 Major Component, and (b) serves only to enable use of the work 46260 with that Major Component, or to implement a Standard Interface 46261 for which an implementation is available to the public in source 46262 code form. A "Major Component", in this context, means a major 46263 essential component (kernel, window system, and so on) of the 46264 specific operating system (if any) on which the executable work 46265 runs, or a compiler used to produce the work, or an object code 46266 interpreter used to run it. 46267 46268 The "Corresponding Source" for a work in object code form means all 46269 the source code needed to generate, install, and (for an executable 46270 work) run the object code and to modify the work, including 46271 scripts to control those activities. However, it does not include 46272 the work's System Libraries, or general-purpose tools or generally 46273 available free programs which are used unmodified in performing 46274 those activities but which are not part of the work. For example, 46275 Corresponding Source includes interface definition files 46276 associated with source files for the work, and the source code for 46277 shared libraries and dynamically linked subprograms that the work 46278 is specifically designed to require, such as by intimate data 46279 communication or control flow between those subprograms and other 46280 parts of the work. 46281 46282 The Corresponding Source need not include anything that users can 46283 regenerate automatically from other parts of the Corresponding 46284 Source. 46285 46286 The Corresponding Source for a work in source code form is that 46287 same work. 46288 46289 2. Basic Permissions. 46290 46291 All rights granted under this License are granted for the term of 46292 copyright on the Program, and are irrevocable provided the stated 46293 conditions are met. This License explicitly affirms your unlimited 46294 permission to run the unmodified Program. The output from running 46295 a covered work is covered by this License only if the output, 46296 given its content, constitutes a covered work. This License 46297 acknowledges your rights of fair use or other equivalent, as 46298 provided by copyright law. 46299 46300 You may make, run and propagate covered works that you do not 46301 convey, without conditions so long as your license otherwise 46302 remains in force. You may convey covered works to others for the 46303 sole purpose of having them make modifications exclusively for 46304 you, or provide you with facilities for running those works, 46305 provided that you comply with the terms of this License in 46306 conveying all material for which you do not control copyright. 46307 Those thus making or running the covered works for you must do so 46308 exclusively on your behalf, under your direction and control, on 46309 terms that prohibit them from making any copies of your 46310 copyrighted material outside their relationship with you. 46311 46312 Conveying under any other circumstances is permitted solely under 46313 the conditions stated below. Sublicensing is not allowed; section 46314 10 makes it unnecessary. 46315 46316 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 46317 46318 No covered work shall be deemed part of an effective technological 46319 measure under any applicable law fulfilling obligations under 46320 article 11 of the WIPO copyright treaty adopted on 20 December 46321 1996, or similar laws prohibiting or restricting circumvention of 46322 such measures. 46323 46324 When you convey a covered work, you waive any legal power to forbid 46325 circumvention of technological measures to the extent such 46326 circumvention is effected by exercising rights under this License 46327 with respect to the covered work, and you disclaim any intention 46328 to limit operation or modification of the work as a means of 46329 enforcing, against the work's users, your or third parties' legal 46330 rights to forbid circumvention of technological measures. 46331 46332 4. Conveying Verbatim Copies. 46333 46334 You may convey verbatim copies of the Program's source code as you 46335 receive it, in any medium, provided that you conspicuously and 46336 appropriately publish on each copy an appropriate copyright notice; 46337 keep intact all notices stating that this License and any 46338 non-permissive terms added in accord with section 7 apply to the 46339 code; keep intact all notices of the absence of any warranty; and 46340 give all recipients a copy of this License along with the Program. 46341 46342 You may charge any price or no price for each copy that you convey, 46343 and you may offer support or warranty protection for a fee. 46344 46345 5. Conveying Modified Source Versions. 46346 46347 You may convey a work based on the Program, or the modifications to 46348 produce it from the Program, in the form of source code under the 46349 terms of section 4, provided that you also meet all of these 46350 conditions: 46351 46352 a. The work must carry prominent notices stating that you 46353 modified it, and giving a relevant date. 46354 46355 b. The work must carry prominent notices stating that it is 46356 released under this License and any conditions added under 46357 section 7. This requirement modifies the requirement in 46358 section 4 to "keep intact all notices". 46359 46360 c. You must license the entire work, as a whole, under this 46361 License to anyone who comes into possession of a copy. This 46362 License will therefore apply, along with any applicable 46363 section 7 additional terms, to the whole of the work, and all 46364 its parts, regardless of how they are packaged. This License 46365 gives no permission to license the work in any other way, but 46366 it does not invalidate such permission if you have separately 46367 received it. 46368 46369 d. If the work has interactive user interfaces, each must display 46370 Appropriate Legal Notices; however, if the Program has 46371 interactive interfaces that do not display Appropriate Legal 46372 Notices, your work need not make them do so. 46373 46374 A compilation of a covered work with other separate and independent 46375 works, which are not by their nature extensions of the covered 46376 work, and which are not combined with it such as to form a larger 46377 program, in or on a volume of a storage or distribution medium, is 46378 called an "aggregate" if the compilation and its resulting 46379 copyright are not used to limit the access or legal rights of the 46380 compilation's users beyond what the individual works permit. 46381 Inclusion of a covered work in an aggregate does not cause this 46382 License to apply to the other parts of the aggregate. 46383 46384 6. Conveying Non-Source Forms. 46385 46386 You may convey a covered work in object code form under the terms 46387 of sections 4 and 5, provided that you also convey the 46388 machine-readable Corresponding Source under the terms of this 46389 License, in one of these ways: 46390 46391 a. Convey the object code in, or embodied in, a physical product 46392 (including a physical distribution medium), accompanied by the 46393 Corresponding Source fixed on a durable physical medium 46394 customarily used for software interchange. 46395 46396 b. Convey the object code in, or embodied in, a physical product 46397 (including a physical distribution medium), accompanied by a 46398 written offer, valid for at least three years and valid for 46399 as long as you offer spare parts or customer support for that 46400 product model, to give anyone who possesses the object code 46401 either (1) a copy of the Corresponding Source for all the 46402 software in the product that is covered by this License, on a 46403 durable physical medium customarily used for software 46404 interchange, for a price no more than your reasonable cost of 46405 physically performing this conveying of source, or (2) access 46406 to copy the Corresponding Source from a network server at no 46407 charge. 46408 46409 c. Convey individual copies of the object code with a copy of 46410 the written offer to provide the Corresponding Source. This 46411 alternative is allowed only occasionally and noncommercially, 46412 and only if you received the object code with such an offer, 46413 in accord with subsection 6b. 46414 46415 d. Convey the object code by offering access from a designated 46416 place (gratis or for a charge), and offer equivalent access 46417 to the Corresponding Source in the same way through the same 46418 place at no further charge. You need not require recipients 46419 to copy the Corresponding Source along with the object code. 46420 If the place to copy the object code is a network server, the 46421 Corresponding Source may be on a different server (operated 46422 by you or a third party) that supports equivalent copying 46423 facilities, provided you maintain clear directions next to 46424 the object code saying where to find the Corresponding Source. 46425 Regardless of what server hosts the Corresponding Source, you 46426 remain obligated to ensure that it is available for as long 46427 as needed to satisfy these requirements. 46428 46429 e. Convey the object code using peer-to-peer transmission, 46430 provided you inform other peers where the object code and 46431 Corresponding Source of the work are being offered to the 46432 general public at no charge under subsection 6d. 46433 46434 46435 A separable portion of the object code, whose source code is 46436 excluded from the Corresponding Source as a System Library, need 46437 not be included in conveying the object code work. 46438 46439 A "User Product" is either (1) a "consumer product", which means 46440 any tangible personal property which is normally used for personal, 46441 family, or household purposes, or (2) anything designed or sold for 46442 incorporation into a dwelling. In determining whether a product 46443 is a consumer product, doubtful cases shall be resolved in favor of 46444 coverage. For a particular product received by a particular user, 46445 "normally used" refers to a typical or common use of that class of 46446 product, regardless of the status of the particular user or of the 46447 way in which the particular user actually uses, or expects or is 46448 expected to use, the product. A product is a consumer product 46449 regardless of whether the product has substantial commercial, 46450 industrial or non-consumer uses, unless such uses represent the 46451 only significant mode of use of the product. 46452 46453 "Installation Information" for a User Product means any methods, 46454 procedures, authorization keys, or other information required to 46455 install and execute modified versions of a covered work in that 46456 User Product from a modified version of its Corresponding Source. 46457 The information must suffice to ensure that the continued 46458 functioning of the modified object code is in no case prevented or 46459 interfered with solely because modification has been made. 46460 46461 If you convey an object code work under this section in, or with, 46462 or specifically for use in, a User Product, and the conveying 46463 occurs as part of a transaction in which the right of possession 46464 and use of the User Product is transferred to the recipient in 46465 perpetuity or for a fixed term (regardless of how the transaction 46466 is characterized), the Corresponding Source conveyed under this 46467 section must be accompanied by the Installation Information. But 46468 this requirement does not apply if neither you nor any third party 46469 retains the ability to install modified object code on the User 46470 Product (for example, the work has been installed in ROM). 46471 46472 The requirement to provide Installation Information does not 46473 include a requirement to continue to provide support service, 46474 warranty, or updates for a work that has been modified or 46475 installed by the recipient, or for the User Product in which it 46476 has been modified or installed. Access to a network may be denied 46477 when the modification itself materially and adversely affects the 46478 operation of the network or violates the rules and protocols for 46479 communication across the network. 46480 46481 Corresponding Source conveyed, and Installation Information 46482 provided, in accord with this section must be in a format that is 46483 publicly documented (and with an implementation available to the 46484 public in source code form), and must require no special password 46485 or key for unpacking, reading or copying. 46486 46487 7. Additional Terms. 46488 46489 "Additional permissions" are terms that supplement the terms of 46490 this License by making exceptions from one or more of its 46491 conditions. Additional permissions that are applicable to the 46492 entire Program shall be treated as though they were included in 46493 this License, to the extent that they are valid under applicable 46494 law. If additional permissions apply only to part of the Program, 46495 that part may be used separately under those permissions, but the 46496 entire Program remains governed by this License without regard to 46497 the additional permissions. 46498 46499 When you convey a copy of a covered work, you may at your option 46500 remove any additional permissions from that copy, or from any part 46501 of it. (Additional permissions may be written to require their own 46502 removal in certain cases when you modify the work.) You may place 46503 additional permissions on material, added by you to a covered work, 46504 for which you have or can give appropriate copyright permission. 46505 46506 Notwithstanding any other provision of this License, for material 46507 you add to a covered work, you may (if authorized by the copyright 46508 holders of that material) supplement the terms of this License 46509 with terms: 46510 46511 a. Disclaiming warranty or limiting liability differently from 46512 the terms of sections 15 and 16 of this License; or 46513 46514 b. Requiring preservation of specified reasonable legal notices 46515 or author attributions in that material or in the Appropriate 46516 Legal Notices displayed by works containing it; or 46517 46518 c. Prohibiting misrepresentation of the origin of that material, 46519 or requiring that modified versions of such material be 46520 marked in reasonable ways as different from the original 46521 version; or 46522 46523 d. Limiting the use for publicity purposes of names of licensors 46524 or authors of the material; or 46525 46526 e. Declining to grant rights under trademark law for use of some 46527 trade names, trademarks, or service marks; or 46528 46529 f. Requiring indemnification of licensors and authors of that 46530 material by anyone who conveys the material (or modified 46531 versions of it) with contractual assumptions of liability to 46532 the recipient, for any liability that these contractual 46533 assumptions directly impose on those licensors and authors. 46534 46535 All other non-permissive additional terms are considered "further 46536 restrictions" within the meaning of section 10. If the Program as 46537 you received it, or any part of it, contains a notice stating that 46538 it is governed by this License along with a term that is a further 46539 restriction, you may remove that term. If a license document 46540 contains a further restriction but permits relicensing or 46541 conveying under this License, you may add to a covered work 46542 material governed by the terms of that license document, provided 46543 that the further restriction does not survive such relicensing or 46544 conveying. 46545 46546 If you add terms to a covered work in accord with this section, you 46547 must place, in the relevant source files, a statement of the 46548 additional terms that apply to those files, or a notice indicating 46549 where to find the applicable terms. 46550 46551 Additional terms, permissive or non-permissive, may be stated in 46552 the form of a separately written license, or stated as exceptions; 46553 the above requirements apply either way. 46554 46555 8. Termination. 46556 46557 You may not propagate or modify a covered work except as expressly 46558 provided under this License. Any attempt otherwise to propagate or 46559 modify it is void, and will automatically terminate your rights 46560 under this License (including any patent licenses granted under 46561 the third paragraph of section 11). 46562 46563 However, if you cease all violation of this License, then your 46564 license from a particular copyright holder is reinstated (a) 46565 provisionally, unless and until the copyright holder explicitly 46566 and finally terminates your license, and (b) permanently, if the 46567 copyright holder fails to notify you of the violation by some 46568 reasonable means prior to 60 days after the cessation. 46569 46570 Moreover, your license from a particular copyright holder is 46571 reinstated permanently if the copyright holder notifies you of the 46572 violation by some reasonable means, this is the first time you have 46573 received notice of violation of this License (for any work) from 46574 that copyright holder, and you cure the violation prior to 30 days 46575 after your receipt of the notice. 46576 46577 Termination of your rights under this section does not terminate 46578 the licenses of parties who have received copies or rights from 46579 you under this License. If your rights have been terminated and 46580 not permanently reinstated, you do not qualify to receive new 46581 licenses for the same material under section 10. 46582 46583 9. Acceptance Not Required for Having Copies. 46584 46585 You are not required to accept this License in order to receive or 46586 run a copy of the Program. Ancillary propagation of a covered work 46587 occurring solely as a consequence of using peer-to-peer 46588 transmission to receive a copy likewise does not require 46589 acceptance. However, nothing other than this License grants you 46590 permission to propagate or modify any covered work. These actions 46591 infringe copyright if you do not accept this License. Therefore, 46592 by modifying or propagating a covered work, you indicate your 46593 acceptance of this License to do so. 46594 46595 10. Automatic Licensing of Downstream Recipients. 46596 46597 Each time you convey a covered work, the recipient automatically 46598 receives a license from the original licensors, to run, modify and 46599 propagate that work, subject to this License. You are not 46600 responsible for enforcing compliance by third parties with this 46601 License. 46602 46603 An "entity transaction" is a transaction transferring control of an 46604 organization, or substantially all assets of one, or subdividing an 46605 organization, or merging organizations. If propagation of a 46606 covered work results from an entity transaction, each party to that 46607 transaction who receives a copy of the work also receives whatever 46608 licenses to the work the party's predecessor in interest had or 46609 could give under the previous paragraph, plus a right to 46610 possession of the Corresponding Source of the work from the 46611 predecessor in interest, if the predecessor has it or can get it 46612 with reasonable efforts. 46613 46614 You may not impose any further restrictions on the exercise of the 46615 rights granted or affirmed under this License. For example, you 46616 may not impose a license fee, royalty, or other charge for 46617 exercise of rights granted under this License, and you may not 46618 initiate litigation (including a cross-claim or counterclaim in a 46619 lawsuit) alleging that any patent claim is infringed by making, 46620 using, selling, offering for sale, or importing the Program or any 46621 portion of it. 46622 46623 11. Patents. 46624 46625 A "contributor" is a copyright holder who authorizes use under this 46626 License of the Program or a work on which the Program is based. 46627 The work thus licensed is called the contributor's "contributor 46628 version". 46629 46630 A contributor's "essential patent claims" are all patent claims 46631 owned or controlled by the contributor, whether already acquired or 46632 hereafter acquired, that would be infringed by some manner, 46633 permitted by this License, of making, using, or selling its 46634 contributor version, but do not include claims that would be 46635 infringed only as a consequence of further modification of the 46636 contributor version. For purposes of this definition, "control" 46637 includes the right to grant patent sublicenses in a manner 46638 consistent with the requirements of this License. 46639 46640 Each contributor grants you a non-exclusive, worldwide, 46641 royalty-free patent license under the contributor's essential 46642 patent claims, to make, use, sell, offer for sale, import and 46643 otherwise run, modify and propagate the contents of its 46644 contributor version. 46645 46646 In the following three paragraphs, a "patent license" is any 46647 express agreement or commitment, however denominated, not to 46648 enforce a patent (such as an express permission to practice a 46649 patent or covenant not to sue for patent infringement). To 46650 "grant" such a patent license to a party means to make such an 46651 agreement or commitment not to enforce a patent against the party. 46652 46653 If you convey a covered work, knowingly relying on a patent 46654 license, and the Corresponding Source of the work is not available 46655 for anyone to copy, free of charge and under the terms of this 46656 License, through a publicly available network server or other 46657 readily accessible means, then you must either (1) cause the 46658 Corresponding Source to be so available, or (2) arrange to deprive 46659 yourself of the benefit of the patent license for this particular 46660 work, or (3) arrange, in a manner consistent with the requirements 46661 of this License, to extend the patent license to downstream 46662 recipients. "Knowingly relying" means you have actual knowledge 46663 that, but for the patent license, your conveying the covered work 46664 in a country, or your recipient's use of the covered work in a 46665 country, would infringe one or more identifiable patents in that 46666 country that you have reason to believe are valid. 46667 46668 If, pursuant to or in connection with a single transaction or 46669 arrangement, you convey, or propagate by procuring conveyance of, a 46670 covered work, and grant a patent license to some of the parties 46671 receiving the covered work authorizing them to use, propagate, 46672 modify or convey a specific copy of the covered work, then the 46673 patent license you grant is automatically extended to all 46674 recipients of the covered work and works based on it. 46675 46676 A patent license is "discriminatory" if it does not include within 46677 the scope of its coverage, prohibits the exercise of, or is 46678 conditioned on the non-exercise of one or more of the rights that 46679 are specifically granted under this License. You may not convey a 46680 covered work if you are a party to an arrangement with a third 46681 party that is in the business of distributing software, under 46682 which you make payment to the third party based on the extent of 46683 your activity of conveying the work, and under which the third 46684 party grants, to any of the parties who would receive the covered 46685 work from you, a discriminatory patent license (a) in connection 46686 with copies of the covered work conveyed by you (or copies made 46687 from those copies), or (b) primarily for and in connection with 46688 specific products or compilations that contain the covered work, 46689 unless you entered into that arrangement, or that patent license 46690 was granted, prior to 28 March 2007. 46691 46692 Nothing in this License shall be construed as excluding or limiting 46693 any implied license or other defenses to infringement that may 46694 otherwise be available to you under applicable patent law. 46695 46696 12. No Surrender of Others' Freedom. 46697 46698 If conditions are imposed on you (whether by court order, 46699 agreement or otherwise) that contradict the conditions of this 46700 License, they do not excuse you from the conditions of this 46701 License. If you cannot convey a covered work so as to satisfy 46702 simultaneously your obligations under this License and any other 46703 pertinent obligations, then as a consequence you may not convey it 46704 at all. For example, if you agree to terms that obligate you to 46705 collect a royalty for further conveying from those to whom you 46706 convey the Program, the only way you could satisfy both those 46707 terms and this License would be to refrain entirely from conveying 46708 the Program. 46709 46710 13. Use with the GNU Affero General Public License. 46711 46712 Notwithstanding any other provision of this License, you have 46713 permission to link or combine any covered work with a work licensed 46714 under version 3 of the GNU Affero General Public License into a 46715 single combined work, and to convey the resulting work. The terms 46716 of this License will continue to apply to the part which is the 46717 covered work, but the special requirements of the GNU Affero 46718 General Public License, section 13, concerning interaction through 46719 a network will apply to the combination as such. 46720 46721 14. Revised Versions of this License. 46722 46723 The Free Software Foundation may publish revised and/or new 46724 versions of the GNU General Public License from time to time. 46725 Such new versions will be similar in spirit to the present 46726 version, but may differ in detail to address new problems or 46727 concerns. 46728 46729 Each version is given a distinguishing version number. If the 46730 Program specifies that a certain numbered version of the GNU 46731 General Public License "or any later version" applies to it, you 46732 have the option of following the terms and conditions either of 46733 that numbered version or of any later version published by the 46734 Free Software Foundation. If the Program does not specify a 46735 version number of the GNU General Public License, you may choose 46736 any version ever published by the Free Software Foundation. 46737 46738 If the Program specifies that a proxy can decide which future 46739 versions of the GNU General Public License can be used, that 46740 proxy's public statement of acceptance of a version permanently 46741 authorizes you to choose that version for the Program. 46742 46743 Later license versions may give you additional or different 46744 permissions. However, no additional obligations are imposed on any 46745 author or copyright holder as a result of your choosing to follow a 46746 later version. 46747 46748 15. Disclaimer of Warranty. 46749 46750 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 46751 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 46752 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 46753 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 46754 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 46755 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 46756 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 46757 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 46758 NECESSARY SERVICING, REPAIR OR CORRECTION. 46759 46760 16. Limitation of Liability. 46761 46762 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 46763 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 46764 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU 46765 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 46766 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 46767 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 46768 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 46769 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 46770 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 46771 THE POSSIBILITY OF SUCH DAMAGES. 46772 46773 17. Interpretation of Sections 15 and 16. 46774 46775 If the disclaimer of warranty and limitation of liability provided 46776 above cannot be given local legal effect according to their terms, 46777 reviewing courts shall apply local law that most closely 46778 approximates an absolute waiver of all civil liability in 46779 connection with the Program, unless a warranty or assumption of 46780 liability accompanies a copy of the Program in return for a fee. 46781 46782 46783END OF TERMS AND CONDITIONS 46784=========================== 46785 46786How to Apply These Terms to Your New Programs 46787============================================= 46788 46789If you develop a new program, and you want it to be of the greatest 46790possible use to the public, the best way to achieve this is to make it 46791free software which everyone can redistribute and change under these 46792terms. 46793 46794 To do so, attach the following notices to the program. It is safest 46795to attach them to the start of each source file to most effectively 46796state the exclusion of warranty; and each file should have at least the 46797"copyright" line and a pointer to where the full notice is found. 46798 46799 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 46800 Copyright (C) YEAR NAME OF AUTHOR 46801 46802 This program is free software: you can redistribute it and/or modify 46803 it under the terms of the GNU General Public License as published by 46804 the Free Software Foundation, either version 3 of the License, or (at 46805 your option) any later version. 46806 46807 This program is distributed in the hope that it will be useful, but 46808 WITHOUT ANY WARRANTY; without even the implied warranty of 46809 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 46810 General Public License for more details. 46811 46812 You should have received a copy of the GNU General Public License 46813 along with this program. If not, see `http://www.gnu.org/licenses/'. 46814 46815 Also add information on how to contact you by electronic and paper 46816mail. 46817 46818 If the program does terminal interaction, make it output a short 46819notice like this when it starts in an interactive mode: 46820 46821 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 46822 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 46823 This is free software, and you are welcome to redistribute it 46824 under certain conditions; type `show c' for details. 46825 46826 The hypothetical commands `show w' and `show c' should show the 46827appropriate parts of the General Public License. Of course, your 46828program's commands might be different; for a GUI interface, you would 46829use an "about box". 46830 46831 You should also get your employer (if you work as a programmer) or 46832school, if any, to sign a "copyright disclaimer" for the program, if 46833necessary. For more information on this, and how to apply and follow 46834the GNU GPL, see `http://www.gnu.org/licenses/'. 46835 46836 The GNU General Public License does not permit incorporating your 46837program into proprietary programs. If your program is a subroutine 46838library, you may consider it more useful to permit linking proprietary 46839applications with the library. If this is what you want to do, use the 46840GNU Lesser General Public License instead of this License. But first, 46841please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. 46842 46843 46844File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 46845 46846GNU Free Documentation License 46847****************************** 46848 46849 Version 1.3, 3 November 2008 46850 46851 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 46852 `http://fsf.org/' 46853 46854 Everyone is permitted to copy and distribute verbatim copies 46855 of this license document, but changing it is not allowed. 46856 46857 0. PREAMBLE 46858 46859 The purpose of this License is to make a manual, textbook, or other 46860 functional and useful document "free" in the sense of freedom: to 46861 assure everyone the effective freedom to copy and redistribute it, 46862 with or without modifying it, either commercially or 46863 noncommercially. Secondarily, this License preserves for the 46864 author and publisher a way to get credit for their work, while not 46865 being considered responsible for modifications made by others. 46866 46867 This License is a kind of "copyleft", which means that derivative 46868 works of the document must themselves be free in the same sense. 46869 It complements the GNU General Public License, which is a copyleft 46870 license designed for free software. 46871 46872 We have designed this License in order to use it for manuals for 46873 free software, because free software needs free documentation: a 46874 free program should come with manuals providing the same freedoms 46875 that the software does. But this License is not limited to 46876 software manuals; it can be used for any textual work, regardless 46877 of subject matter or whether it is published as a printed book. 46878 We recommend this License principally for works whose purpose is 46879 instruction or reference. 46880 46881 1. APPLICABILITY AND DEFINITIONS 46882 46883 This License applies to any manual or other work, in any medium, 46884 that contains a notice placed by the copyright holder saying it 46885 can be distributed under the terms of this License. Such a notice 46886 grants a world-wide, royalty-free license, unlimited in duration, 46887 to use that work under the conditions stated herein. The 46888 "Document", below, refers to any such manual or work. Any member 46889 of the public is a licensee, and is addressed as "you". You 46890 accept the license if you copy, modify or distribute the work in a 46891 way requiring permission under copyright law. 46892 46893 A "Modified Version" of the Document means any work containing the 46894 Document or a portion of it, either copied verbatim, or with 46895 modifications and/or translated into another language. 46896 46897 A "Secondary Section" is a named appendix or a front-matter section 46898 of the Document that deals exclusively with the relationship of the 46899 publishers or authors of the Document to the Document's overall 46900 subject (or to related matters) and contains nothing that could 46901 fall directly within that overall subject. (Thus, if the Document 46902 is in part a textbook of mathematics, a Secondary Section may not 46903 explain any mathematics.) The relationship could be a matter of 46904 historical connection with the subject or with related matters, or 46905 of legal, commercial, philosophical, ethical or political position 46906 regarding them. 46907 46908 The "Invariant Sections" are certain Secondary Sections whose 46909 titles are designated, as being those of Invariant Sections, in 46910 the notice that says that the Document is released under this 46911 License. If a section does not fit the above definition of 46912 Secondary then it is not allowed to be designated as Invariant. 46913 The Document may contain zero Invariant Sections. If the Document 46914 does not identify any Invariant Sections then there are none. 46915 46916 The "Cover Texts" are certain short passages of text that are 46917 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 46918 that says that the Document is released under this License. A 46919 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 46920 be at most 25 words. 46921 46922 A "Transparent" copy of the Document means a machine-readable copy, 46923 represented in a format whose specification is available to the 46924 general public, that is suitable for revising the document 46925 straightforwardly with generic text editors or (for images 46926 composed of pixels) generic paint programs or (for drawings) some 46927 widely available drawing editor, and that is suitable for input to 46928 text formatters or for automatic translation to a variety of 46929 formats suitable for input to text formatters. A copy made in an 46930 otherwise Transparent file format whose markup, or absence of 46931 markup, has been arranged to thwart or discourage subsequent 46932 modification by readers is not Transparent. An image format is 46933 not Transparent if used for any substantial amount of text. A 46934 copy that is not "Transparent" is called "Opaque". 46935 46936 Examples of suitable formats for Transparent copies include plain 46937 ASCII without markup, Texinfo input format, LaTeX input format, 46938 SGML or XML using a publicly available DTD, and 46939 standard-conforming simple HTML, PostScript or PDF designed for 46940 human modification. Examples of transparent image formats include 46941 PNG, XCF and JPG. Opaque formats include proprietary formats that 46942 can be read and edited only by proprietary word processors, SGML or 46943 XML for which the DTD and/or processing tools are not generally 46944 available, and the machine-generated HTML, PostScript or PDF 46945 produced by some word processors for output purposes only. 46946 46947 The "Title Page" means, for a printed book, the title page itself, 46948 plus such following pages as are needed to hold, legibly, the 46949 material this License requires to appear in the title page. For 46950 works in formats which do not have any title page as such, "Title 46951 Page" means the text near the most prominent appearance of the 46952 work's title, preceding the beginning of the body of the text. 46953 46954 The "publisher" means any person or entity that distributes copies 46955 of the Document to the public. 46956 46957 A section "Entitled XYZ" means a named subunit of the Document 46958 whose title either is precisely XYZ or contains XYZ in parentheses 46959 following text that translates XYZ in another language. (Here XYZ 46960 stands for a specific section name mentioned below, such as 46961 "Acknowledgements", "Dedications", "Endorsements", or "History".) 46962 To "Preserve the Title" of such a section when you modify the 46963 Document means that it remains a section "Entitled XYZ" according 46964 to this definition. 46965 46966 The Document may include Warranty Disclaimers next to the notice 46967 which states that this License applies to the Document. These 46968 Warranty Disclaimers are considered to be included by reference in 46969 this License, but only as regards disclaiming warranties: any other 46970 implication that these Warranty Disclaimers may have is void and 46971 has no effect on the meaning of this License. 46972 46973 2. VERBATIM COPYING 46974 46975 You may copy and distribute the Document in any medium, either 46976 commercially or noncommercially, provided that this License, the 46977 copyright notices, and the license notice saying this License 46978 applies to the Document are reproduced in all copies, and that you 46979 add no other conditions whatsoever to those of this License. You 46980 may not use technical measures to obstruct or control the reading 46981 or further copying of the copies you make or distribute. However, 46982 you may accept compensation in exchange for copies. If you 46983 distribute a large enough number of copies you must also follow 46984 the conditions in section 3. 46985 46986 You may also lend copies, under the same conditions stated above, 46987 and you may publicly display copies. 46988 46989 3. COPYING IN QUANTITY 46990 46991 If you publish printed copies (or copies in media that commonly 46992 have printed covers) of the Document, numbering more than 100, and 46993 the Document's license notice requires Cover Texts, you must 46994 enclose the copies in covers that carry, clearly and legibly, all 46995 these Cover Texts: Front-Cover Texts on the front cover, and 46996 Back-Cover Texts on the back cover. Both covers must also clearly 46997 and legibly identify you as the publisher of these copies. The 46998 front cover must present the full title with all words of the 46999 title equally prominent and visible. You may add other material 47000 on the covers in addition. Copying with changes limited to the 47001 covers, as long as they preserve the title of the Document and 47002 satisfy these conditions, can be treated as verbatim copying in 47003 other respects. 47004 47005 If the required texts for either cover are too voluminous to fit 47006 legibly, you should put the first ones listed (as many as fit 47007 reasonably) on the actual cover, and continue the rest onto 47008 adjacent pages. 47009 47010 If you publish or distribute Opaque copies of the Document 47011 numbering more than 100, you must either include a 47012 machine-readable Transparent copy along with each Opaque copy, or 47013 state in or with each Opaque copy a computer-network location from 47014 which the general network-using public has access to download 47015 using public-standard network protocols a complete Transparent 47016 copy of the Document, free of added material. If you use the 47017 latter option, you must take reasonably prudent steps, when you 47018 begin distribution of Opaque copies in quantity, to ensure that 47019 this Transparent copy will remain thus accessible at the stated 47020 location until at least one year after the last time you 47021 distribute an Opaque copy (directly or through your agents or 47022 retailers) of that edition to the public. 47023 47024 It is requested, but not required, that you contact the authors of 47025 the Document well before redistributing any large number of 47026 copies, to give them a chance to provide you with an updated 47027 version of the Document. 47028 47029 4. MODIFICATIONS 47030 47031 You may copy and distribute a Modified Version of the Document 47032 under the conditions of sections 2 and 3 above, provided that you 47033 release the Modified Version under precisely this License, with 47034 the Modified Version filling the role of the Document, thus 47035 licensing distribution and modification of the Modified Version to 47036 whoever possesses a copy of it. In addition, you must do these 47037 things in the Modified Version: 47038 47039 A. Use in the Title Page (and on the covers, if any) a title 47040 distinct from that of the Document, and from those of 47041 previous versions (which should, if there were any, be listed 47042 in the History section of the Document). You may use the 47043 same title as a previous version if the original publisher of 47044 that version gives permission. 47045 47046 B. List on the Title Page, as authors, one or more persons or 47047 entities responsible for authorship of the modifications in 47048 the Modified Version, together with at least five of the 47049 principal authors of the Document (all of its principal 47050 authors, if it has fewer than five), unless they release you 47051 from this requirement. 47052 47053 C. State on the Title page the name of the publisher of the 47054 Modified Version, as the publisher. 47055 47056 D. Preserve all the copyright notices of the Document. 47057 47058 E. Add an appropriate copyright notice for your modifications 47059 adjacent to the other copyright notices. 47060 47061 F. Include, immediately after the copyright notices, a license 47062 notice giving the public permission to use the Modified 47063 Version under the terms of this License, in the form shown in 47064 the Addendum below. 47065 47066 G. Preserve in that license notice the full lists of Invariant 47067 Sections and required Cover Texts given in the Document's 47068 license notice. 47069 47070 H. Include an unaltered copy of this License. 47071 47072 I. Preserve the section Entitled "History", Preserve its Title, 47073 and add to it an item stating at least the title, year, new 47074 authors, and publisher of the Modified Version as given on 47075 the Title Page. If there is no section Entitled "History" in 47076 the Document, create one stating the title, year, authors, 47077 and publisher of the Document as given on its Title Page, 47078 then add an item describing the Modified Version as stated in 47079 the previous sentence. 47080 47081 J. Preserve the network location, if any, given in the Document 47082 for public access to a Transparent copy of the Document, and 47083 likewise the network locations given in the Document for 47084 previous versions it was based on. These may be placed in 47085 the "History" section. You may omit a network location for a 47086 work that was published at least four years before the 47087 Document itself, or if the original publisher of the version 47088 it refers to gives permission. 47089 47090 K. For any section Entitled "Acknowledgements" or "Dedications", 47091 Preserve the Title of the section, and preserve in the 47092 section all the substance and tone of each of the contributor 47093 acknowledgements and/or dedications given therein. 47094 47095 L. Preserve all the Invariant Sections of the Document, 47096 unaltered in their text and in their titles. Section numbers 47097 or the equivalent are not considered part of the section 47098 titles. 47099 47100 M. Delete any section Entitled "Endorsements". Such a section 47101 may not be included in the Modified Version. 47102 47103 N. Do not retitle any existing section to be Entitled 47104 "Endorsements" or to conflict in title with any Invariant 47105 Section. 47106 47107 O. Preserve any Warranty Disclaimers. 47108 47109 If the Modified Version includes new front-matter sections or 47110 appendices that qualify as Secondary Sections and contain no 47111 material copied from the Document, you may at your option 47112 designate some or all of these sections as invariant. To do this, 47113 add their titles to the list of Invariant Sections in the Modified 47114 Version's license notice. These titles must be distinct from any 47115 other section titles. 47116 47117 You may add a section Entitled "Endorsements", provided it contains 47118 nothing but endorsements of your Modified Version by various 47119 parties--for example, statements of peer review or that the text 47120 has been approved by an organization as the authoritative 47121 definition of a standard. 47122 47123 You may add a passage of up to five words as a Front-Cover Text, 47124 and a passage of up to 25 words as a Back-Cover Text, to the end 47125 of the list of Cover Texts in the Modified Version. Only one 47126 passage of Front-Cover Text and one of Back-Cover Text may be 47127 added by (or through arrangements made by) any one entity. If the 47128 Document already includes a cover text for the same cover, 47129 previously added by you or by arrangement made by the same entity 47130 you are acting on behalf of, you may not add another; but you may 47131 replace the old one, on explicit permission from the previous 47132 publisher that added the old one. 47133 47134 The author(s) and publisher(s) of the Document do not by this 47135 License give permission to use their names for publicity for or to 47136 assert or imply endorsement of any Modified Version. 47137 47138 5. COMBINING DOCUMENTS 47139 47140 You may combine the Document with other documents released under 47141 this License, under the terms defined in section 4 above for 47142 modified versions, provided that you include in the combination 47143 all of the Invariant Sections of all of the original documents, 47144 unmodified, and list them all as Invariant Sections of your 47145 combined work in its license notice, and that you preserve all 47146 their Warranty Disclaimers. 47147 47148 The combined work need only contain one copy of this License, and 47149 multiple identical Invariant Sections may be replaced with a single 47150 copy. If there are multiple Invariant Sections with the same name 47151 but different contents, make the title of each such section unique 47152 by adding at the end of it, in parentheses, the name of the 47153 original author or publisher of that section if known, or else a 47154 unique number. Make the same adjustment to the section titles in 47155 the list of Invariant Sections in the license notice of the 47156 combined work. 47157 47158 In the combination, you must combine any sections Entitled 47159 "History" in the various original documents, forming one section 47160 Entitled "History"; likewise combine any sections Entitled 47161 "Acknowledgements", and any sections Entitled "Dedications". You 47162 must delete all sections Entitled "Endorsements." 47163 47164 6. COLLECTIONS OF DOCUMENTS 47165 47166 You may make a collection consisting of the Document and other 47167 documents released under this License, and replace the individual 47168 copies of this License in the various documents with a single copy 47169 that is included in the collection, provided that you follow the 47170 rules of this License for verbatim copying of each of the 47171 documents in all other respects. 47172 47173 You may extract a single document from such a collection, and 47174 distribute it individually under this License, provided you insert 47175 a copy of this License into the extracted document, and follow 47176 this License in all other respects regarding verbatim copying of 47177 that document. 47178 47179 7. AGGREGATION WITH INDEPENDENT WORKS 47180 47181 A compilation of the Document or its derivatives with other 47182 separate and independent documents or works, in or on a volume of 47183 a storage or distribution medium, is called an "aggregate" if the 47184 copyright resulting from the compilation is not used to limit the 47185 legal rights of the compilation's users beyond what the individual 47186 works permit. When the Document is included in an aggregate, this 47187 License does not apply to the other works in the aggregate which 47188 are not themselves derivative works of the Document. 47189 47190 If the Cover Text requirement of section 3 is applicable to these 47191 copies of the Document, then if the Document is less than one half 47192 of the entire aggregate, the Document's Cover Texts may be placed 47193 on covers that bracket the Document within the aggregate, or the 47194 electronic equivalent of covers if the Document is in electronic 47195 form. Otherwise they must appear on printed covers that bracket 47196 the whole aggregate. 47197 47198 8. TRANSLATION 47199 47200 Translation is considered a kind of modification, so you may 47201 distribute translations of the Document under the terms of section 47202 4. Replacing Invariant Sections with translations requires special 47203 permission from their copyright holders, but you may include 47204 translations of some or all Invariant Sections in addition to the 47205 original versions of these Invariant Sections. You may include a 47206 translation of this License, and all the license notices in the 47207 Document, and any Warranty Disclaimers, provided that you also 47208 include the original English version of this License and the 47209 original versions of those notices and disclaimers. In case of a 47210 disagreement between the translation and the original version of 47211 this License or a notice or disclaimer, the original version will 47212 prevail. 47213 47214 If a section in the Document is Entitled "Acknowledgements", 47215 "Dedications", or "History", the requirement (section 4) to 47216 Preserve its Title (section 1) will typically require changing the 47217 actual title. 47218 47219 9. TERMINATION 47220 47221 You may not copy, modify, sublicense, or distribute the Document 47222 except as expressly provided under this License. Any attempt 47223 otherwise to copy, modify, sublicense, or distribute it is void, 47224 and will automatically terminate your rights under this License. 47225 47226 However, if you cease all violation of this License, then your 47227 license from a particular copyright holder is reinstated (a) 47228 provisionally, unless and until the copyright holder explicitly 47229 and finally terminates your license, and (b) permanently, if the 47230 copyright holder fails to notify you of the violation by some 47231 reasonable means prior to 60 days after the cessation. 47232 47233 Moreover, your license from a particular copyright holder is 47234 reinstated permanently if the copyright holder notifies you of the 47235 violation by some reasonable means, this is the first time you have 47236 received notice of violation of this License (for any work) from 47237 that copyright holder, and you cure the violation prior to 30 days 47238 after your receipt of the notice. 47239 47240 Termination of your rights under this section does not terminate 47241 the licenses of parties who have received copies or rights from 47242 you under this License. If your rights have been terminated and 47243 not permanently reinstated, receipt of a copy of some or all of 47244 the same material does not give you any rights to use it. 47245 47246 10. FUTURE REVISIONS OF THIS LICENSE 47247 47248 The Free Software Foundation may publish new, revised versions of 47249 the GNU Free Documentation License from time to time. Such new 47250 versions will be similar in spirit to the present version, but may 47251 differ in detail to address new problems or concerns. See 47252 `http://www.gnu.org/copyleft/'. 47253 47254 Each version of the License is given a distinguishing version 47255 number. If the Document specifies that a particular numbered 47256 version of this License "or any later version" applies to it, you 47257 have the option of following the terms and conditions either of 47258 that specified version or of any later version that has been 47259 published (not as a draft) by the Free Software Foundation. If 47260 the Document does not specify a version number of this License, 47261 you may choose any version ever published (not as a draft) by the 47262 Free Software Foundation. If the Document specifies that a proxy 47263 can decide which future versions of this License can be used, that 47264 proxy's public statement of acceptance of a version permanently 47265 authorizes you to choose that version for the Document. 47266 47267 11. RELICENSING 47268 47269 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 47270 World Wide Web server that publishes copyrightable works and also 47271 provides prominent facilities for anybody to edit those works. A 47272 public wiki that anybody can edit is an example of such a server. 47273 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 47274 site means any set of copyrightable works thus published on the MMC 47275 site. 47276 47277 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 47278 license published by Creative Commons Corporation, a not-for-profit 47279 corporation with a principal place of business in San Francisco, 47280 California, as well as future copyleft versions of that license 47281 published by that same organization. 47282 47283 "Incorporate" means to publish or republish a Document, in whole or 47284 in part, as part of another Document. 47285 47286 An MMC is "eligible for relicensing" if it is licensed under this 47287 License, and if all works that were first published under this 47288 License somewhere other than this MMC, and subsequently 47289 incorporated in whole or in part into the MMC, (1) had no cover 47290 texts or invariant sections, and (2) were thus incorporated prior 47291 to November 1, 2008. 47292 47293 The operator of an MMC Site may republish an MMC contained in the 47294 site under CC-BY-SA on the same site at any time before August 1, 47295 2009, provided the MMC is eligible for relicensing. 47296 47297 47298ADDENDUM: How to use this License for your documents 47299==================================================== 47300 47301To use this License in a document you have written, include a copy of 47302the License in the document and put the following copyright and license 47303notices just after the title page: 47304 47305 Copyright (C) YEAR YOUR NAME. 47306 Permission is granted to copy, distribute and/or modify this document 47307 under the terms of the GNU Free Documentation License, Version 1.3 47308 or any later version published by the Free Software Foundation; 47309 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 47310 Texts. A copy of the license is included in the section entitled ``GNU 47311 Free Documentation License''. 47312 47313 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 47314replace the "with...Texts." line with this: 47315 47316 with the Invariant Sections being LIST THEIR TITLES, with 47317 the Front-Cover Texts being LIST, and with the Back-Cover Texts 47318 being LIST. 47319 47320 If you have Invariant Sections without Cover Texts, or some other 47321combination of the three, merge those two alternatives to suit the 47322situation. 47323 47324 If your document contains nontrivial examples of program code, we 47325recommend releasing these examples in parallel under your choice of 47326free software license, such as the GNU General Public License, to 47327permit their use in free software. 47328 47329 47330File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 47331 47332Contributors to GCC 47333******************* 47334 47335The GCC project would like to thank its many contributors. Without 47336them the project would not have been nearly as successful as it has 47337been. Any omissions in this list are accidental. Feel free to contact 47338<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or 47339some of your contributions are not listed. Please keep this list in 47340alphabetical order. 47341 47342 * Analog Devices helped implement the support for complex data types 47343 and iterators. 47344 47345 * John David Anglin for threading-related fixes and improvements to 47346 libstdc++-v3, and the HP-UX port. 47347 47348 * James van Artsdalen wrote the code that makes efficient use of the 47349 Intel 80387 register stack. 47350 47351 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 47352 Series port. 47353 47354 * Alasdair Baird for various bug fixes. 47355 47356 * Giovanni Bajo for analyzing lots of complicated C++ problem 47357 reports. 47358 47359 * Peter Barada for his work to improve code generation for new 47360 ColdFire cores. 47361 47362 * Gerald Baumgartner added the signature extension to the C++ front 47363 end. 47364 47365 * Godmar Back for his Java improvements and encouragement. 47366 47367 * Scott Bambrough for help porting the Java compiler. 47368 47369 * Wolfgang Bangerth for processing tons of bug reports. 47370 47371 * Jon Beniston for his Microsoft Windows port of Java and port to 47372 Lattice Mico32. 47373 47374 * Daniel Berlin for better DWARF2 support, faster/better 47375 optimizations, improved alias analysis, plus migrating GCC to 47376 Bugzilla. 47377 47378 * Geoff Berry for his Java object serialization work and various 47379 patches. 47380 47381 * David Binderman tests weekly snapshots of GCC trunk against Fedora 47382 Rawhide for several architectures. 47383 47384 * Laurynas Biveinis for memory management work and DJGPP port fixes. 47385 47386 * Uros Bizjak for the implementation of x87 math built-in functions 47387 and for various middle end and i386 back end improvements and bug 47388 fixes. 47389 47390 * Eric Blake for helping to make GCJ and libgcj conform to the 47391 specifications. 47392 47393 * Janne Blomqvist for contributions to GNU Fortran. 47394 47395 * Segher Boessenkool for various fixes. 47396 47397 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 47398 other Java work. 47399 47400 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 47401 miscellaneous clean-ups. 47402 47403 * Steven Bosscher for integrating the GNU Fortran front end into GCC 47404 and for contributing to the tree-ssa branch. 47405 47406 * Eric Botcazou for fixing middle- and backend bugs left and right. 47407 47408 * Per Bothner for his direction via the steering committee and 47409 various improvements to the infrastructure for supporting new 47410 languages. Chill front end implementation. Initial 47411 implementations of cpplib, fix-header, config.guess, libio, and 47412 past C++ library (libg++) maintainer. Dreaming up, designing and 47413 implementing much of GCJ. 47414 47415 * Devon Bowen helped port GCC to the Tahoe. 47416 47417 * Don Bowman for mips-vxworks contributions. 47418 47419 * Dave Brolley for work on cpplib and Chill. 47420 47421 * Paul Brook for work on the ARM architecture and maintaining GNU 47422 Fortran. 47423 47424 * Robert Brown implemented the support for Encore 32000 systems. 47425 47426 * Christian Bruel for improvements to local store elimination. 47427 47428 * Herman A.J. ten Brugge for various fixes. 47429 47430 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 47431 FAQ. 47432 47433 * Joe Buck for his direction via the steering committee from its 47434 creation to 2013. 47435 47436 * Craig Burley for leadership of the G77 Fortran effort. 47437 47438 * Stephan Buys for contributing Doxygen notes for libstdc++. 47439 47440 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 47441 to the C++ strings, streambufs and formatted I/O, hard detective 47442 work on the frustrating localization issues, and keeping up with 47443 the problem reports. 47444 47445 * John Carr for his alias work, SPARC hacking, infrastructure 47446 improvements, previous contributions to the steering committee, 47447 loop optimizations, etc. 47448 47449 * Stephane Carrez for 68HC11 and 68HC12 ports. 47450 47451 * Steve Chamberlain for support for the Renesas SH and H8 processors 47452 and the PicoJava processor, and for GCJ config fixes. 47453 47454 * Glenn Chambers for help with the GCJ FAQ. 47455 47456 * John-Marc Chandonia for various libgcj patches. 47457 47458 * Denis Chertykov for contributing and maintaining the AVR port, the 47459 first GCC port for an 8-bit architecture. 47460 47461 * Scott Christley for his Objective-C contributions. 47462 47463 * Eric Christopher for his Java porting help and clean-ups. 47464 47465 * Branko Cibej for more warning contributions. 47466 47467 * The GNU Classpath project for all of their merged runtime code. 47468 47469 * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work, 47470 `--help', and other random hacking. 47471 47472 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 47473 47474 * R. Kelley Cook for making GCC buildable from a read-only directory 47475 as well as other miscellaneous build process and documentation 47476 clean-ups. 47477 47478 * Ralf Corsepius for SH testing and minor bug fixing. 47479 47480 * Stan Cox for care and feeding of the x86 port and lots of behind 47481 the scenes hacking. 47482 47483 * Alex Crain provided changes for the 3b1. 47484 47485 * Ian Dall for major improvements to the NS32k port. 47486 47487 * Paul Dale for his work to add uClinux platform support to the m68k 47488 backend. 47489 47490 * Dario Dariol contributed the four varieties of sample programs 47491 that print a copy of their source. 47492 47493 * Russell Davidson for fstream and stringstream fixes in libstdc++. 47494 47495 * Bud Davis for work on the G77 and GNU Fortran compilers. 47496 47497 * Mo DeJong for GCJ and libgcj bug fixes. 47498 47499 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 47500 various bug fixes, and the M32C, MeP, MSP430, and RL78 ports. 47501 47502 * Arnaud Desitter for helping to debug GNU Fortran. 47503 47504 * Gabriel Dos Reis for contributions to G++, contributions and 47505 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 47506 including `valarray<>', `complex<>', maintaining the numerics 47507 library (including that pesky `<limits>' :-) and keeping 47508 up-to-date anything to do with numbers. 47509 47510 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 47511 ISO C99 support, CFG dumping support, etc., plus support of the 47512 C++ runtime libraries including for all kinds of C interface 47513 issues, contributing and maintaining `complex<>', sanity checking 47514 and disbursement, configuration architecture, libio maintenance, 47515 and early math work. 47516 47517 * Franc,ois Dumont for his work on libstdc++-v3, especially 47518 maintaining and improving `debug-mode' and associative and 47519 unordered containers. 47520 47521 * Zdenek Dvorak for a new loop unroller and various fixes. 47522 47523 * Michael Eager for his work on the Xilinx MicroBlaze port. 47524 47525 * Richard Earnshaw for his ongoing work with the ARM. 47526 47527 * David Edelsohn for his direction via the steering committee, 47528 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 47529 loop changes, doing the entire AIX port of libstdc++ with his bare 47530 hands, and for ensuring GCC properly keeps working on AIX. 47531 47532 * Kevin Ediger for the floating point formatting of num_put::do_put 47533 in libstdc++. 47534 47535 * Phil Edwards for libstdc++ work including configuration hackery, 47536 documentation maintainer, chief breaker of the web pages, the 47537 occasional iostream bug fix, and work on shared library symbol 47538 versioning. 47539 47540 * Paul Eggert for random hacking all over GCC. 47541 47542 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 47543 configuration support for locales and fstream-related fixes. 47544 47545 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 47546 iostreams. 47547 47548 * Christian Ehrhardt for dealing with bug reports. 47549 47550 * Ben Elliston for his work to move the Objective-C runtime into its 47551 own subdirectory and for his work on autoconf. 47552 47553 * Revital Eres for work on the PowerPC 750CL port. 47554 47555 * Marc Espie for OpenBSD support. 47556 47557 * Doug Evans for much of the global optimization framework, arc, 47558 m32r, and SPARC work. 47559 47560 * Christopher Faylor for his work on the Cygwin port and for caring 47561 and feeding the gcc.gnu.org box and saving its users tons of spam. 47562 47563 * Fred Fish for BeOS support and Ada fixes. 47564 47565 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 47566 47567 * Peter Gerwinski for various bug fixes and the Pascal front end. 47568 47569 * Kaveh R. Ghazi for his direction via the steering committee, 47570 amazing work to make `-W -Wall -W* -Werror' useful, and testing 47571 GCC on a plethora of platforms. Kaveh extends his gratitude to 47572 the CAIP Center at Rutgers University for providing him with 47573 computing resources to work on Free Software from the late 1980s 47574 to 2010. 47575 47576 * John Gilmore for a donation to the FSF earmarked improving GNU 47577 Java. 47578 47579 * Judy Goldberg for c++ contributions. 47580 47581 * Torbjorn Granlund for various fixes and the c-torture testsuite, 47582 multiply- and divide-by-constant optimization, improved long long 47583 support, improved leaf function register allocation, and his 47584 direction via the steering committee. 47585 47586 * Jonny Grant for improvements to `collect2's' `--help' 47587 documentation. 47588 47589 * Anthony Green for his `-Os' contributions, the moxie port, and 47590 Java front end work. 47591 47592 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 47593 Java code. 47594 47595 * Michael K. Gschwind contributed the port to the PDP-11. 47596 47597 * Richard Biener for his ongoing middle-end contributions and bug 47598 fixes and for release management. 47599 47600 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 47601 the support for Dwarf symbolic debugging information, and much of 47602 the support for System V Release 4. He has also worked heavily on 47603 the Intel 386 and 860 support. 47604 47605 * Sumanth Gundapaneni for contributing the CR16 port. 47606 47607 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 47608 GCSE. 47609 47610 * Bruno Haible for improvements in the runtime overhead for EH, new 47611 warnings and assorted bug fixes. 47612 47613 * Andrew Haley for his amazing Java compiler and library efforts. 47614 47615 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 47616 series 300. 47617 47618 * Michael Hayes for various thankless work he's done trying to get 47619 the c30/c40 ports functional. Lots of loop and unroll 47620 improvements and fixes. 47621 47622 * Dara Hazeghi for wading through myriads of target-specific bug 47623 reports. 47624 47625 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 47626 47627 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 47628 work, loop opts, and generally fixing lots of old problems we've 47629 ignored for years, flow rewrite and lots of further stuff, 47630 including reviewing tons of patches. 47631 47632 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 47633 various fixes. 47634 47635 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 47636 contributed the support for the Sony NEWS machine. 47637 47638 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 47639 various fixes. 47640 47641 * Katherine Holcomb for work on GNU Fortran. 47642 47643 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 47644 of testing and bug fixing, particularly of GCC configury code. 47645 47646 * Steve Holmgren for MachTen patches. 47647 47648 * Mat Hostetter for work on the TILE-Gx and TILEPro ports. 47649 47650 * Jan Hubicka for his x86 port improvements. 47651 47652 * Falk Hueffner for working on C and optimization bug reports. 47653 47654 * Bernardo Innocenti for his m68k work, including merging of 47655 ColdFire improvements and uClinux support. 47656 47657 * Christian Iseli for various bug fixes. 47658 47659 * Kamil Iskra for general m68k hacking. 47660 47661 * Lee Iverson for random fixes and MIPS testing. 47662 47663 * Balaji V. Iyer for Cilk+ development and merging. 47664 47665 * Andreas Jaeger for testing and benchmarking of GCC and various bug 47666 fixes. 47667 47668 * Martin Jambor for his work on inter-procedural optimizations, the 47669 switch conversion pass, and scalar replacement of aggregates. 47670 47671 * Jakub Jelinek for his SPARC work and sibling call optimizations as 47672 well as lots of bug fixes and test cases, and for improving the 47673 Java build system. 47674 47675 * Janis Johnson for ia64 testing and fixes, her quality improvement 47676 sidetracks, and web page maintenance. 47677 47678 * Kean Johnston for SCO OpenServer support and various fixes. 47679 47680 * Tim Josling for the sample language treelang based originally on 47681 Richard Kenner's "toy" language. 47682 47683 * Nicolai Josuttis for additional libstdc++ documentation. 47684 47685 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 47686 target. 47687 47688 * Steven G. Kargl for work on GNU Fortran. 47689 47690 * David Kashtan of SRI adapted GCC to VMS. 47691 47692 * Ryszard Kabatek for many, many libstdc++ bug fixes and 47693 optimizations of strings, especially member functions, and for 47694 auto_ptr fixes. 47695 47696 * Geoffrey Keating for his ongoing work to make the PPC work for 47697 GNU/Linux and his automatic regression tester. 47698 47699 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 47700 work in just about every part of libstdc++. 47701 47702 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 47703 MIL-STD-1750A. 47704 47705 * Richard Kenner of the New York University Ultracomputer Research 47706 Laboratory wrote the machine descriptions for the AMD 29000, the 47707 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 47708 support for instruction attributes. He also made changes to 47709 better support RISC processors including changes to common 47710 subexpression elimination, strength reduction, function calling 47711 sequence handling, and condition code support, in addition to 47712 generalizing the code for frame pointer elimination and delay slot 47713 scheduling. Richard Kenner was also the head maintainer of GCC 47714 for several years. 47715 47716 * Mumit Khan for various contributions to the Cygwin and Mingw32 47717 ports and maintaining binary releases for Microsoft Windows hosts, 47718 and for massive libstdc++ porting work to Cygwin/Mingw32. 47719 47720 * Robin Kirkham for cpu32 support. 47721 47722 * Mark Klein for PA improvements. 47723 47724 * Thomas Koenig for various bug fixes. 47725 47726 * Bruce Korb for the new and improved fixincludes code. 47727 47728 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 47729 effort. 47730 47731 * Maxim Kuvyrkov for contributions to the instruction scheduler, the 47732 Android and m68k/Coldfire ports, and optimizations. 47733 47734 * Charles LaBrec contributed the support for the Integrated Solutions 47735 68020 system. 47736 47737 * Asher Langton and Mike Kumbera for contributing Cray pointer 47738 support to GNU Fortran, and for other GNU Fortran improvements. 47739 47740 * Jeff Law for his direction via the steering committee, 47741 coordinating the entire egcs project and GCC 2.95, rolling out 47742 snapshots and releases, handling merges from GCC2, reviewing tons 47743 of patches that might have fallen through the cracks else, and 47744 random but extensive hacking. 47745 47746 * Walter Lee for work on the TILE-Gx and TILEPro ports. 47747 47748 * Marc Lehmann for his direction via the steering committee and 47749 helping with analysis and improvements of x86 performance. 47750 47751 * Victor Leikehman for work on GNU Fortran. 47752 47753 * Ted Lemon wrote parts of the RTL reader and printer. 47754 47755 * Kriang Lerdsuwanakij for C++ improvements including template as 47756 template parameter support, and many C++ fixes. 47757 47758 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 47759 and random work on the Java front end. 47760 47761 * Alain Lichnewsky ported GCC to the MIPS CPU. 47762 47763 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 47764 and patches. 47765 47766 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 47767 47768 * Chen Liqin for various S+core related fixes/improvement, and for 47769 maintaining the S+core port. 47770 47771 * Weiwen Liu for testing and various bug fixes. 47772 47773 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other 47774 diagnostics fixes and improvements. 47775 47776 * Dave Love for his ongoing work with the Fortran front end and 47777 runtime libraries. 47778 47779 * Martin von Lo"wis for internal consistency checking infrastructure, 47780 various C++ improvements including namespace support, and tons of 47781 assistance with libstdc++/compiler merges. 47782 47783 * H.J. Lu for his previous contributions to the steering committee, 47784 many x86 bug reports, prototype patches, and keeping the GNU/Linux 47785 ports working. 47786 47787 * Greg McGary for random fixes and (someday) bounded pointers. 47788 47789 * Andrew MacLeod for his ongoing work in building a real EH system, 47790 various code generation improvements, work on the global 47791 optimizer, etc. 47792 47793 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 47794 hacking improvements to compile-time performance, overall 47795 knowledge and direction in the area of instruction scheduling, and 47796 design and implementation of the automaton based instruction 47797 scheduler. 47798 47799 * Bob Manson for his behind the scenes work on dejagnu. 47800 47801 * John Marino for contributing the DragonFly BSD port. 47802 47803 * Philip Martin for lots of libstdc++ string and vector iterator 47804 fixes and improvements, and string clean up and testsuites. 47805 47806 * Michael Matz for his work on dominance tree discovery, the x86-64 47807 port, link-time optimization framework and general optimization 47808 improvements. 47809 47810 * All of the Mauve project contributors, for Java test code. 47811 47812 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 47813 47814 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 47815 47816 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 47817 powerpc, haifa, ECOFF debug support, and other assorted hacking. 47818 47819 * Jason Merrill for his direction via the steering committee and 47820 leading the G++ effort. 47821 47822 * Martin Michlmayr for testing GCC on several architectures using the 47823 entire Debian archive. 47824 47825 * David Miller for his direction via the steering committee, lots of 47826 SPARC work, improvements in jump.c and interfacing with the Linux 47827 kernel developers. 47828 47829 * Gary Miller ported GCC to Charles River Data Systems machines. 47830 47831 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 47832 the entire libstdc++ testsuite namespace-compatible. 47833 47834 * Mark Mitchell for his direction via the steering committee, 47835 mountains of C++ work, load/store hoisting out of loops, alias 47836 analysis improvements, ISO C `restrict' support, and serving as 47837 release manager from 2000 to 2011. 47838 47839 * Alan Modra for various GNU/Linux bits and testing. 47840 47841 * Toon Moene for his direction via the steering committee, Fortran 47842 maintenance, and his ongoing work to make us make Fortran run fast. 47843 47844 * Jason Molenda for major help in the care and feeding of all the 47845 services on the gcc.gnu.org (formerly egcs.cygnus.com) 47846 machine--mail, web services, ftp services, etc etc. Doing all 47847 this work on scrap paper and the backs of envelopes would have 47848 been... difficult. 47849 47850 * Catherine Moore for fixing various ugly problems we have sent her 47851 way, including the haifa bug which was killing the Alpha & PowerPC 47852 Linux kernels. 47853 47854 * Mike Moreton for his various Java patches. 47855 47856 * David Mosberger-Tang for various Alpha improvements, and for the 47857 initial IA-64 port. 47858 47859 * Stephen Moshier contributed the floating point emulator that 47860 assists in cross-compilation and permits support for floating 47861 point numbers wider than 64 bits and for ISO C99 support. 47862 47863 * Bill Moyer for his behind the scenes work on various issues. 47864 47865 * Philippe De Muyter for his work on the m68k port. 47866 47867 * Joseph S. Myers for his work on the PDP-11 port, format checking 47868 and ISO C99 support, and continuous emphasis on (and contributions 47869 to) documentation. 47870 47871 * Nathan Myers for his work on libstdc++-v3: architecture and 47872 authorship through the first three snapshots, including 47873 implementation of locale infrastructure, string, shadow C headers, 47874 and the initial project documentation (DESIGN, CHECKLIST, and so 47875 forth). Later, more work on MT-safe string and shadow headers. 47876 47877 * Felix Natter for documentation on porting libstdc++. 47878 47879 * Nathanael Nerode for cleaning up the configuration/build process. 47880 47881 * NeXT, Inc. donated the front end that supports the Objective-C 47882 language. 47883 47884 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 47885 the search engine setup, various documentation fixes and other 47886 small fixes. 47887 47888 * Geoff Noer for his work on getting cygwin native builds working. 47889 47890 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 47891 tracking web pages, GIMPLE tuples, and assorted fixes. 47892 47893 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 47894 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 47895 related infrastructure improvements. 47896 47897 * Alexandre Oliva for various build infrastructure improvements, 47898 scripts and amazing testing work, including keeping libtool issues 47899 sane and happy. 47900 47901 * Stefan Olsson for work on mt_alloc. 47902 47903 * Melissa O'Neill for various NeXT fixes. 47904 47905 * Rainer Orth for random MIPS work, including improvements to GCC's 47906 o32 ABI support, improvements to dejagnu's MIPS support, Java 47907 configuration clean-ups and porting work, and maintaining the 47908 IRIX, Solaris 2, and Tru64 UNIX ports. 47909 47910 * Hartmut Penner for work on the s390 port. 47911 47912 * Paul Petersen wrote the machine description for the Alliant FX/8. 47913 47914 * Alexandre Petit-Bianco for implementing much of the Java compiler 47915 and continued Java maintainership. 47916 47917 * Matthias Pfaller for major improvements to the NS32k port. 47918 47919 * Gerald Pfeifer for his direction via the steering committee, 47920 pointing out lots of problems we need to solve, maintenance of the 47921 web pages, and taking care of documentation maintenance in general. 47922 47923 * Andrew Pinski for processing bug reports by the dozen. 47924 47925 * Ovidiu Predescu for his work on the Objective-C front end and 47926 runtime libraries. 47927 47928 * Jerry Quinn for major performance improvements in C++ formatted 47929 I/O. 47930 47931 * Ken Raeburn for various improvements to checker, MIPS ports and 47932 various cleanups in the compiler. 47933 47934 * Rolf W. Rasmussen for hacking on AWT. 47935 47936 * David Reese of Sun Microsystems contributed to the Solaris on 47937 PowerPC port. 47938 47939 * Volker Reichelt for keeping up with the problem reports. 47940 47941 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 47942 hacking and developing and maintaining the Epiphany port. 47943 47944 * Loren J. Rittle for improvements to libstdc++-v3 including the 47945 FreeBSD port, threading fixes, thread-related configury changes, 47946 critical threading documentation, and solutions to really tricky 47947 I/O problems, as well as keeping GCC properly working on FreeBSD 47948 and continuous testing. 47949 47950 * Craig Rodrigues for processing tons of bug reports. 47951 47952 * Ola Ro"nnerup for work on mt_alloc. 47953 47954 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 47955 47956 * David Ronis inspired and encouraged Craig to rewrite the G77 47957 documentation in texinfo format by contributing a first pass at a 47958 translation of the old `g77-0.5.16/f/DOC' file. 47959 47960 * Ken Rose for fixes to GCC's delay slot filling code. 47961 47962 * Ira Rosen for her contributions to the auto-vectorizer. 47963 47964 * Paul Rubin wrote most of the preprocessor. 47965 47966 * Pe'tur Runo'lfsson for major performance improvements in C++ 47967 formatted I/O and large file support in C++ filebuf. 47968 47969 * Chip Salzenberg for libstdc++ patches and improvements to locales, 47970 traits, Makefiles, libio, libtool hackery, and "long long" support. 47971 47972 * Juha Sarlin for improvements to the H8 code generator. 47973 47974 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 47975 300. 47976 47977 * Roger Sayle for improvements to constant folding and GCC's RTL 47978 optimizers as well as for fixing numerous bugs. 47979 47980 * Bradley Schatz for his work on the GCJ FAQ. 47981 47982 * Peter Schauer wrote the code to allow debugging to work on the 47983 Alpha. 47984 47985 * William Schelter did most of the work on the Intel 80386 support. 47986 47987 * Tobias Schlu"ter for work on GNU Fortran. 47988 47989 * Bernd Schmidt for various code generation improvements and major 47990 work in the reload pass, serving as release manager for GCC 47991 2.95.3, and work on the Blackfin and C6X ports. 47992 47993 * Peter Schmid for constant testing of libstdc++--especially 47994 application testing, going above and beyond what was requested for 47995 the release criteria--and libstdc++ header file tweaks. 47996 47997 * Jason Schroeder for jcf-dump patches. 47998 47999 * Andreas Schwab for his work on the m68k port. 48000 48001 * Lars Segerlund for work on GNU Fortran. 48002 48003 * Dodji Seketeli for numerous C++ bug fixes and debug info 48004 improvements. 48005 48006 * Tim Shen for major work on `<regex>'. 48007 48008 * Joel Sherrill for his direction via the steering committee, RTEMS 48009 contributions and RTEMS testing. 48010 48011 * Nathan Sidwell for many C++ fixes/improvements. 48012 48013 * Jeffrey Siegal for helping RMS with the original design of GCC, 48014 some code which handles the parse tree and RTL data structures, 48015 constant folding and help with the original VAX & m68k ports. 48016 48017 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 48018 from the LWG (thereby keeping GCC in line with updates from the 48019 ISO). 48020 48021 * Franz Sirl for his ongoing work with making the PPC port stable 48022 for GNU/Linux. 48023 48024 * Andrey Slepuhin for assorted AIX hacking. 48025 48026 * Trevor Smigiel for contributing the SPU port. 48027 48028 * Christopher Smith did the port for Convex machines. 48029 48030 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 48031 Retired from GCC maintainership August 2010, having mentored two 48032 new maintainers into the role. 48033 48034 * Randy Smith finished the Sun FPA support. 48035 48036 * Ed Smith-Rowland for his continuous work on libstdc++-v3, special 48037 functions, `<random>', and various improvements to C++11 features. 48038 48039 * Scott Snyder for queue, iterator, istream, and string fixes and 48040 libstdc++ testsuite entries. Also for providing the patch to G77 48041 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 48042 `LOGICAL*1'. 48043 48044 * Zdenek Sojka for running automated regression testing of GCC and 48045 reporting numerous bugs. 48046 48047 * Jayant Sonar for contributing the CR16 port. 48048 48049 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 48050 48051 * Richard Stallman, for writing the original GCC and launching the 48052 GNU project. 48053 48054 * Jan Stein of the Chalmers Computer Society provided support for 48055 Genix, as well as part of the 32000 machine description. 48056 48057 * Nigel Stephens for various mips16 related fixes/improvements. 48058 48059 * Jonathan Stone wrote the machine description for the Pyramid 48060 computer. 48061 48062 * Graham Stott for various infrastructure improvements. 48063 48064 * John Stracke for his Java HTTP protocol fixes. 48065 48066 * Mike Stump for his Elxsi port, G++ contributions over the years 48067 and more recently his vxworks contributions 48068 48069 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 48070 48071 * Shigeya Suzuki for this fixes for the bsdi platforms. 48072 48073 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 48074 support, general configury hacking, fixincludes, etc. 48075 48076 * Holger Teutsch provided the support for the Clipper CPU. 48077 48078 * Gary Thomas for his ongoing work to make the PPC work for 48079 GNU/Linux. 48080 48081 * Philipp Thomas for random bug fixes throughout the compiler 48082 48083 * Jason Thorpe for thread support in libstdc++ on NetBSD. 48084 48085 * Kresten Krab Thorup wrote the run time support for the Objective-C 48086 language and the fantastic Java bytecode interpreter. 48087 48088 * Michael Tiemann for random bug fixes, the first instruction 48089 scheduler, initial C++ support, function integration, NS32k, SPARC 48090 and M88k machine description work, delay slot scheduling. 48091 48092 * Andreas Tobler for his work porting libgcj to Darwin. 48093 48094 * Teemu Torma for thread safe exception handling support. 48095 48096 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 48097 definitions, and of the VAX machine description. 48098 48099 * Daniel Towner and Hariharan Sandanagobalane contributed and 48100 maintain the picoChip port. 48101 48102 * Tom Tromey for internationalization support and for his many Java 48103 contributions and libgcj maintainership. 48104 48105 * Lassi Tuura for improvements to config.guess to determine HP 48106 processor types. 48107 48108 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 48109 48110 * Andy Vaught for the design and initial implementation of the GNU 48111 Fortran front end. 48112 48113 * Brent Verner for work with the libstdc++ cshadow files and their 48114 associated configure steps. 48115 48116 * Todd Vierling for contributions for NetBSD ports. 48117 48118 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 48119 guidance. 48120 48121 * Dean Wakerley for converting the install documentation from HTML 48122 to texinfo in time for GCC 3.0. 48123 48124 * Krister Walfridsson for random bug fixes. 48125 48126 * Feng Wang for contributions to GNU Fortran. 48127 48128 * Stephen M. Webb for time and effort on making libstdc++ shadow 48129 files work with the tricky Solaris 8+ headers, and for pushing the 48130 build-time header tree. Also, for starting and driving the 48131 `<regex>' effort. 48132 48133 * John Wehle for various improvements for the x86 code generator, 48134 related infrastructure improvements to help x86 code generation, 48135 value range propagation and other work, WE32k port. 48136 48137 * Ulrich Weigand for work on the s390 port. 48138 48139 * Zack Weinberg for major work on cpplib and various other bug fixes. 48140 48141 * Matt Welsh for help with Linux Threads support in GCJ. 48142 48143 * Urban Widmark for help fixing java.io. 48144 48145 * Mark Wielaard for new Java library code and his work integrating 48146 with Classpath. 48147 48148 * Dale Wiles helped port GCC to the Tahoe. 48149 48150 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 48151 48152 * Jim Wilson for his direction via the steering committee, tackling 48153 hard problems in various places that nobody else wanted to work 48154 on, strength reduction and other loop optimizations. 48155 48156 * Paul Woegerer and Tal Agmon for the CRX port. 48157 48158 * Carlo Wood for various fixes. 48159 48160 * Tom Wood for work on the m88k port. 48161 48162 * Chung-Ju Wu for his work on the Andes NDS32 port. 48163 48164 * Canqun Yang for work on GNU Fortran. 48165 48166 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 48167 description for the Tron architecture (specifically, the Gmicro). 48168 48169 * Kevin Zachmann helped port GCC to the Tahoe. 48170 48171 * Ayal Zaks for Swing Modulo Scheduling (SMS). 48172 48173 * Xiaoqiang Zhang for work on GNU Fortran. 48174 48175 * Gilles Zunino for help porting Java to Irix. 48176 48177 48178 The following people are recognized for their contributions to GNAT, 48179the Ada front end of GCC: 48180 * Bernard Banner 48181 48182 * Romain Berrendonner 48183 48184 * Geert Bosch 48185 48186 * Emmanuel Briot 48187 48188 * Joel Brobecker 48189 48190 * Ben Brosgol 48191 48192 * Vincent Celier 48193 48194 * Arnaud Charlet 48195 48196 * Chien Chieng 48197 48198 * Cyrille Comar 48199 48200 * Cyrille Crozes 48201 48202 * Robert Dewar 48203 48204 * Gary Dismukes 48205 48206 * Robert Duff 48207 48208 * Ed Falis 48209 48210 * Ramon Fernandez 48211 48212 * Sam Figueroa 48213 48214 * Vasiliy Fofanov 48215 48216 * Michael Friess 48217 48218 * Franco Gasperoni 48219 48220 * Ted Giering 48221 48222 * Matthew Gingell 48223 48224 * Laurent Guerby 48225 48226 * Jerome Guitton 48227 48228 * Olivier Hainque 48229 48230 * Jerome Hugues 48231 48232 * Hristian Kirtchev 48233 48234 * Jerome Lambourg 48235 48236 * Bruno Leclerc 48237 48238 * Albert Lee 48239 48240 * Sean McNeil 48241 48242 * Javier Miranda 48243 48244 * Laurent Nana 48245 48246 * Pascal Obry 48247 48248 * Dong-Ik Oh 48249 48250 * Laurent Pautet 48251 48252 * Brett Porter 48253 48254 * Thomas Quinot 48255 48256 * Nicolas Roche 48257 48258 * Pat Rogers 48259 48260 * Jose Ruiz 48261 48262 * Douglas Rupp 48263 48264 * Sergey Rybin 48265 48266 * Gail Schenker 48267 48268 * Ed Schonberg 48269 48270 * Nicolas Setton 48271 48272 * Samuel Tardieu 48273 48274 48275 The following people are recognized for their contributions of new 48276features, bug reports, testing and integration of classpath/libgcj for 48277GCC version 4.1: 48278 * Lillian Angel for `JTree' implementation and lots Free Swing 48279 additions and bug fixes. 48280 48281 * Wolfgang Baer for `GapContent' bug fixes. 48282 48283 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 48284 event fixes, lots of Free Swing work including `JTable' editing. 48285 48286 * Stuart Ballard for RMI constant fixes. 48287 48288 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 48289 48290 * Gary Benson for `MessageFormat' fixes. 48291 48292 * Daniel Bonniot for `Serialization' fixes. 48293 48294 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 48295 and `DOM xml:id' support. 48296 48297 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 48298 48299 * Archie Cobbs for build fixes, VM interface updates, 48300 `URLClassLoader' updates. 48301 48302 * Kelley Cook for build fixes. 48303 48304 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 48305 48306 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite 48307 and improvements. 48308 48309 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 48310 2D support. Lots of imageio framework additions, lots of AWT and 48311 Free Swing bug fixes. 48312 48313 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 48314 fixes, better `Proxy' support, bug fixes and IKVM integration. 48315 48316 * Santiago Gala for `AccessControlContext' fixes. 48317 48318 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 48319 improvements. 48320 48321 * David Gilbert for `basic' and `metal' icon and plaf support and 48322 lots of documenting, Lots of Free Swing and metal theme additions. 48323 `MetalIconFactory' implementation. 48324 48325 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 48326 48327 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 48328 build speedups. 48329 48330 * Kim Ho for `JFileChooser' implementation. 48331 48332 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 48333 updates, `Serialization' fixes, `Properties' XML support and 48334 generic branch work, VMIntegration guide update. 48335 48336 * Bastiaan Huisman for `TimeZone' bug fixing. 48337 48338 * Andreas Jaeger for mprec updates. 48339 48340 * Paul Jenner for better `-Werror' support. 48341 48342 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 48343 48344 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 48345 bug fixes all over. Lots of Free Swing work including styled text. 48346 48347 * Simon Kitching for `String' cleanups and optimization suggestions. 48348 48349 * Michael Koch for configuration fixes, `Locale' updates, bug and 48350 build fixes. 48351 48352 * Guilhem Lavaux for configuration, thread and channel fixes and 48353 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes. 48354 48355 * David Lichteblau for JCL support library global/local reference 48356 cleanups. 48357 48358 * Aaron Luchko for JDWP updates and documentation fixes. 48359 48360 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 48361 features. 48362 48363 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 48364 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 48365 and implementing the Qt4 peers. 48366 48367 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 48368 `SystemLogger' and `FileHandler' rotate implementations, NIO 48369 `FileChannel.map' support, security and policy updates. 48370 48371 * Bryce McKinlay for RMI work. 48372 48373 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 48374 testing and documenting. 48375 48376 * Kalle Olavi Niemitalo for build fixes. 48377 48378 * Rainer Orth for build fixes. 48379 48380 * Andrew Overholt for `File' locking fixes. 48381 48382 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 48383 48384 * Olga Rodimina for `MenuSelectionManager' implementation. 48385 48386 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 48387 48388 * Julian Scheid for documentation updates and gjdoc support. 48389 48390 * Christian Schlichtherle for zip fixes and cleanups. 48391 48392 * Robert Schuster for documentation updates and beans fixes, 48393 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 48394 and URL, AWT and Free Swing bug fixes. 48395 48396 * Keith Seitz for lots of JDWP work. 48397 48398 * Christian Thalinger for 64-bit cleanups, Configuration and VM 48399 interface fixes and `CACAO' integration, `fdlibm' updates. 48400 48401 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 48402 48403 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 48404 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 48405 48406 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 48407 integration. `Qt4' build infrastructure, `SHA1PRNG' and 48408 `GdkPixbugDecoder' updates. 48409 48410 * Tom Tromey for Eclipse integration, generics work, lots of bug 48411 fixes and gcj integration including coordinating The Big Merge. 48412 48413 * Mark Wielaard for bug fixes, packaging and release management, 48414 `Clipboard' implementation, system call interrupts and network 48415 timeouts and `GdkPixpufDecoder' fixes. 48416 48417 48418 In addition to the above, all of which also contributed time and 48419energy in testing GCC, we would like to thank the following for their 48420contributions to testing: 48421 48422 * Michael Abd-El-Malek 48423 48424 * Thomas Arend 48425 48426 * Bonzo Armstrong 48427 48428 * Steven Ashe 48429 48430 * Chris Baldwin 48431 48432 * David Billinghurst 48433 48434 * Jim Blandy 48435 48436 * Stephane Bortzmeyer 48437 48438 * Horst von Brand 48439 48440 * Frank Braun 48441 48442 * Rodney Brown 48443 48444 * Sidney Cadot 48445 48446 * Bradford Castalia 48447 48448 * Robert Clark 48449 48450 * Jonathan Corbet 48451 48452 * Ralph Doncaster 48453 48454 * Richard Emberson 48455 48456 * Levente Farkas 48457 48458 * Graham Fawcett 48459 48460 * Mark Fernyhough 48461 48462 * Robert A. French 48463 48464 * Jo"rgen Freyh 48465 48466 * Mark K. Gardner 48467 48468 * Charles-Antoine Gauthier 48469 48470 * Yung Shing Gene 48471 48472 * David Gilbert 48473 48474 * Simon Gornall 48475 48476 * Fred Gray 48477 48478 * John Griffin 48479 48480 * Patrik Hagglund 48481 48482 * Phil Hargett 48483 48484 * Amancio Hasty 48485 48486 * Takafumi Hayashi 48487 48488 * Bryan W. Headley 48489 48490 * Kevin B. Hendricks 48491 48492 * Joep Jansen 48493 48494 * Christian Joensson 48495 48496 * Michel Kern 48497 48498 * David Kidd 48499 48500 * Tobias Kuipers 48501 48502 * Anand Krishnaswamy 48503 48504 * A. O. V. Le Blanc 48505 48506 * llewelly 48507 48508 * Damon Love 48509 48510 * Brad Lucier 48511 48512 * Matthias Klose 48513 48514 * Martin Knoblauch 48515 48516 * Rick Lutowski 48517 48518 * Jesse Macnish 48519 48520 * Stefan Morrell 48521 48522 * Anon A. Mous 48523 48524 * Matthias Mueller 48525 48526 * Pekka Nikander 48527 48528 * Rick Niles 48529 48530 * Jon Olson 48531 48532 * Magnus Persson 48533 48534 * Chris Pollard 48535 48536 * Richard Polton 48537 48538 * Derk Reefman 48539 48540 * David Rees 48541 48542 * Paul Reilly 48543 48544 * Tom Reilly 48545 48546 * Torsten Rueger 48547 48548 * Danny Sadinoff 48549 48550 * Marc Schifer 48551 48552 * Erik Schnetter 48553 48554 * Wayne K. Schroll 48555 48556 * David Schuler 48557 48558 * Vin Shelton 48559 48560 * Tim Souder 48561 48562 * Adam Sulmicki 48563 48564 * Bill Thorson 48565 48566 * George Talbot 48567 48568 * Pedro A. M. Vazquez 48569 48570 * Gregory Warnes 48571 48572 * Ian Watson 48573 48574 * David E. Young 48575 48576 * And many others 48577 48578 And finally we'd like to thank everyone who uses the compiler, provides 48579feedback and generally reminds us why we're doing this work in the first 48580place. 48581 48582 48583File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 48584 48585Option Index 48586************ 48587 48588GCC's command line options are indexed here without any initial `-' or 48589`--'. Where an option has both positive and negative forms (such as 48590`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 48591indexed under the most appropriate form; it may sometimes be useful to 48592look up both forms. 48593 48594[index] 48595* Menu: 48596 48597* ###: Overall Options. (line 209) 48598* -fipa-cp-alignment: Optimize Options. (line 991) 48599* -Wabi-tag: C++ Dialect Options. 48600 (line 531) 48601* A: Preprocessor Options. 48602 (line 596) 48603* all_load: Darwin Options. (line 110) 48604* allowable_client: Darwin Options. (line 196) 48605* ansi <1>: Non-bugs. (line 107) 48606* ansi <2>: Other Builtins. (line 22) 48607* ansi <3>: Preprocessor Options. 48608 (line 338) 48609* ansi <4>: C Dialect Options. (line 11) 48610* ansi: Standards. (line 16) 48611* arch_errors_fatal: Darwin Options. (line 114) 48612* aux-info: C Dialect Options. (line 176) 48613* B: Directory Options. (line 46) 48614* Bdynamic: VxWorks Options. (line 22) 48615* bind_at_load: Darwin Options. (line 118) 48616* Bstatic: VxWorks Options. (line 22) 48617* bundle: Darwin Options. (line 123) 48618* bundle_loader: Darwin Options. (line 127) 48619* c: Link Options. (line 20) 48620* C: Preprocessor Options. 48621 (line 654) 48622* c: Overall Options. (line 164) 48623* client_name: Darwin Options. (line 196) 48624* compatibility_version: Darwin Options. (line 196) 48625* coverage: Debugging Options. (line 724) 48626* current_version: Darwin Options. (line 196) 48627* D: Preprocessor Options. 48628 (line 46) 48629* d: Debugging Options. (line 856) 48630* dA: Debugging Options. (line 1061) 48631* da: Debugging Options. (line 1058) 48632* dD <1>: Preprocessor Options. 48633 (line 628) 48634* dD: Debugging Options. (line 1065) 48635* dead_strip: Darwin Options. (line 196) 48636* dependency-file: Darwin Options. (line 196) 48637* dH: Debugging Options. (line 1069) 48638* dI: Preprocessor Options. 48639 (line 637) 48640* dM: Preprocessor Options. 48641 (line 612) 48642* dN: Preprocessor Options. 48643 (line 634) 48644* dP: Debugging Options. (line 1077) 48645* dp: Debugging Options. (line 1072) 48646* dU: Preprocessor Options. 48647 (line 641) 48648* dumpmachine: Debugging Options. (line 1679) 48649* dumpspecs: Debugging Options. (line 1687) 48650* dumpversion: Debugging Options. (line 1683) 48651* dx: Debugging Options. (line 1081) 48652* dylib_file: Darwin Options. (line 196) 48653* dylinker_install_name: Darwin Options. (line 196) 48654* dynamic: Darwin Options. (line 196) 48655* dynamiclib: Darwin Options. (line 131) 48656* E <1>: Link Options. (line 20) 48657* E: Overall Options. (line 185) 48658* EB <1>: MIPS Options. (line 7) 48659* EB: ARC Options. (line 350) 48660* EL <1>: MIPS Options. (line 10) 48661* EL: ARC Options. (line 357) 48662* exported_symbols_list: Darwin Options. (line 196) 48663* F: Darwin Options. (line 31) 48664* fabi-compat-version: C++ Dialect Options. 48665 (line 62) 48666* fabi-version: C++ Dialect Options. 48667 (line 20) 48668* fada-spec-parent: Overall Options. (line 369) 48669* faggressive-loop-optimizations: Optimize Options. (line 506) 48670* falign-functions: Optimize Options. (line 1566) 48671* falign-jumps: Optimize Options. (line 1615) 48672* falign-labels: Optimize Options. (line 1584) 48673* falign-loops: Optimize Options. (line 1602) 48674* fallow-parameterless-variadic-functions: C Dialect Options. 48675 (line 192) 48676* fasan-shadow-offset: Debugging Options. (line 349) 48677* fassociative-math: Optimize Options. (line 2125) 48678* fasynchronous-unwind-tables: Code Gen Options. (line 146) 48679* fauto-inc-dec: Optimize Options. (line 530) 48680* fauto-profile: Optimize Options. (line 2006) 48681* fbounds-check: Code Gen Options. (line 15) 48682* fbranch-probabilities: Optimize Options. (line 2252) 48683* fbranch-target-load-optimize: Optimize Options. (line 2375) 48684* fbranch-target-load-optimize2: Optimize Options. (line 2381) 48685* fbtr-bb-exclusive: Optimize Options. (line 2385) 48686* fcall-saved: Code Gen Options. (line 358) 48687* fcall-used: Code Gen Options. (line 344) 48688* fcaller-saves: Optimize Options. (line 880) 48689* fcheck-data-deps: Optimize Options. (line 1201) 48690* fcheck-new: C++ Dialect Options. 48691 (line 77) 48692* fcheck-pointer-bounds: Debugging Options. (line 388) 48693* fchkp-check-incomplete-type: Debugging Options. (line 428) 48694* fchkp-check-read: Debugging Options. (line 478) 48695* fchkp-check-write: Debugging Options. (line 482) 48696* fchkp-first-field-has-own-bounds: Debugging Options. (line 439) 48697* fchkp-instrument-calls: Debugging Options. (line 490) 48698* fchkp-instrument-marked-only: Debugging Options. (line 494) 48699* fchkp-narrow-bounds: Debugging Options. (line 432) 48700* fchkp-narrow-to-innermost-array: Debugging Options. (line 445) 48701* fchkp-optimize: Debugging Options. (line 450) 48702* fchkp-store-bounds: Debugging Options. (line 486) 48703* fchkp-treat-zero-dynamic-size-as-infinite: Debugging Options. 48704 (line 471) 48705* fchkp-use-fast-string-functions: Debugging Options. (line 454) 48706* fchkp-use-nochk-string-functions: Debugging Options. (line 458) 48707* fchkp-use-static-bounds: Debugging Options. (line 462) 48708* fchkp-use-static-const-bounds: Debugging Options. (line 466) 48709* fchkp-use-wrappers: Debugging Options. (line 499) 48710* fcilkplus: C Dialect Options. (line 288) 48711* fcombine-stack-adjustments: Optimize Options. (line 892) 48712* fcommon: Variable Attributes. 48713 (line 106) 48714* fcompare-debug: Debugging Options. (line 512) 48715* fcompare-debug-second: Debugging Options. (line 538) 48716* fcompare-elim: Optimize Options. (line 1941) 48717* fcond-mismatch: C Dialect Options. (line 352) 48718* fconserve-stack: Optimize Options. (line 907) 48719* fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 48720 (line 30) 48721* fconstexpr-depth: C++ Dialect Options. 48722 (line 87) 48723* fcprop-registers: Optimize Options. (line 1953) 48724* fcrossjumping: Optimize Options. (line 523) 48725* fcse-follow-jumps: Optimize Options. (line 442) 48726* fcse-skip-blocks: Optimize Options. (line 451) 48727* fcx-fortran-rules: Optimize Options. (line 2238) 48728* fcx-limited-range: Optimize Options. (line 2226) 48729* fdata-sections: Optimize Options. (line 2356) 48730* fdbg-cnt: Debugging Options. (line 777) 48731* fdbg-cnt-list: Debugging Options. (line 774) 48732* fdce: Optimize Options. (line 536) 48733* fdebug-cpp: Preprocessor Options. 48734 (line 525) 48735* fdebug-prefix-map: Debugging Options. (line 632) 48736* fdebug-types-section: Debugging Options. (line 79) 48737* fdeclone-ctor-dtor: Optimize Options. (line 559) 48738* fdeduce-init-list: C++ Dialect Options. 48739 (line 93) 48740* fdelayed-branch: Optimize Options. (line 710) 48741* fdelete-dead-exceptions: Code Gen Options. (line 131) 48742* fdelete-null-pointer-checks: Optimize Options. (line 570) 48743* fdevirtualize: Optimize Options. (line 588) 48744* fdevirtualize-at-ltrans: Optimize Options. (line 605) 48745* fdevirtualize-speculatively: Optimize Options. (line 595) 48746* fdiagnostics-color: Language Independent Options. 48747 (line 35) 48748* fdiagnostics-show-caret: Language Independent Options. 48749 (line 94) 48750* fdiagnostics-show-location: Language Independent Options. 48751 (line 20) 48752* fdiagnostics-show-option: Language Independent Options. 48753 (line 88) 48754* fdirectives-only: Preprocessor Options. 48755 (line 473) 48756* fdisable-: Debugging Options. (line 787) 48757* fdollars-in-identifiers <1>: Interoperation. (line 141) 48758* fdollars-in-identifiers: Preprocessor Options. 48759 (line 495) 48760* fdse: Optimize Options. (line 540) 48761* fdump-ada-spec: Overall Options. (line 363) 48762* fdump-class-hierarchy: Debugging Options. (line 1116) 48763* fdump-final-insns: Debugging Options. (line 506) 48764* fdump-go-spec: Overall Options. (line 373) 48765* fdump-ipa: Debugging Options. (line 1124) 48766* fdump-noaddr: Debugging Options. (line 1085) 48767* fdump-passes: Debugging Options. (line 1142) 48768* fdump-rtl-alignments: Debugging Options. (line 877) 48769* fdump-rtl-all: Debugging Options. (line 1058) 48770* fdump-rtl-asmcons: Debugging Options. (line 880) 48771* fdump-rtl-auto_inc_dec: Debugging Options. (line 884) 48772* fdump-rtl-barriers: Debugging Options. (line 888) 48773* fdump-rtl-bbpart: Debugging Options. (line 891) 48774* fdump-rtl-bbro: Debugging Options. (line 894) 48775* fdump-rtl-btl2: Debugging Options. (line 898) 48776* fdump-rtl-bypass: Debugging Options. (line 902) 48777* fdump-rtl-ce1: Debugging Options. (line 913) 48778* fdump-rtl-ce2: Debugging Options. (line 913) 48779* fdump-rtl-ce3: Debugging Options. (line 913) 48780* fdump-rtl-combine: Debugging Options. (line 905) 48781* fdump-rtl-compgotos: Debugging Options. (line 908) 48782* fdump-rtl-cprop_hardreg: Debugging Options. (line 917) 48783* fdump-rtl-csa: Debugging Options. (line 920) 48784* fdump-rtl-cse1: Debugging Options. (line 924) 48785* fdump-rtl-cse2: Debugging Options. (line 924) 48786* fdump-rtl-dbr: Debugging Options. (line 931) 48787* fdump-rtl-dce: Debugging Options. (line 928) 48788* fdump-rtl-dce1: Debugging Options. (line 935) 48789* fdump-rtl-dce2: Debugging Options. (line 935) 48790* fdump-rtl-dfinish: Debugging Options. (line 1054) 48791* fdump-rtl-dfinit: Debugging Options. (line 1054) 48792* fdump-rtl-eh: Debugging Options. (line 939) 48793* fdump-rtl-eh_ranges: Debugging Options. (line 942) 48794* fdump-rtl-expand: Debugging Options. (line 945) 48795* fdump-rtl-fwprop1: Debugging Options. (line 949) 48796* fdump-rtl-fwprop2: Debugging Options. (line 949) 48797* fdump-rtl-gcse1: Debugging Options. (line 954) 48798* fdump-rtl-gcse2: Debugging Options. (line 954) 48799* fdump-rtl-init-regs: Debugging Options. (line 958) 48800* fdump-rtl-initvals: Debugging Options. (line 961) 48801* fdump-rtl-into_cfglayout: Debugging Options. (line 964) 48802* fdump-rtl-ira: Debugging Options. (line 967) 48803* fdump-rtl-jump: Debugging Options. (line 970) 48804* fdump-rtl-loop2: Debugging Options. (line 973) 48805* fdump-rtl-mach: Debugging Options. (line 977) 48806* fdump-rtl-mode_sw: Debugging Options. (line 981) 48807* fdump-rtl-outof_cfglayout: Debugging Options. (line 987) 48808* fdump-rtl-PASS: Debugging Options. (line 856) 48809* fdump-rtl-peephole2: Debugging Options. (line 990) 48810* fdump-rtl-postreload: Debugging Options. (line 993) 48811* fdump-rtl-pro_and_epilogue: Debugging Options. (line 996) 48812* fdump-rtl-ree: Debugging Options. (line 1004) 48813* fdump-rtl-regclass: Debugging Options. (line 1054) 48814* fdump-rtl-rnreg: Debugging Options. (line 984) 48815* fdump-rtl-sched1: Debugging Options. (line 1000) 48816* fdump-rtl-sched2: Debugging Options. (line 1000) 48817* fdump-rtl-seqabstr: Debugging Options. (line 1007) 48818* fdump-rtl-shorten: Debugging Options. (line 1010) 48819* fdump-rtl-sibling: Debugging Options. (line 1013) 48820* fdump-rtl-sms: Debugging Options. (line 1024) 48821* fdump-rtl-split1: Debugging Options. (line 1020) 48822* fdump-rtl-split2: Debugging Options. (line 1020) 48823* fdump-rtl-split3: Debugging Options. (line 1020) 48824* fdump-rtl-split4: Debugging Options. (line 1020) 48825* fdump-rtl-split5: Debugging Options. (line 1020) 48826* fdump-rtl-stack: Debugging Options. (line 1028) 48827* fdump-rtl-subreg1: Debugging Options. (line 1034) 48828* fdump-rtl-subreg2: Debugging Options. (line 1034) 48829* fdump-rtl-subregs_of_mode_finish: Debugging Options. (line 1054) 48830* fdump-rtl-subregs_of_mode_init: Debugging Options. (line 1054) 48831* fdump-rtl-unshare: Debugging Options. (line 1038) 48832* fdump-rtl-vartrack: Debugging Options. (line 1041) 48833* fdump-rtl-vregs: Debugging Options. (line 1044) 48834* fdump-rtl-web: Debugging Options. (line 1047) 48835* fdump-statistics: Debugging Options. (line 1146) 48836* fdump-translation-unit: Debugging Options. (line 1107) 48837* fdump-tree: Debugging Options. (line 1158) 48838* fdump-tree-alias: Debugging Options. (line 1297) 48839* fdump-tree-all: Debugging Options. (line 1382) 48840* fdump-tree-ccp: Debugging Options. (line 1301) 48841* fdump-tree-cfg: Debugging Options. (line 1285) 48842* fdump-tree-ch: Debugging Options. (line 1289) 48843* fdump-tree-copyprop: Debugging Options. (line 1317) 48844* fdump-tree-copyrename: Debugging Options. (line 1358) 48845* fdump-tree-dce: Debugging Options. (line 1325) 48846* fdump-tree-dom: Debugging Options. (line 1338) 48847* fdump-tree-dse: Debugging Options. (line 1343) 48848* fdump-tree-forwprop: Debugging Options. (line 1353) 48849* fdump-tree-fre: Debugging Options. (line 1313) 48850* fdump-tree-gimple: Debugging Options. (line 1280) 48851* fdump-tree-nrv: Debugging Options. (line 1363) 48852* fdump-tree-optimized: Debugging Options. (line 1277) 48853* fdump-tree-original: Debugging Options. (line 1274) 48854* fdump-tree-phiopt: Debugging Options. (line 1348) 48855* fdump-tree-pre: Debugging Options. (line 1309) 48856* fdump-tree-sink: Debugging Options. (line 1334) 48857* fdump-tree-slp: Debugging Options. (line 1373) 48858* fdump-tree-sra: Debugging Options. (line 1329) 48859* fdump-tree-ssa: Debugging Options. (line 1293) 48860* fdump-tree-store_copyprop: Debugging Options. (line 1321) 48861* fdump-tree-storeccp: Debugging Options. (line 1305) 48862* fdump-tree-vect: Debugging Options. (line 1368) 48863* fdump-tree-vrp: Debugging Options. (line 1378) 48864* fdump-unnumbered: Debugging Options. (line 1095) 48865* fdump-unnumbered-links: Debugging Options. (line 1101) 48866* fdwarf2-cfi-asm: Debugging Options. (line 636) 48867* fearly-inlining: Optimize Options. (line 292) 48868* feliminate-dwarf2-dups: Debugging Options. (line 551) 48869* feliminate-unused-debug-symbols: Debugging Options. (line 67) 48870* feliminate-unused-debug-types: Debugging Options. (line 1691) 48871* femit-class-debug-always: Debugging Options. (line 71) 48872* femit-struct-debug-baseonly: Debugging Options. (line 556) 48873* femit-struct-debug-detailed: Debugging Options. (line 583) 48874* femit-struct-debug-reduced: Debugging Options. (line 569) 48875* fenable-: Debugging Options. (line 787) 48876* fexceptions: Code Gen Options. (line 108) 48877* fexcess-precision: Optimize Options. (line 2053) 48878* fexec-charset: Preprocessor Options. 48879 (line 553) 48880* fexpensive-optimizations: Optimize Options. (line 612) 48881* fext-numeric-literals: C++ Dialect Options. 48882 (line 612) 48883* fextended-identifiers: Preprocessor Options. 48884 (line 498) 48885* fextern-tls-init: C++ Dialect Options. 48886 (line 143) 48887* ffast-math: Optimize Options. (line 2076) 48888* ffat-lto-objects: Optimize Options. (line 1922) 48889* ffinite-math-only: Optimize Options. (line 2150) 48890* ffix-and-continue: Darwin Options. (line 104) 48891* ffixed: Code Gen Options. (line 332) 48892* ffloat-store <1>: Disappointments. (line 77) 48893* ffloat-store: Optimize Options. (line 2039) 48894* ffor-scope: C++ Dialect Options. 48895 (line 164) 48896* fforward-propagate: Optimize Options. (line 195) 48897* ffp-contract: Optimize Options. (line 204) 48898* ffreestanding <1>: Function Attributes. 48899 (line 464) 48900* ffreestanding <2>: Warning Options. (line 270) 48901* ffreestanding <3>: C Dialect Options. (line 254) 48902* ffreestanding: Standards. (line 92) 48903* ffriend-injection: C++ Dialect Options. 48904 (line 114) 48905* ffunction-sections: Optimize Options. (line 2356) 48906* fgcse: Optimize Options. (line 465) 48907* fgcse-after-reload: Optimize Options. (line 501) 48908* fgcse-las: Optimize Options. (line 494) 48909* fgcse-lm: Optimize Options. (line 476) 48910* fgcse-sm: Optimize Options. (line 485) 48911* fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 48912 (line 39) 48913* fgnu-tm: C Dialect Options. (line 298) 48914* fgnu89-inline: C Dialect Options. (line 159) 48915* fgraphite-identity: Optimize Options. (line 1174) 48916* fhoist-adjacent-loads: Optimize Options. (line 940) 48917* fhosted: C Dialect Options. (line 247) 48918* fif-conversion: Optimize Options. (line 544) 48919* fif-conversion2: Optimize Options. (line 553) 48920* filelist: Darwin Options. (line 196) 48921* findirect-data: Darwin Options. (line 104) 48922* findirect-inlining: Optimize Options. (line 265) 48923* finhibit-size-directive: Code Gen Options. (line 252) 48924* finline-functions: Optimize Options. (line 273) 48925* finline-functions-called-once: Optimize Options. (line 284) 48926* finline-limit: Optimize Options. (line 309) 48927* finline-small-functions: Optimize Options. (line 256) 48928* finput-charset: Preprocessor Options. 48929 (line 566) 48930* finstrument-functions <1>: Function Attributes. 48931 (line 1073) 48932* finstrument-functions: Code Gen Options. (line 388) 48933* finstrument-functions-exclude-file-list: Code Gen Options. (line 424) 48934* finstrument-functions-exclude-function-list: Code Gen Options. 48935 (line 444) 48936* fipa-cp: Optimize Options. (line 973) 48937* fipa-cp-clone: Optimize Options. (line 981) 48938* fipa-icf: Optimize Options. (line 998) 48939* fipa-profile: Optimize Options. (line 965) 48940* fipa-pta: Optimize Options. (line 959) 48941* fipa-pure-const: Optimize Options. (line 951) 48942* fipa-ra: Optimize Options. (line 898) 48943* fipa-reference: Optimize Options. (line 955) 48944* fipa-sra: Optimize Options. (line 302) 48945* fira-algorithm: Optimize Options. (line 640) 48946* fira-hoist-pressure: Optimize Options. (line 670) 48947* fira-loop-pressure: Optimize Options. (line 677) 48948* fira-region: Optimize Options. (line 648) 48949* fira-verbose: Optimize Options. (line 697) 48950* fisolate-erroneous-paths-attribute: Optimize Options. (line 1019) 48951* fisolate-erroneous-paths-dereference: Optimize Options. (line 1012) 48952* fivar-visibility: Objective-C and Objective-C++ Dialect Options. 48953 (line 162) 48954* fivopts: Optimize Options. (line 1277) 48955* fkeep-inline-functions <1>: Inline. (line 51) 48956* fkeep-inline-functions: Optimize Options. (line 341) 48957* fkeep-static-consts: Optimize Options. (line 348) 48958* flat_namespace: Darwin Options. (line 196) 48959* flax-vector-conversions: C Dialect Options. (line 357) 48960* fleading-underscore: Code Gen Options. (line 527) 48961* flive-range-shrinkage: Optimize Options. (line 635) 48962* flocal-ivars: Objective-C and Objective-C++ Dialect Options. 48963 (line 153) 48964* floop-block: Optimize Options. (line 1145) 48965* floop-interchange: Optimize Options. (line 1100) 48966* floop-nest-optimize: Optimize Options. (line 1182) 48967* floop-parallelize-all: Optimize Options. (line 1195) 48968* floop-strip-mine: Optimize Options. (line 1124) 48969* floop-unroll-and-jam: Optimize Options. (line 1188) 48970* flra-remat: Optimize Options. (line 703) 48971* flto: Optimize Options. (line 1669) 48972* flto-compression-level: Optimize Options. (line 1884) 48973* flto-odr-type-merging: Optimize Options. (line 1879) 48974* flto-partition: Optimize Options. (line 1865) 48975* flto-report: Optimize Options. (line 1892) 48976* flto-report-wpa: Optimize Options. (line 1900) 48977* fmax-errors: Warning Options. (line 18) 48978* fmem-report: Debugging Options. (line 660) 48979* fmem-report-wpa: Debugging Options. (line 664) 48980* fmerge-all-constants: Optimize Options. (line 367) 48981* fmerge-constants: Optimize Options. (line 357) 48982* fmerge-debug-strings: Debugging Options. (line 625) 48983* fmessage-length: Language Independent Options. 48984 (line 14) 48985* fmodulo-sched: Optimize Options. (line 378) 48986* fmodulo-sched-allow-regmoves: Optimize Options. (line 383) 48987* fmove-loop-invariants: Optimize Options. (line 2346) 48988* fms-extensions <1>: Unnamed Fields. (line 36) 48989* fms-extensions <2>: C++ Dialect Options. 48990 (line 198) 48991* fms-extensions: C Dialect Options. (line 313) 48992* fnext-runtime: Objective-C and Objective-C++ Dialect Options. 48993 (line 43) 48994* fno-access-control: C++ Dialect Options. 48995 (line 73) 48996* fno-asm: C Dialect Options. (line 199) 48997* fno-branch-count-reg: Optimize Options. (line 390) 48998* fno-builtin <1>: Other Builtins. (line 14) 48999* fno-builtin <2>: Function Attributes. 49000 (line 464) 49001* fno-builtin <3>: Warning Options. (line 270) 49002* fno-builtin: C Dialect Options. (line 213) 49003* fno-canonical-system-headers: Preprocessor Options. 49004 (line 502) 49005* fno-check-pointer-bounds: Debugging Options. (line 388) 49006* fno-chkp-check-incomplete-type: Debugging Options. (line 428) 49007* fno-chkp-check-read: Debugging Options. (line 478) 49008* fno-chkp-check-write: Debugging Options. (line 482) 49009* fno-chkp-first-field-has-own-bounds: Debugging Options. (line 439) 49010* fno-chkp-instrument-calls: Debugging Options. (line 490) 49011* fno-chkp-instrument-marked-only: Debugging Options. (line 494) 49012* fno-chkp-narrow-bounds: Debugging Options. (line 432) 49013* fno-chkp-narrow-to-innermost-array: Debugging Options. (line 445) 49014* fno-chkp-optimize: Debugging Options. (line 450) 49015* fno-chkp-store-bounds: Debugging Options. (line 486) 49016* fno-chkp-treat-zero-dynamic-size-as-infinite: Debugging Options. 49017 (line 471) 49018* fno-chkp-use-fast-string-functions: Debugging Options. (line 454) 49019* fno-chkp-use-nochk-string-functions: Debugging Options. (line 458) 49020* fno-chkp-use-static-bounds: Debugging Options. (line 462) 49021* fno-chkp-use-static-const-bounds: Debugging Options. (line 466) 49022* fno-chkp-use-wrappers: Debugging Options. (line 499) 49023* fno-common <1>: Variable Attributes. 49024 (line 106) 49025* fno-common: Code Gen Options. (line 229) 49026* fno-compare-debug: Debugging Options. (line 512) 49027* fno-debug-types-section: Debugging Options. (line 79) 49028* fno-default-inline: Inline. (line 71) 49029* fno-defer-pop: Optimize Options. (line 187) 49030* fno-diagnostics-show-caret: Language Independent Options. 49031 (line 94) 49032* fno-diagnostics-show-option: Language Independent Options. 49033 (line 88) 49034* fno-dwarf2-cfi-asm: Debugging Options. (line 636) 49035* fno-elide-constructors: C++ Dialect Options. 49036 (line 126) 49037* fno-eliminate-unused-debug-types: Debugging Options. (line 1691) 49038* fno-enforce-eh-specs: C++ Dialect Options. 49039 (line 132) 49040* fno-ext-numeric-literals: C++ Dialect Options. 49041 (line 612) 49042* fno-extern-tls-init: C++ Dialect Options. 49043 (line 143) 49044* fno-for-scope: C++ Dialect Options. 49045 (line 164) 49046* fno-function-cse: Optimize Options. (line 402) 49047* fno-gnu-keywords: C++ Dialect Options. 49048 (line 176) 49049* fno-gnu-unique: Code Gen Options. (line 152) 49050* fno-guess-branch-probability: Optimize Options. (line 1436) 49051* fno-ident: Code Gen Options. (line 249) 49052* fno-implement-inlines <1>: C++ Interface. (line 66) 49053* fno-implement-inlines: C++ Dialect Options. 49054 (line 193) 49055* fno-implicit-inline-templates: C++ Dialect Options. 49056 (line 187) 49057* fno-implicit-templates <1>: Template Instantiation. 49058 (line 78) 49059* fno-implicit-templates: C++ Dialect Options. 49060 (line 181) 49061* fno-inline: Optimize Options. (line 248) 49062* fno-ira-share-save-slots: Optimize Options. (line 685) 49063* fno-ira-share-spill-slots: Optimize Options. (line 691) 49064* fno-jump-tables: Code Gen Options. (line 324) 49065* fno-keep-inline-dllexport: Optimize Options. (line 335) 49066* fno-lifetime-dse: Optimize Options. (line 626) 49067* fno-local-ivars: Objective-C and Objective-C++ Dialect Options. 49068 (line 153) 49069* fno-math-errno: Optimize Options. (line 2090) 49070* fno-merge-debug-strings: Debugging Options. (line 625) 49071* fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 49072 (line 49) 49073* fno-nonansi-builtins: C++ Dialect Options. 49074 (line 203) 49075* fno-operator-names: C++ Dialect Options. 49076 (line 219) 49077* fno-optional-diags: C++ Dialect Options. 49078 (line 223) 49079* fno-peephole: Optimize Options. (line 1427) 49080* fno-peephole2: Optimize Options. (line 1427) 49081* fno-pretty-templates: C++ Dialect Options. 49082 (line 233) 49083* fno-rtti: C++ Dialect Options. 49084 (line 250) 49085* fno-sanitize-recover: Debugging Options. (line 354) 49086* fno-sanitize=all: Debugging Options. (line 344) 49087* fno-sched-interblock: Optimize Options. (line 736) 49088* fno-sched-spec: Optimize Options. (line 741) 49089* fno-set-stack-executable: x86 Windows Options. 49090 (line 46) 49091* fno-show-column: Preprocessor Options. 49092 (line 591) 49093* fno-signed-bitfields: C Dialect Options. (line 390) 49094* fno-signed-zeros: Optimize Options. (line 2162) 49095* fno-stack-limit: Code Gen Options. (line 495) 49096* fno-threadsafe-statics: C++ Dialect Options. 49097 (line 297) 49098* fno-toplevel-reorder: Optimize Options. (line 1635) 49099* fno-trapping-math: Optimize Options. (line 2172) 49100* fno-unsigned-bitfields: C Dialect Options. (line 390) 49101* fno-use-cxa-get-exception-ptr: C++ Dialect Options. 49102 (line 310) 49103* fno-var-tracking-assignments: Debugging Options. (line 1597) 49104* fno-var-tracking-assignments-toggle: Debugging Options. (line 1608) 49105* fno-weak: C++ Dialect Options. 49106 (line 424) 49107* fno-working-directory: Preprocessor Options. 49108 (line 576) 49109* fno-writable-relocated-rdata: x86 Windows Options. 49110 (line 53) 49111* fno-zero-initialized-in-bss: Optimize Options. (line 413) 49112* fnon-call-exceptions: Code Gen Options. (line 122) 49113* fnothrow-opt: C++ Dialect Options. 49114 (line 208) 49115* fobjc-abi-version: Objective-C and Objective-C++ Dialect Options. 49116 (line 56) 49117* fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 49118 (line 67) 49119* fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 49120 (line 92) 49121* fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 49122 (line 96) 49123* fobjc-gc: Objective-C and Objective-C++ Dialect Options. 49124 (line 105) 49125* fobjc-nilcheck: Objective-C and Objective-C++ Dialect Options. 49126 (line 111) 49127* fobjc-std: Objective-C and Objective-C++ Dialect Options. 49128 (line 120) 49129* fomit-frame-pointer: Optimize Options. (line 215) 49130* fopenacc: C Dialect Options. (line 264) 49131* fopenmp: C Dialect Options. (line 276) 49132* fopenmp-simd: C Dialect Options. (line 284) 49133* fopt-info: Debugging Options. (line 1388) 49134* foptimize-sibling-calls: Optimize Options. (line 236) 49135* foptimize-strlen: Optimize Options. (line 241) 49136* force_cpusubtype_ALL: Darwin Options. (line 135) 49137* force_flat_namespace: Darwin Options. (line 196) 49138* fpack-struct: Code Gen Options. (line 375) 49139* fpartial-inlining: Optimize Options. (line 1402) 49140* fpcc-struct-return <1>: Incompatibilities. (line 170) 49141* fpcc-struct-return: Code Gen Options. (line 165) 49142* fpch-deps: Preprocessor Options. 49143 (line 294) 49144* fpch-preprocess: Preprocessor Options. 49145 (line 302) 49146* fpeel-loops: Optimize Options. (line 2338) 49147* fpermissive: C++ Dialect Options. 49148 (line 228) 49149* fPIC: Code Gen Options. (line 301) 49150* fpic: Code Gen Options. (line 280) 49151* fPIE: Code Gen Options. (line 314) 49152* fpie: Code Gen Options. (line 314) 49153* fplan9-extensions <1>: Unnamed Fields. (line 44) 49154* fplan9-extensions: C Dialect Options. (line 331) 49155* fplugin: Overall Options. (line 351) 49156* fplugin-arg: Overall Options. (line 359) 49157* fpost-ipa-mem-report: Debugging Options. (line 670) 49158* fpre-ipa-mem-report: Debugging Options. (line 668) 49159* fpredictive-commoning: Optimize Options. (line 1409) 49160* fprefetch-loop-arrays: Optimize Options. (line 1416) 49161* fpreprocessed: Preprocessor Options. 49162 (line 506) 49163* fprofile-arcs <1>: Other Builtins. (line 264) 49164* fprofile-arcs: Debugging Options. (line 709) 49165* fprofile-correction: Optimize Options. (line 1960) 49166* fprofile-dir: Optimize Options. (line 1967) 49167* fprofile-generate: Optimize Options. (line 1977) 49168* fprofile-reorder-functions: Optimize Options. (line 2280) 49169* fprofile-report: Debugging Options. (line 674) 49170* fprofile-use: Optimize Options. (line 1990) 49171* fprofile-values: Optimize Options. (line 2271) 49172* fpu: RX Options. (line 17) 49173* frandom-seed: Debugging Options. (line 1487) 49174* freciprocal-math: Optimize Options. (line 2141) 49175* frecord-gcc-switches: Code Gen Options. (line 268) 49176* free: Optimize Options. (line 618) 49177* freg-struct-return: Code Gen Options. (line 183) 49178* frename-registers: Optimize Options. (line 2297) 49179* freorder-blocks: Optimize Options. (line 1453) 49180* freorder-blocks-and-partition: Optimize Options. (line 1459) 49181* freorder-functions: Optimize Options. (line 1472) 49182* freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 49183 (line 131) 49184* frepo <1>: Template Instantiation. 49185 (line 54) 49186* frepo: C++ Dialect Options. 49187 (line 245) 49188* freport-bug: Debugging Options. (line 1091) 49189* frerun-cse-after-loop: Optimize Options. (line 459) 49190* freschedule-modulo-scheduled-loops: Optimize Options. (line 835) 49191* frounding-math: Optimize Options. (line 2187) 49192* fsanitize-recover: Debugging Options. (line 354) 49193* fsanitize-undefined-trap-on-error: Debugging Options. (line 381) 49194* fsanitize=address: Debugging Options. (line 199) 49195* fsanitize=alignment: Debugging Options. (line 288) 49196* fsanitize=bool: Debugging Options. (line 324) 49197* fsanitize=bounds: Debugging Options. (line 282) 49198* fsanitize=enum: Debugging Options. (line 328) 49199* fsanitize=float-cast-overflow: Debugging Options. (line 305) 49200* fsanitize=float-divide-by-zero: Debugging Options. (line 299) 49201* fsanitize=integer-divide-by-zero: Debugging Options. (line 245) 49202* fsanitize=kernel-address: Debugging Options. (line 211) 49203* fsanitize=leak: Debugging Options. (line 224) 49204* fsanitize=nonnull-attribute: Debugging Options. (line 313) 49205* fsanitize=null: Debugging Options. (line 259) 49206* fsanitize=object-size: Debugging Options. (line 294) 49207* fsanitize=return: Debugging Options. (line 267) 49208* fsanitize=returns-nonnull-attribute: Debugging Options. (line 319) 49209* fsanitize=shift: Debugging Options. (line 239) 49210* fsanitize=signed-integer-overflow: Debugging Options. (line 273) 49211* fsanitize=thread: Debugging Options. (line 215) 49212* fsanitize=undefined: Debugging Options. (line 234) 49213* fsanitize=unreachable: Debugging Options. (line 249) 49214* fsanitize=vla-bound: Debugging Options. (line 255) 49215* fsanitize=vptr: Debugging Options. (line 333) 49216* fsched-critical-path-heuristic: Optimize Options. (line 801) 49217* fsched-dep-count-heuristic: Optimize Options. (line 828) 49218* fsched-group-heuristic: Optimize Options. (line 795) 49219* fsched-last-insn-heuristic: Optimize Options. (line 821) 49220* fsched-pressure: Optimize Options. (line 746) 49221* fsched-rank-heuristic: Optimize Options. (line 814) 49222* fsched-spec-insn-heuristic: Optimize Options. (line 807) 49223* fsched-spec-load: Optimize Options. (line 755) 49224* fsched-spec-load-dangerous: Optimize Options. (line 760) 49225* fsched-stalled-insns: Optimize Options. (line 766) 49226* fsched-stalled-insns-dep: Optimize Options. (line 776) 49227* fsched-verbose: Debugging Options. (line 1501) 49228* fsched2-use-superblocks: Optimize Options. (line 785) 49229* fschedule-fusion: Optimize Options. (line 2307) 49230* fschedule-insns: Optimize Options. (line 717) 49231* fschedule-insns2: Optimize Options. (line 727) 49232* fsection-anchors: Optimize Options. (line 2414) 49233* fsel-sched-pipelining: Optimize Options. (line 848) 49234* fsel-sched-pipelining-outer-loops: Optimize Options. (line 853) 49235* fselective-scheduling: Optimize Options. (line 840) 49236* fselective-scheduling2: Optimize Options. (line 844) 49237* fsemantic-interposition: Optimize Options. (line 858) 49238* fshort-double: Code Gen Options. (line 211) 49239* fshort-enums <1>: Non-bugs. (line 42) 49240* fshort-enums <2>: Type Attributes. (line 114) 49241* fshort-enums <3>: Structures unions enumerations and bit-fields implementation. 49242 (line 48) 49243* fshort-enums: Code Gen Options. (line 201) 49244* fshort-wchar: Code Gen Options. (line 219) 49245* fshrink-wrap: Optimize Options. (line 875) 49246* fsignaling-nans: Optimize Options. (line 2207) 49247* fsigned-bitfields <1>: Non-bugs. (line 57) 49248* fsigned-bitfields: C Dialect Options. (line 390) 49249* fsigned-char <1>: Characters implementation. 49250 (line 31) 49251* fsigned-char: C Dialect Options. (line 380) 49252* fsimd-cost-model: Optimize Options. (line 1367) 49253* fsingle-precision-constant: Optimize Options. (line 2222) 49254* fsized-deallocation: C++ Dialect Options. 49255 (line 260) 49256* fsplit-ivs-in-unroller: Optimize Options. (line 1383) 49257* fsplit-stack <1>: Function Attributes. 49258 (line 1078) 49259* fsplit-stack: Code Gen Options. (line 509) 49260* fsplit-wide-types: Optimize Options. (line 434) 49261* fssa-phiopt: Optimize Options. (line 1042) 49262* fstack-check: Code Gen Options. (line 456) 49263* fstack-limit-register: Code Gen Options. (line 495) 49264* fstack-limit-symbol: Code Gen Options. (line 495) 49265* fstack-protector: Optimize Options. (line 2389) 49266* fstack-protector-all: Optimize Options. (line 2398) 49267* fstack-protector-explicit: Optimize Options. (line 2406) 49268* fstack-protector-strong: Optimize Options. (line 2401) 49269* fstack-usage: Debugging Options. (line 678) 49270* fstack_reuse: Code Gen Options. (line 21) 49271* fstats: C++ Dialect Options. 49272 (line 270) 49273* fstdarg-opt: Optimize Options. (line 2410) 49274* fstrict-aliasing: Optimize Options. (line 1485) 49275* fstrict-enums: C++ Dialect Options. 49276 (line 275) 49277* fstrict-overflow: Optimize Options. (line 1531) 49278* fstrict-volatile-bitfields: Code Gen Options. (line 614) 49279* fsync-libcalls: Code Gen Options. (line 647) 49280* fsyntax-only: Warning Options. (line 14) 49281* ftabstop: Preprocessor Options. 49282 (line 519) 49283* ftemplate-backtrace-limit: C++ Dialect Options. 49284 (line 284) 49285* ftemplate-depth: C++ Dialect Options. 49286 (line 288) 49287* ftest-coverage: Debugging Options. (line 765) 49288* fthread-jumps: Optimize Options. (line 425) 49289* ftime-report: Debugging Options. (line 656) 49290* ftls-model: Code Gen Options. (line 538) 49291* ftracer: Optimize Options. (line 2315) 49292* ftrack-macro-expansion: Preprocessor Options. 49293 (line 535) 49294* ftrapv: Code Gen Options. (line 96) 49295* ftree-bit-ccp: Optimize Options. (line 1031) 49296* ftree-builtin-call-dce: Optimize Options. (line 1063) 49297* ftree-ccp: Optimize Options. (line 1037) 49298* ftree-ch: Optimize Options. (line 1083) 49299* ftree-coalesce-inlined-vars: Optimize Options. (line 1308) 49300* ftree-coalesce-vars: Optimize Options. (line 1317) 49301* ftree-copy-prop: Optimize Options. (line 946) 49302* ftree-copyrename: Optimize Options. (line 1301) 49303* ftree-dce: Optimize Options. (line 1059) 49304* ftree-dominator-opts: Optimize Options. (line 1069) 49305* ftree-dse: Optimize Options. (line 1076) 49306* ftree-forwprop: Optimize Options. (line 925) 49307* ftree-fre: Optimize Options. (line 929) 49308* ftree-loop-distribute-patterns: Optimize Options. (line 1242) 49309* ftree-loop-distribution: Optimize Options. (line 1225) 49310* ftree-loop-if-convert: Optimize Options. (line 1205) 49311* ftree-loop-if-convert-stores: Optimize Options. (line 1212) 49312* ftree-loop-im: Optimize Options. (line 1262) 49313* ftree-loop-ivcanon: Optimize Options. (line 1271) 49314* ftree-loop-linear: Optimize Options. (line 1094) 49315* ftree-loop-optimize: Optimize Options. (line 1090) 49316* ftree-loop-vectorize: Optimize Options. (line 1345) 49317* ftree-parallelize-loops: Optimize Options. (line 1282) 49318* ftree-partial-pre: Optimize Options. (line 921) 49319* ftree-phiprop: Optimize Options. (line 936) 49320* ftree-pre: Optimize Options. (line 917) 49321* ftree-pta: Optimize Options. (line 1291) 49322* ftree-reassoc: Optimize Options. (line 913) 49323* ftree-sink: Optimize Options. (line 1027) 49324* ftree-slp-vectorize: Optimize Options. (line 1349) 49325* ftree-slsr: Optimize Options. (line 1334) 49326* ftree-sra: Optimize Options. (line 1295) 49327* ftree-switch-conversion: Optimize Options. (line 1046) 49328* ftree-tail-merge: Optimize Options. (line 1051) 49329* ftree-ter: Optimize Options. (line 1326) 49330* ftree-vectorize: Optimize Options. (line 1340) 49331* ftree-vrp: Optimize Options. (line 1374) 49332* funit-at-a-time: Optimize Options. (line 1628) 49333* funroll-all-loops: Optimize Options. (line 2332) 49334* funroll-loops: Optimize Options. (line 2322) 49335* funsafe-loop-optimizations: Optimize Options. (line 515) 49336* funsafe-math-optimizations: Optimize Options. (line 2108) 49337* funsigned-bitfields <1>: Non-bugs. (line 57) 49338* funsigned-bitfields <2>: Structures unions enumerations and bit-fields implementation. 49339 (line 17) 49340* funsigned-bitfields: C Dialect Options. (line 390) 49341* funsigned-char <1>: Characters implementation. 49342 (line 31) 49343* funsigned-char: C Dialect Options. (line 362) 49344* funswitch-loops: Optimize Options. (line 2350) 49345* funwind-tables: Code Gen Options. (line 139) 49346* fuse-cxa-atexit: C++ Dialect Options. 49347 (line 303) 49348* fuse-ld=bfd: Link Options. (line 25) 49349* fuse-ld=gold: Link Options. (line 28) 49350* fuse-linker-plugin: Optimize Options. (line 1904) 49351* fvar-tracking: Debugging Options. (line 1587) 49352* fvar-tracking-assignments: Debugging Options. (line 1597) 49353* fvar-tracking-assignments-toggle: Debugging Options. (line 1608) 49354* fvariable-expansion-in-unroller: Optimize Options. (line 1397) 49355* fvect-cost-model: Optimize Options. (line 1353) 49356* fverbose-asm: Code Gen Options. (line 259) 49357* fvisibility: Code Gen Options. (line 549) 49358* fvisibility-inlines-hidden: C++ Dialect Options. 49359 (line 315) 49360* fvisibility-ms-compat: C++ Dialect Options. 49361 (line 343) 49362* fvpt: Optimize Options. (line 2287) 49363* fvtable-verify: C++ Dialect Options. 49364 (line 372) 49365* fvtv-counts: C++ Dialect Options. 49366 (line 407) 49367* fvtv-debug: C++ Dialect Options. 49368 (line 394) 49369* fweb: Optimize Options. (line 1647) 49370* fwhole-program: Optimize Options. (line 1658) 49371* fwide-exec-charset: Preprocessor Options. 49372 (line 558) 49373* fworking-directory: Preprocessor Options. 49374 (line 576) 49375* fwrapv: Code Gen Options. (line 100) 49376* fzero-link: Objective-C and Objective-C++ Dialect Options. 49377 (line 141) 49378* G <1>: System V Options. (line 10) 49379* G <2>: RS/6000 and PowerPC Options. 49380 (line 770) 49381* G <3>: Nios II Options. (line 9) 49382* G <4>: MIPS Options. (line 440) 49383* G: M32R/D Options. (line 57) 49384* g: Debugging Options. (line 10) 49385* gcoff: Debugging Options. (line 94) 49386* gdwarf-VERSION: Debugging Options. (line 112) 49387* gen-decls: Objective-C and Objective-C++ Dialect Options. 49388 (line 167) 49389* gfull: Darwin Options. (line 69) 49390* ggdb: Debugging Options. (line 45) 49391* ggnu-pubnames: Debugging Options. (line 54) 49392* gno-record-gcc-switches: Debugging Options. (line 133) 49393* gno-strict-dwarf: Debugging Options. (line 143) 49394* gpubnames: Debugging Options. (line 51) 49395* grecord-gcc-switches: Debugging Options. (line 124) 49396* gsplit-dwarf: Debugging Options. (line 38) 49397* gstabs: Debugging Options. (line 59) 49398* gstabs+: Debugging Options. (line 88) 49399* gstrict-dwarf: Debugging Options. (line 137) 49400* gtoggle: Debugging Options. (line 191) 49401* gused: Darwin Options. (line 64) 49402* gvms: Debugging Options. (line 158) 49403* gxcoff: Debugging Options. (line 99) 49404* gxcoff+: Debugging Options. (line 104) 49405* gz: Debugging Options. (line 147) 49406* H: Preprocessor Options. 49407 (line 709) 49408* headerpad_max_install_names: Darwin Options. (line 196) 49409* help <1>: Preprocessor Options. 49410 (line 701) 49411* help: Overall Options. (line 221) 49412* I <1>: Directory Options. (line 10) 49413* I: Preprocessor Options. 49414 (line 77) 49415* I- <1>: Directory Options. (line 118) 49416* I-: Preprocessor Options. 49417 (line 387) 49418* idirafter: Preprocessor Options. 49419 (line 429) 49420* iframework: Darwin Options. (line 57) 49421* imacros: Preprocessor Options. 49422 (line 420) 49423* image_base: Darwin Options. (line 196) 49424* imultilib: Preprocessor Options. 49425 (line 454) 49426* include: Preprocessor Options. 49427 (line 409) 49428* init: Darwin Options. (line 196) 49429* install_name: Darwin Options. (line 196) 49430* iplugindir=: Directory Options. (line 31) 49431* iprefix: Preprocessor Options. 49432 (line 436) 49433* iquote <1>: Directory Options. (line 36) 49434* iquote: Preprocessor Options. 49435 (line 466) 49436* isysroot: Preprocessor Options. 49437 (line 448) 49438* isystem: Preprocessor Options. 49439 (line 458) 49440* iwithprefix: Preprocessor Options. 49441 (line 442) 49442* iwithprefixbefore: Preprocessor Options. 49443 (line 442) 49444* keep_private_externs: Darwin Options. (line 196) 49445* L: Directory Options. (line 42) 49446* l: Link Options. (line 32) 49447* lobjc: Link Options. (line 59) 49448* m: RS/6000 and PowerPC Options. 49449 (line 611) 49450* M: Preprocessor Options. 49451 (line 185) 49452* m1: SH Options. (line 9) 49453* m10: PDP-11 Options. (line 29) 49454* m128bit-long-double: x86 Options. (line 396) 49455* m16: x86 Options. (line 965) 49456* m16-bit <1>: NDS32 Options. (line 39) 49457* m16-bit: CRIS Options. (line 64) 49458* m1reg-: Adapteva Epiphany Options. 49459 (line 132) 49460* m2: SH Options. (line 12) 49461* m210: MCore Options. (line 43) 49462* m2a: SH Options. (line 30) 49463* m2a-nofpu: SH Options. (line 18) 49464* m2a-single: SH Options. (line 26) 49465* m2a-single-only: SH Options. (line 22) 49466* m3: SH Options. (line 34) 49467* m31: S/390 and zSeries Options. 49468 (line 87) 49469* m32 <1>: x86 Options. (line 965) 49470* m32 <2>: TILEPro Options. (line 13) 49471* m32 <3>: TILE-Gx Options. (line 23) 49472* m32 <4>: SPARC Options. (line 257) 49473* m32 <5>: RS/6000 and PowerPC Options. 49474 (line 303) 49475* m32: Nvidia PTX Options. (line 10) 49476* m32-bit: CRIS Options. (line 64) 49477* m32bit-doubles <1>: RX Options. (line 10) 49478* m32bit-doubles: RL78 Options. (line 22) 49479* m32r: M32R/D Options. (line 15) 49480* m32r2: M32R/D Options. (line 9) 49481* m32rx: M32R/D Options. (line 12) 49482* m340: MCore Options. (line 43) 49483* m3dnow: x86 Options. (line 609) 49484* m3e: SH Options. (line 37) 49485* m4: SH Options. (line 51) 49486* m4-100: SH Options. (line 54) 49487* m4-100-nofpu: SH Options. (line 57) 49488* m4-100-single: SH Options. (line 61) 49489* m4-100-single-only: SH Options. (line 65) 49490* m4-200: SH Options. (line 69) 49491* m4-200-nofpu: SH Options. (line 72) 49492* m4-200-single: SH Options. (line 76) 49493* m4-200-single-only: SH Options. (line 80) 49494* m4-300: SH Options. (line 84) 49495* m4-300-nofpu: SH Options. (line 87) 49496* m4-300-single: SH Options. (line 91) 49497* m4-300-single-only: SH Options. (line 95) 49498* m4-340: SH Options. (line 99) 49499* m4-500: SH Options. (line 102) 49500* m4-nofpu: SH Options. (line 40) 49501* m4-single: SH Options. (line 47) 49502* m4-single-only: SH Options. (line 43) 49503* m40: PDP-11 Options. (line 23) 49504* m45: PDP-11 Options. (line 26) 49505* m4a: SH Options. (line 118) 49506* m4a-nofpu: SH Options. (line 106) 49507* m4a-single: SH Options. (line 114) 49508* m4a-single-only: SH Options. (line 110) 49509* m4al: SH Options. (line 121) 49510* m4byte-functions: MCore Options. (line 27) 49511* m5-32media: SH Options. (line 126) 49512* m5-32media-nofpu: SH Options. (line 129) 49513* m5-64media: SH Options. (line 133) 49514* m5-64media-nofpu: SH Options. (line 136) 49515* m5-compact: SH Options. (line 140) 49516* m5-compact-nofpu: SH Options. (line 143) 49517* m5200: M680x0 Options. (line 147) 49518* m5206e: M680x0 Options. (line 156) 49519* m528x: M680x0 Options. (line 160) 49520* m5307: M680x0 Options. (line 164) 49521* m5407: M680x0 Options. (line 168) 49522* m64 <1>: x86 Options. (line 965) 49523* m64 <2>: TILE-Gx Options. (line 23) 49524* m64 <3>: SPARC Options. (line 257) 49525* m64 <4>: S/390 and zSeries Options. 49526 (line 87) 49527* m64 <5>: RS/6000 and PowerPC Options. 49528 (line 303) 49529* m64: Nvidia PTX Options. (line 10) 49530* m64bit-doubles <1>: RX Options. (line 10) 49531* m64bit-doubles: RL78 Options. (line 22) 49532* m68000: M680x0 Options. (line 95) 49533* m68010: M680x0 Options. (line 103) 49534* m68020: M680x0 Options. (line 109) 49535* m68020-40: M680x0 Options. (line 178) 49536* m68020-60: M680x0 Options. (line 187) 49537* m68030: M680x0 Options. (line 114) 49538* m68040: M680x0 Options. (line 119) 49539* m68060: M680x0 Options. (line 128) 49540* m68881: M680x0 Options. (line 197) 49541* m8-bit: CRIS Options. (line 64) 49542* m8bit-idiv: x86 Options. (line 940) 49543* m8byte-align: V850 Options. (line 170) 49544* m96bit-long-double: x86 Options. (line 396) 49545* mA6: ARC Options. (line 19) 49546* mA7: ARC Options. (line 26) 49547* mabi <1>: x86 Options. (line 795) 49548* mabi <2>: RS/6000 and PowerPC Options. 49549 (line 638) 49550* mabi <3>: ARM Options. (line 9) 49551* mabi: AArch64 Options. (line 9) 49552* mabi=32: MIPS Options. (line 157) 49553* mabi=64: MIPS Options. (line 157) 49554* mabi=eabi: MIPS Options. (line 157) 49555* mabi=elfv1: RS/6000 and PowerPC Options. 49556 (line 659) 49557* mabi=elfv2: RS/6000 and PowerPC Options. 49558 (line 665) 49559* mabi=gnu: MMIX Options. (line 20) 49560* mabi=ibmlongdouble: RS/6000 and PowerPC Options. 49561 (line 651) 49562* mabi=ieeelongdouble: RS/6000 and PowerPC Options. 49563 (line 655) 49564* mabi=mmixware: MMIX Options. (line 20) 49565* mabi=n32: MIPS Options. (line 157) 49566* mabi=no-spe: RS/6000 and PowerPC Options. 49567 (line 648) 49568* mabi=o64: MIPS Options. (line 157) 49569* mabi=spe: RS/6000 and PowerPC Options. 49570 (line 643) 49571* mabicalls: MIPS Options. (line 194) 49572* mabm: x86 Options. (line 611) 49573* mabort-on-noreturn: ARM Options. (line 191) 49574* mabs=2008: MIPS Options. (line 302) 49575* mabs=legacy: MIPS Options. (line 302) 49576* mabsdiff: MeP Options. (line 7) 49577* mabshi: PDP-11 Options. (line 55) 49578* mac0: PDP-11 Options. (line 16) 49579* macc-4: FRV Options. (line 113) 49580* macc-8: FRV Options. (line 116) 49581* maccumulate-args: AVR Options. (line 147) 49582* maccumulate-outgoing-args <1>: x86 Options. (line 818) 49583* maccumulate-outgoing-args: SH Options. (line 400) 49584* maddress-mode=long: x86 Options. (line 1012) 49585* maddress-mode=short: x86 Options. (line 1017) 49586* maddress-space-conversion: SPU Options. (line 63) 49587* mads: RS/6000 and PowerPC Options. 49588 (line 693) 49589* maes: x86 Options. (line 597) 49590* maix-struct-return: RS/6000 and PowerPC Options. 49591 (line 631) 49592* maix32: RS/6000 and PowerPC Options. 49593 (line 341) 49594* maix64: RS/6000 and PowerPC Options. 49595 (line 341) 49596* malign-300: H8/300 Options. (line 41) 49597* malign-call: ARC Options. (line 194) 49598* malign-data: x86 Options. (line 435) 49599* malign-double: x86 Options. (line 380) 49600* malign-int: M680x0 Options. (line 267) 49601* malign-labels: FRV Options. (line 104) 49602* malign-loops: M32R/D Options. (line 73) 49603* malign-natural: RS/6000 and PowerPC Options. 49604 (line 380) 49605* malign-power: RS/6000 and PowerPC Options. 49606 (line 380) 49607* mall-opts: MeP Options. (line 11) 49608* malloc-cc: FRV Options. (line 25) 49609* maltivec: RS/6000 and PowerPC Options. 49610 (line 136) 49611* maltivec=be: RS/6000 and PowerPC Options. 49612 (line 152) 49613* maltivec=le: RS/6000 and PowerPC Options. 49614 (line 162) 49615* mam33: MN10300 Options. (line 17) 49616* mam33-2: MN10300 Options. (line 24) 49617* mam34: MN10300 Options. (line 27) 49618* mandroid: GNU/Linux Options. (line 21) 49619* mannotate-align: ARC Options. (line 135) 49620* mapcs: ARM Options. (line 21) 49621* mapcs-frame: ARM Options. (line 13) 49622* mapp-regs <1>: V850 Options. (line 181) 49623* mapp-regs: SPARC Options. (line 10) 49624* mARC600: ARC Options. (line 19) 49625* mARC601: ARC Options. (line 23) 49626* mARC700: ARC Options. (line 26) 49627* march <1>: x86 Options. (line 9) 49628* march <2>: S/390 and zSeries Options. 49629 (line 116) 49630* march <3>: NDS32 Options. (line 52) 49631* march <4>: MIPS Options. (line 14) 49632* march <5>: M680x0 Options. (line 12) 49633* march <6>: HPPA Options. (line 9) 49634* march <7>: CRIS Options. (line 10) 49635* march <8>: C6X Options. (line 7) 49636* march <9>: ARM Options. (line 65) 49637* march: AArch64 Options. (line 79) 49638* marclinux: ARC Options. (line 142) 49639* marclinux_prof: ARC Options. (line 148) 49640* margonaut: ARC Options. (line 346) 49641* marm: ARM Options. (line 261) 49642* mas100-syntax: RX Options. (line 76) 49643* masm-hex: MSP430 Options. (line 9) 49644* masm-syntax-unified: ARM Options. (line 350) 49645* masm=DIALECT: x86 Options. (line 334) 49646* matomic-model=MODEL: SH Options. (line 214) 49647* matomic-updates: SPU Options. (line 78) 49648* mauto-modify-reg: ARC Options. (line 197) 49649* mauto-pic: IA-64 Options. (line 50) 49650* maverage: MeP Options. (line 16) 49651* mavoid-indexed-addresses: RS/6000 and PowerPC Options. 49652 (line 450) 49653* mavx: x86 Options. (line 590) 49654* mavx256-split-unaligned-load: x86 Options. (line 948) 49655* mavx256-split-unaligned-store: x86 Options. (line 948) 49656* max-vect-align: Adapteva Epiphany Options. 49657 (line 120) 49658* mb: SH Options. (line 147) 49659* mbackchain: S/390 and zSeries Options. 49660 (line 35) 49661* mbarrel-shift-enabled: LM32 Options. (line 9) 49662* mbarrel-shifter: ARC Options. (line 10) 49663* mbarrel_shifter: ARC Options. (line 363) 49664* mbase-addresses: MMIX Options. (line 54) 49665* mbased=: MeP Options. (line 20) 49666* mbbit-peephole: ARC Options. (line 200) 49667* mbcopy: PDP-11 Options. (line 36) 49668* mbcopy-builtin: PDP-11 Options. (line 32) 49669* mbig: RS/6000 and PowerPC Options. 49670 (line 530) 49671* mbig-endian <1>: TILE-Gx Options. (line 29) 49672* mbig-endian <2>: RS/6000 and PowerPC Options. 49673 (line 530) 49674* mbig-endian <3>: NDS32 Options. (line 9) 49675* mbig-endian <4>: MicroBlaze Options. (line 57) 49676* mbig-endian <5>: MCore Options. (line 39) 49677* mbig-endian <6>: IA-64 Options. (line 9) 49678* mbig-endian <7>: C6X Options. (line 13) 49679* mbig-endian <8>: ARM Options. (line 61) 49680* mbig-endian <9>: ARC Options. (line 349) 49681* mbig-endian: AArch64 Options. (line 20) 49682* mbig-endian-data: RX Options. (line 42) 49683* mbig-switch: V850 Options. (line 176) 49684* mbigtable: SH Options. (line 162) 49685* mbionic: GNU/Linux Options. (line 17) 49686* mbit-align: RS/6000 and PowerPC Options. 49687 (line 482) 49688* mbit-ops: CR16 Options. (line 25) 49689* mbitfield: M680x0 Options. (line 235) 49690* mbitops <1>: SH Options. (line 166) 49691* mbitops: MeP Options. (line 26) 49692* mblock-move-inline-limit: RS/6000 and PowerPC Options. 49693 (line 764) 49694* mbmi: x86 Options. (line 612) 49695* mbranch-cheap: PDP-11 Options. (line 65) 49696* mbranch-cost <1>: MIPS Options. (line 757) 49697* mbranch-cost <2>: AVR Options. (line 162) 49698* mbranch-cost: Adapteva Epiphany Options. 49699 (line 18) 49700* mbranch-cost=NUM: SH Options. (line 466) 49701* mbranch-cost=NUMBER: M32R/D Options. (line 82) 49702* mbranch-expensive: PDP-11 Options. (line 61) 49703* mbranch-hints: SPU Options. (line 27) 49704* mbranch-likely: MIPS Options. (line 764) 49705* mbranch-predict: MMIX Options. (line 49) 49706* mbss-plt: RS/6000 and PowerPC Options. 49707 (line 189) 49708* mbuild-constants: DEC Alpha Options. (line 141) 49709* mbwx: DEC Alpha Options. (line 163) 49710* mbypass-cache: Nios II Options. (line 72) 49711* mc68000: M680x0 Options. (line 95) 49712* mc68020: M680x0 Options. (line 109) 49713* mc=: MeP Options. (line 31) 49714* mcache-block-size: NDS32 Options. (line 48) 49715* mcache-size: SPU Options. (line 70) 49716* mcache-volatile: Nios II Options. (line 78) 49717* mcall-eabi: RS/6000 and PowerPC Options. 49718 (line 605) 49719* mcall-freebsd: RS/6000 and PowerPC Options. 49720 (line 619) 49721* mcall-linux: RS/6000 and PowerPC Options. 49722 (line 615) 49723* mcall-netbsd: RS/6000 and PowerPC Options. 49724 (line 623) 49725* mcall-prologues: AVR Options. (line 167) 49726* mcall-sysv: RS/6000 and PowerPC Options. 49727 (line 597) 49728* mcall-sysv-eabi: RS/6000 and PowerPC Options. 49729 (line 605) 49730* mcall-sysv-noeabi: RS/6000 and PowerPC Options. 49731 (line 608) 49732* mcallee-super-interworking: ARM Options. (line 279) 49733* mcaller-super-interworking: ARM Options. (line 286) 49734* mcallgraph-data: MCore Options. (line 31) 49735* mcase-vector-pcrel: ARC Options. (line 208) 49736* mcbcond: SPARC Options. (line 224) 49737* mcbranch-force-delay-slot: SH Options. (line 481) 49738* mcc-init: CRIS Options. (line 41) 49739* mcfv4e: M680x0 Options. (line 172) 49740* mcheck-zero-division: MIPS Options. (line 551) 49741* mcix: DEC Alpha Options. (line 163) 49742* mcld: x86 Options. (line 668) 49743* mclear-hwcap: Solaris 2 Options. (line 9) 49744* mclfushopt: x86 Options. (line 599) 49745* mclip: MeP Options. (line 35) 49746* mcmodel <1>: SPARC Options. (line 262) 49747* mcmodel: NDS32 Options. (line 55) 49748* mcmodel=kernel: x86 Options. (line 996) 49749* mcmodel=large <1>: x86 Options. (line 1008) 49750* mcmodel=large <2>: TILE-Gx Options. (line 14) 49751* mcmodel=large <3>: RS/6000 and PowerPC Options. 49752 (line 130) 49753* mcmodel=large: AArch64 Options. (line 44) 49754* mcmodel=medium <1>: x86 Options. (line 1001) 49755* mcmodel=medium: RS/6000 and PowerPC Options. 49756 (line 126) 49757* mcmodel=small <1>: x86 Options. (line 990) 49758* mcmodel=small <2>: TILE-Gx Options. (line 9) 49759* mcmodel=small <3>: RS/6000 and PowerPC Options. 49760 (line 122) 49761* mcmodel=small: AArch64 Options. (line 38) 49762* mcmodel=tiny: AArch64 Options. (line 31) 49763* mcmov: NDS32 Options. (line 21) 49764* mcmove: Adapteva Epiphany Options. 49765 (line 23) 49766* mcmpb: RS/6000 and PowerPC Options. 49767 (line 27) 49768* mcode-readable: MIPS Options. (line 511) 49769* mcompact-casesi: ARC Options. (line 212) 49770* mcompat-align-parm: RS/6000 and PowerPC Options. 49771 (line 944) 49772* mcond-exec: FRV Options. (line 152) 49773* mcond-move: FRV Options. (line 128) 49774* mconfig=: MeP Options. (line 39) 49775* mconsole: x86 Windows Options. 49776 (line 9) 49777* mconst-align: CRIS Options. (line 55) 49778* mconst16: Xtensa Options. (line 10) 49779* mconstant-gp: IA-64 Options. (line 46) 49780* mcop: MeP Options. (line 48) 49781* mcop32: MeP Options. (line 53) 49782* mcop64: MeP Options. (line 56) 49783* mcorea: Blackfin Options. (line 157) 49784* mcoreb: Blackfin Options. (line 164) 49785* mcpu <1>: x86 Options. (line 282) 49786* mcpu <2>: Visium Options. (line 33) 49787* mcpu <3>: TILEPro Options. (line 9) 49788* mcpu <4>: TILE-Gx Options. (line 18) 49789* mcpu <5>: SPARC Options. (line 102) 49790* mcpu <6>: RX Options. (line 30) 49791* mcpu <7>: RS/6000 and PowerPC Options. 49792 (line 69) 49793* mcpu <8>: picoChip Options. (line 9) 49794* mcpu <9>: M680x0 Options. (line 28) 49795* mcpu <10>: FRV Options. (line 212) 49796* mcpu <11>: DEC Alpha Options. (line 215) 49797* mcpu <12>: CRIS Options. (line 10) 49798* mcpu <13>: ARM Options. (line 130) 49799* mcpu <14>: ARC Options. (line 14) 49800* mcpu: AArch64 Options. (line 112) 49801* mcpu32: M680x0 Options. (line 138) 49802* mcpu= <1>: MSP430 Options. (line 34) 49803* mcpu= <2>: MicroBlaze Options. (line 20) 49804* mcpu= <3>: M32C Options. (line 7) 49805* mcpu=: Blackfin Options. (line 7) 49806* mcr16c: CR16 Options. (line 14) 49807* mcr16cplus: CR16 Options. (line 14) 49808* mcrc32: x86 Options. (line 715) 49809* mcrypto: RS/6000 and PowerPC Options. 49810 (line 224) 49811* mcsync-anomaly: Blackfin Options. (line 60) 49812* mctor-dtor: NDS32 Options. (line 71) 49813* mcustom-fpu-cfg: Nios II Options. (line 220) 49814* mcustom-INSN: Nios II Options. (line 99) 49815* mcx16: x86 Options. (line 692) 49816* MD: Preprocessor Options. 49817 (line 274) 49818* mdalign: SH Options. (line 153) 49819* mdata-align: CRIS Options. (line 55) 49820* mdata-model: CR16 Options. (line 28) 49821* mdc: MeP Options. (line 62) 49822* mdebug <1>: Visium Options. (line 7) 49823* mdebug <2>: S/390 and zSeries Options. 49824 (line 112) 49825* mdebug: M32R/D Options. (line 69) 49826* mdebug-main=PREFIX: VMS Options. (line 13) 49827* mdec-asm: PDP-11 Options. (line 72) 49828* mdirect-move: RS/6000 and PowerPC Options. 49829 (line 230) 49830* mdisable-callt: V850 Options. (line 92) 49831* mdisable-fpregs: HPPA Options. (line 27) 49832* mdisable-indexing: HPPA Options. (line 33) 49833* mdiv <1>: MeP Options. (line 65) 49834* mdiv <2>: MCore Options. (line 15) 49835* mdiv: M680x0 Options. (line 209) 49836* mdiv=STRATEGY: SH Options. (line 308) 49837* mdivide-breaks: MIPS Options. (line 557) 49838* mdivide-enabled: LM32 Options. (line 12) 49839* mdivide-traps: MIPS Options. (line 557) 49840* mdivsi3_libfunc=NAME: SH Options. (line 406) 49841* mdll: x86 Windows Options. 49842 (line 16) 49843* mdlmzb: RS/6000 and PowerPC Options. 49844 (line 475) 49845* mdmx: MIPS Options. (line 378) 49846* mdouble: FRV Options. (line 38) 49847* mdouble-float <1>: RS/6000 and PowerPC Options. 49848 (line 398) 49849* mdouble-float: MIPS Options. (line 290) 49850* mdpfp: ARC Options. (line 30) 49851* mdpfp-compact: ARC Options. (line 31) 49852* mdpfp-fast: ARC Options. (line 35) 49853* mdpfp_compact: ARC Options. (line 366) 49854* mdpfp_fast: ARC Options. (line 369) 49855* mdsp: MIPS Options. (line 355) 49856* mdsp-packa: ARC Options. (line 89) 49857* mdsp_packa: ARC Options. (line 372) 49858* mdspr2: MIPS Options. (line 361) 49859* mdual-nops: SPU Options. (line 90) 49860* mdump-tune-features: x86 Options. (line 649) 49861* mdvbf: ARC Options. (line 93) 49862* mdwarf2-asm: IA-64 Options. (line 94) 49863* mdword: FRV Options. (line 32) 49864* mdynamic-no-pic: RS/6000 and PowerPC Options. 49865 (line 535) 49866* mEA: ARC Options. (line 375) 49867* mea: ARC Options. (line 43) 49868* mea32: SPU Options. (line 55) 49869* mea64: SPU Options. (line 55) 49870* meabi: RS/6000 and PowerPC Options. 49871 (line 712) 49872* mearly-cbranchsi: ARC Options. (line 231) 49873* mearly-stop-bits: IA-64 Options. (line 100) 49874* meb <1>: Score Options. (line 9) 49875* meb <2>: Nios II Options. (line 67) 49876* meb <3>: Moxie Options. (line 7) 49877* meb: MeP Options. (line 68) 49878* mel <1>: Score Options. (line 12) 49879* mel <2>: Nios II Options. (line 67) 49880* mel <3>: Moxie Options. (line 11) 49881* mel: MeP Options. (line 71) 49882* melf <1>: MMIX Options. (line 44) 49883* melf: CRIS Options. (line 87) 49884* memb: RS/6000 and PowerPC Options. 49885 (line 707) 49886* membedded-data: MIPS Options. (line 498) 49887* memregs=: M32C Options. (line 21) 49888* mep: V850 Options. (line 16) 49889* mepilogue-cfi: ARC Options. (line 157) 49890* mepsilon: MMIX Options. (line 15) 49891* merror-reloc: SPU Options. (line 10) 49892* mesa: S/390 and zSeries Options. 49893 (line 95) 49894* metrax100: CRIS Options. (line 26) 49895* metrax4: CRIS Options. (line 26) 49896* meva: MIPS Options. (line 405) 49897* mexpand-adddi: ARC Options. (line 234) 49898* mexplicit-relocs <1>: MIPS Options. (line 542) 49899* mexplicit-relocs: DEC Alpha Options. (line 176) 49900* mexr: H8/300 Options. (line 28) 49901* mextern-sdata: MIPS Options. (line 460) 49902* MF: Preprocessor Options. 49903 (line 220) 49904* mf16c: x86 Options. (line 602) 49905* mfast-fp: Blackfin Options. (line 133) 49906* mfast-indirect-calls: HPPA Options. (line 45) 49907* mfast-sw-div: Nios II Options. (line 84) 49908* mfaster-structs: SPARC Options. (line 92) 49909* mfdpic: FRV Options. (line 56) 49910* mfentry: x86 Options. (line 907) 49911* mfix: DEC Alpha Options. (line 163) 49912* mfix-24k: MIPS Options. (line 617) 49913* mfix-and-continue: Darwin Options. (line 104) 49914* mfix-at697f: SPARC Options. (line 244) 49915* mfix-cortex-a53-835769: AArch64 Options. (line 67) 49916* mfix-cortex-a53-843419: AArch64 Options. (line 74) 49917* mfix-cortex-m3-ldrd: ARM Options. (line 319) 49918* mfix-r10000: MIPS Options. (line 644) 49919* mfix-r4000: MIPS Options. (line 623) 49920* mfix-r4400: MIPS Options. (line 637) 49921* mfix-rm7000: MIPS Options. (line 655) 49922* mfix-sb1: MIPS Options. (line 681) 49923* mfix-ut699: SPARC Options. (line 249) 49924* mfix-vr4120: MIPS Options. (line 660) 49925* mfix-vr4130: MIPS Options. (line 674) 49926* mfixed-cc: FRV Options. (line 28) 49927* mfixed-range <1>: SPU Options. (line 47) 49928* mfixed-range <2>: SH Options. (line 413) 49929* mfixed-range <3>: IA-64 Options. (line 105) 49930* mfixed-range: HPPA Options. (line 52) 49931* mflat: SPARC Options. (line 22) 49932* mflip-mips16: MIPS Options. (line 128) 49933* mfloat-abi: ARM Options. (line 41) 49934* mfloat-gprs: RS/6000 and PowerPC Options. 49935 (line 286) 49936* mfloat-ieee: DEC Alpha Options. (line 171) 49937* mfloat-vax: DEC Alpha Options. (line 171) 49938* mfloat32: PDP-11 Options. (line 52) 49939* mfloat64: PDP-11 Options. (line 48) 49940* mflush-func: MIPS Options. (line 748) 49941* mflush-func=NAME: M32R/D Options. (line 93) 49942* mflush-trap=NUMBER: M32R/D Options. (line 86) 49943* mfma: x86 Options. (line 603) 49944* mfmaf: SPARC Options. (line 238) 49945* mfmovd: SH Options. (line 169) 49946* mforce-no-pic: Xtensa Options. (line 41) 49947* mfp-exceptions: MIPS Options. (line 775) 49948* mfp-mode: Adapteva Epiphany Options. 49949 (line 72) 49950* mfp-reg: DEC Alpha Options. (line 25) 49951* mfp-rounding-mode: DEC Alpha Options. (line 85) 49952* mfp-trap-mode: DEC Alpha Options. (line 63) 49953* mfp16-format: ARM Options. (line 171) 49954* mfp32: MIPS Options. (line 260) 49955* mfp64: MIPS Options. (line 263) 49956* mfpmath <1>: x86 Options. (line 285) 49957* mfpmath: Optimize Options. (line 2068) 49958* mfpr-32: FRV Options. (line 13) 49959* mfpr-64: FRV Options. (line 16) 49960* mfprnd: RS/6000 and PowerPC Options. 49961 (line 27) 49962* mfpu <1>: Visium Options. (line 19) 49963* mfpu <2>: SPARC Options. (line 35) 49964* mfpu <3>: RS/6000 and PowerPC Options. 49965 (line 406) 49966* mfpu <4>: PDP-11 Options. (line 9) 49967* mfpu: ARM Options. (line 150) 49968* mfpxx: MIPS Options. (line 266) 49969* mfriz: RS/6000 and PowerPC Options. 49970 (line 915) 49971* mfsca: SH Options. (line 497) 49972* mfsgsbase: x86 Options. (line 600) 49973* mfsrra: SH Options. (line 506) 49974* mfull-regs: NDS32 Options. (line 18) 49975* mfull-toc: RS/6000 and PowerPC Options. 49976 (line 314) 49977* mfused-madd <1>: Xtensa Options. (line 19) 49978* mfused-madd <2>: SH Options. (line 488) 49979* mfused-madd <3>: S/390 and zSeries Options. 49980 (line 137) 49981* mfused-madd <4>: RS/6000 and PowerPC Options. 49982 (line 459) 49983* mfused-madd <5>: MIPS Options. (line 599) 49984* mfused-madd: IA-64 Options. (line 88) 49985* mfxsr: x86 Options. (line 615) 49986* mg: VAX Options. (line 17) 49987* MG: Preprocessor Options. 49988 (line 229) 49989* mgas: HPPA Options. (line 68) 49990* mgcc-abi: V850 Options. (line 148) 49991* mgen-cell-microcode: RS/6000 and PowerPC Options. 49992 (line 177) 49993* mgeneral-regs-only: AArch64 Options. (line 24) 49994* mgettrcost=NUMBER: SH Options. (line 430) 49995* mghs: V850 Options. (line 127) 49996* mglibc: GNU/Linux Options. (line 9) 49997* mgnu: VAX Options. (line 13) 49998* mgnu-as: IA-64 Options. (line 18) 49999* mgnu-ld <1>: IA-64 Options. (line 23) 50000* mgnu-ld: HPPA Options. (line 104) 50001* mgotplt: CRIS Options. (line 81) 50002* mgp32: MIPS Options. (line 254) 50003* mgp64: MIPS Options. (line 257) 50004* mgpopt <1>: Nios II Options. (line 17) 50005* mgpopt: MIPS Options. (line 483) 50006* mgpr-32: FRV Options. (line 7) 50007* mgpr-64: FRV Options. (line 10) 50008* mgprel-ro: FRV Options. (line 79) 50009* mh: H8/300 Options. (line 14) 50010* mhal: Nios II Options. (line 266) 50011* mhalf-reg-file: Adapteva Epiphany Options. 50012 (line 9) 50013* mhard-dfp <1>: S/390 and zSeries Options. 50014 (line 20) 50015* mhard-dfp: RS/6000 and PowerPC Options. 50016 (line 27) 50017* mhard-float <1>: Visium Options. (line 19) 50018* mhard-float <2>: V850 Options. (line 113) 50019* mhard-float <3>: SPARC Options. (line 35) 50020* mhard-float <4>: S/390 and zSeries Options. 50021 (line 11) 50022* mhard-float <5>: RS/6000 and PowerPC Options. 50023 (line 392) 50024* mhard-float <6>: MIPS Options. (line 269) 50025* mhard-float <7>: MicroBlaze Options. (line 10) 50026* mhard-float <8>: M680x0 Options. (line 197) 50027* mhard-float: FRV Options. (line 19) 50028* mhard-quad-float: SPARC Options. (line 56) 50029* mhardlit: MCore Options. (line 10) 50030* mhint-max-distance: SPU Options. (line 102) 50031* mhint-max-nops: SPU Options. (line 96) 50032* mhotpatch: S/390 and zSeries Options. 50033 (line 173) 50034* mhp-ld: HPPA Options. (line 116) 50035* mhw-div: Nios II Options. (line 93) 50036* mhw-mul: Nios II Options. (line 93) 50037* mhw-mulx: Nios II Options. (line 93) 50038* mhwmult=: MSP430 Options. (line 55) 50039* micplb: Blackfin Options. (line 178) 50040* mid-shared-library: Blackfin Options. (line 81) 50041* mieee <1>: SH Options. (line 186) 50042* mieee: DEC Alpha Options. (line 39) 50043* mieee-conformant: DEC Alpha Options. (line 134) 50044* mieee-fp: x86 Options. (line 342) 50045* mieee-with-inexact: DEC Alpha Options. (line 52) 50046* milp32: IA-64 Options. (line 121) 50047* mimadd: MIPS Options. (line 592) 50048* mimpure-text: Solaris 2 Options. (line 16) 50049* mincoming-stack-boundary: x86 Options. (line 556) 50050* mindexed-addressing: SH Options. (line 420) 50051* mindexed-loads: ARC Options. (line 238) 50052* minline-all-stringops: x86 Options. (line 839) 50053* minline-float-divide-max-throughput: IA-64 Options. (line 58) 50054* minline-float-divide-min-latency: IA-64 Options. (line 54) 50055* minline-ic_invalidate: SH Options. (line 195) 50056* minline-int-divide-max-throughput: IA-64 Options. (line 69) 50057* minline-int-divide-min-latency: IA-64 Options. (line 65) 50058* minline-plt <1>: FRV Options. (line 64) 50059* minline-plt: Blackfin Options. (line 138) 50060* minline-sqrt-max-throughput: IA-64 Options. (line 80) 50061* minline-sqrt-min-latency: IA-64 Options. (line 76) 50062* minline-stringops-dynamically: x86 Options. (line 846) 50063* minrt: MSP430 Options. (line 77) 50064* minsert-sched-nops: RS/6000 and PowerPC Options. 50065 (line 575) 50066* mint-register: RX Options. (line 100) 50067* mint16: PDP-11 Options. (line 40) 50068* mint32 <1>: PDP-11 Options. (line 44) 50069* mint32 <2>: H8/300 Options. (line 38) 50070* mint32: CR16 Options. (line 22) 50071* mint8: AVR Options. (line 171) 50072* minterlink-compressed: MIPS Options. (line 136) 50073* minterlink-mips16: MIPS Options. (line 148) 50074* minvalid-symbols: SH Options. (line 456) 50075* mio-volatile: MeP Options. (line 74) 50076* mips1: MIPS Options. (line 80) 50077* mips16: MIPS Options. (line 120) 50078* mips2: MIPS Options. (line 83) 50079* mips3: MIPS Options. (line 86) 50080* mips32: MIPS Options. (line 92) 50081* mips32r3: MIPS Options. (line 95) 50082* mips32r5: MIPS Options. (line 98) 50083* mips32r6: MIPS Options. (line 101) 50084* mips3d: MIPS Options. (line 384) 50085* mips4: MIPS Options. (line 89) 50086* mips64: MIPS Options. (line 104) 50087* mips64r2: MIPS Options. (line 107) 50088* mips64r3: MIPS Options. (line 110) 50089* mips64r5: MIPS Options. (line 113) 50090* mips64r6: MIPS Options. (line 116) 50091* misel: RS/6000 and PowerPC Options. 50092 (line 195) 50093* misize <1>: SH Options. (line 207) 50094* misize: ARC Options. (line 132) 50095* misr-vector-size: NDS32 Options. (line 45) 50096* missue-rate=NUMBER: M32R/D Options. (line 79) 50097* mivc2: MeP Options. (line 59) 50098* mjump-in-delay: HPPA Options. (line 23) 50099* mkernel: Darwin Options. (line 82) 50100* mknuthdiv: MMIX Options. (line 33) 50101* ml <1>: SH Options. (line 150) 50102* ml: MeP Options. (line 78) 50103* mlarge: MSP430 Options. (line 44) 50104* mlarge-data: DEC Alpha Options. (line 187) 50105* mlarge-data-threshold: x86 Options. (line 442) 50106* mlarge-mem: SPU Options. (line 35) 50107* mlarge-text: DEC Alpha Options. (line 205) 50108* mleadz: MeP Options. (line 81) 50109* mleaf-id-shared-library: Blackfin Options. (line 92) 50110* mlibfuncs: MMIX Options. (line 10) 50111* mlibrary-pic: FRV Options. (line 110) 50112* mlinked-fp: FRV Options. (line 94) 50113* mlinker-opt: HPPA Options. (line 78) 50114* mlinux: CRIS Options. (line 91) 50115* mlittle: RS/6000 and PowerPC Options. 50116 (line 524) 50117* mlittle-endian <1>: TILE-Gx Options. (line 29) 50118* mlittle-endian <2>: RS/6000 and PowerPC Options. 50119 (line 524) 50120* mlittle-endian <3>: NDS32 Options. (line 12) 50121* mlittle-endian <4>: MicroBlaze Options. (line 60) 50122* mlittle-endian <5>: MCore Options. (line 39) 50123* mlittle-endian <6>: IA-64 Options. (line 13) 50124* mlittle-endian <7>: C6X Options. (line 16) 50125* mlittle-endian <8>: ARM Options. (line 57) 50126* mlittle-endian <9>: ARC Options. (line 356) 50127* mlittle-endian: AArch64 Options. (line 27) 50128* mlittle-endian-data: RX Options. (line 42) 50129* mliw: MN10300 Options. (line 54) 50130* mllsc: MIPS Options. (line 341) 50131* mlocal-sdata: MIPS Options. (line 448) 50132* mlock: ARC Options. (line 97) 50133* mlong-calls <1>: V850 Options. (line 10) 50134* mlong-calls <2>: MIPS Options. (line 578) 50135* mlong-calls <3>: FRV Options. (line 99) 50136* mlong-calls <4>: Blackfin Options. (line 121) 50137* mlong-calls <5>: ARM Options. (line 196) 50138* mlong-calls <6>: ARC Options. (line 163) 50139* mlong-calls: Adapteva Epiphany Options. 50140 (line 55) 50141* mlong-double-128 <1>: x86 Options. (line 422) 50142* mlong-double-128: S/390 and zSeries Options. 50143 (line 29) 50144* mlong-double-64 <1>: x86 Options. (line 422) 50145* mlong-double-64: S/390 and zSeries Options. 50146 (line 29) 50147* mlong-double-80: x86 Options. (line 422) 50148* mlong-jumps: V850 Options. (line 108) 50149* mlong-load-store: HPPA Options. (line 59) 50150* mlong32: MIPS Options. (line 423) 50151* mlong64: MIPS Options. (line 418) 50152* mlongcall: RS/6000 and PowerPC Options. 50153 (line 784) 50154* mlongcalls: Xtensa Options. (line 72) 50155* mloop: V850 Options. (line 121) 50156* mlow-64k: Blackfin Options. (line 70) 50157* mlp64: IA-64 Options. (line 121) 50158* mlra: ARC Options. (line 243) 50159* mlra-priority-compact: ARC Options. (line 251) 50160* mlra-priority-noncompact: ARC Options. (line 254) 50161* mlra-priority-none: ARC Options. (line 248) 50162* mlwp: x86 Options. (line 608) 50163* mlzcnt: x86 Options. (line 614) 50164* mm: MeP Options. (line 84) 50165* MM: Preprocessor Options. 50166 (line 210) 50167* mmac <1>: Score Options. (line 21) 50168* mmac: CR16 Options. (line 9) 50169* mmac-24: ARC Options. (line 106) 50170* mmac-d16: ARC Options. (line 102) 50171* mmac_24: ARC Options. (line 378) 50172* mmac_d16: ARC Options. (line 381) 50173* mmad: MIPS Options. (line 587) 50174* mmainkernel: Nvidia PTX Options. (line 13) 50175* mmalloc64: VMS Options. (line 17) 50176* mmax: DEC Alpha Options. (line 163) 50177* mmax-constant-size: RX Options. (line 82) 50178* mmax-stack-frame: CRIS Options. (line 22) 50179* mmcount-ra-address: MIPS Options. (line 823) 50180* mmcu <1>: MIPS Options. (line 401) 50181* mmcu: AVR Options. (line 9) 50182* mmcu=: MSP430 Options. (line 14) 50183* MMD: Preprocessor Options. 50184 (line 290) 50185* mmedia: FRV Options. (line 44) 50186* mmedium-calls: ARC Options. (line 167) 50187* mmemcpy <1>: MIPS Options. (line 572) 50188* mmemcpy: MicroBlaze Options. (line 13) 50189* mmemcpy-strategy=STRATEGY: x86 Options. (line 868) 50190* mmemory-latency: DEC Alpha Options. (line 268) 50191* mmemory-model: SPARC Options. (line 290) 50192* mmemset-strategy=STRATEGY: x86 Options. (line 880) 50193* mmfcrf: RS/6000 and PowerPC Options. 50194 (line 27) 50195* mmfpgpr: RS/6000 and PowerPC Options. 50196 (line 27) 50197* mmicromips: MIPS Options. (line 389) 50198* mminimal-toc: RS/6000 and PowerPC Options. 50199 (line 314) 50200* mminmax: MeP Options. (line 87) 50201* mmixed-code: ARC Options. (line 266) 50202* mmmx: x86 Options. (line 581) 50203* mmodel=large: M32R/D Options. (line 33) 50204* mmodel=medium: M32R/D Options. (line 27) 50205* mmodel=small: M32R/D Options. (line 18) 50206* mmovbe: x86 Options. (line 711) 50207* mmpx: x86 Options. (line 622) 50208* mmt: MIPS Options. (line 397) 50209* mmul: RL78 Options. (line 13) 50210* mmul-bug-workaround: CRIS Options. (line 31) 50211* mmul.x: Moxie Options. (line 14) 50212* mmul32x16: ARC Options. (line 51) 50213* mmul64: ARC Options. (line 54) 50214* mmuladd: FRV Options. (line 50) 50215* mmulhw: RS/6000 and PowerPC Options. 50216 (line 468) 50217* mmult: MeP Options. (line 90) 50218* mmult-bug: MN10300 Options. (line 9) 50219* mmultcost: ARC Options. (line 330) 50220* mmulti-cond-exec: FRV Options. (line 176) 50221* mmulticore: Blackfin Options. (line 142) 50222* mmultiple: RS/6000 and PowerPC Options. 50223 (line 418) 50224* mmvcle: S/390 and zSeries Options. 50225 (line 105) 50226* mmvme: RS/6000 and PowerPC Options. 50227 (line 688) 50228* mmwaitx: x86 Options. (line 623) 50229* mn: H8/300 Options. (line 20) 50230* mn-flash: AVR Options. (line 177) 50231* mnan=2008: MIPS Options. (line 322) 50232* mnan=legacy: MIPS Options. (line 322) 50233* mneon-for-64bits: ARM Options. (line 339) 50234* mnested-cond-exec: FRV Options. (line 189) 50235* mnhwloop: Score Options. (line 15) 50236* mno-16-bit: NDS32 Options. (line 42) 50237* mno-4byte-functions: MCore Options. (line 27) 50238* mno-8byte-align: V850 Options. (line 170) 50239* mno-abicalls: MIPS Options. (line 194) 50240* mno-abshi: PDP-11 Options. (line 58) 50241* mno-ac0: PDP-11 Options. (line 20) 50242* mno-address-space-conversion: SPU Options. (line 63) 50243* mno-align-double: x86 Options. (line 380) 50244* mno-align-int: M680x0 Options. (line 267) 50245* mno-align-loops: M32R/D Options. (line 76) 50246* mno-align-stringops: x86 Options. (line 834) 50247* mno-altivec: RS/6000 and PowerPC Options. 50248 (line 136) 50249* mno-am33: MN10300 Options. (line 20) 50250* mno-app-regs <1>: V850 Options. (line 185) 50251* mno-app-regs: SPARC Options. (line 10) 50252* mno-as100-syntax: RX Options. (line 76) 50253* mno-atomic-updates: SPU Options. (line 78) 50254* mno-avoid-indexed-addresses: RS/6000 and PowerPC Options. 50255 (line 450) 50256* mno-backchain: S/390 and zSeries Options. 50257 (line 35) 50258* mno-base-addresses: MMIX Options. (line 54) 50259* mno-bit-align: RS/6000 and PowerPC Options. 50260 (line 482) 50261* mno-bitfield: M680x0 Options. (line 231) 50262* mno-branch-likely: MIPS Options. (line 764) 50263* mno-branch-predict: MMIX Options. (line 49) 50264* mno-brcc: ARC Options. (line 203) 50265* mno-bwx: DEC Alpha Options. (line 163) 50266* mno-bypass-cache: Nios II Options. (line 72) 50267* mno-cache-volatile: Nios II Options. (line 78) 50268* mno-callgraph-data: MCore Options. (line 31) 50269* mno-cbcond: SPARC Options. (line 224) 50270* mno-check-zero-division: MIPS Options. (line 551) 50271* mno-cix: DEC Alpha Options. (line 163) 50272* mno-clearbss: MicroBlaze Options. (line 16) 50273* mno-cmov: NDS32 Options. (line 24) 50274* mno-cmpb: RS/6000 and PowerPC Options. 50275 (line 27) 50276* mno-cond-exec <1>: FRV Options. (line 158) 50277* mno-cond-exec: ARC Options. (line 215) 50278* mno-cond-move: FRV Options. (line 134) 50279* mno-const-align: CRIS Options. (line 55) 50280* mno-const16: Xtensa Options. (line 10) 50281* mno-crt0 <1>: Moxie Options. (line 18) 50282* mno-crt0: MN10300 Options. (line 43) 50283* mno-crypto: RS/6000 and PowerPC Options. 50284 (line 224) 50285* mno-csync-anomaly: Blackfin Options. (line 66) 50286* mno-custom-INSN: Nios II Options. (line 99) 50287* mno-data-align: CRIS Options. (line 55) 50288* mno-debug: S/390 and zSeries Options. 50289 (line 112) 50290* mno-default: x86 Options. (line 664) 50291* mno-direct-move: RS/6000 and PowerPC Options. 50292 (line 230) 50293* mno-disable-callt: V850 Options. (line 92) 50294* mno-div <1>: MCore Options. (line 15) 50295* mno-div: M680x0 Options. (line 209) 50296* mno-dlmzb: RS/6000 and PowerPC Options. 50297 (line 475) 50298* mno-double: FRV Options. (line 41) 50299* mno-dpfp-lrsr: ARC Options. (line 39) 50300* mno-dsp: MIPS Options. (line 355) 50301* mno-dspr2: MIPS Options. (line 361) 50302* mno-dwarf2-asm: IA-64 Options. (line 94) 50303* mno-dword: FRV Options. (line 35) 50304* mno-eabi: RS/6000 and PowerPC Options. 50305 (line 712) 50306* mno-early-stop-bits: IA-64 Options. (line 100) 50307* mno-eflags: FRV Options. (line 125) 50308* mno-embedded-data: MIPS Options. (line 498) 50309* mno-ep: V850 Options. (line 16) 50310* mno-epilogue-cfi: ARC Options. (line 160) 50311* mno-epsilon: MMIX Options. (line 15) 50312* mno-eva: MIPS Options. (line 405) 50313* mno-explicit-relocs <1>: MIPS Options. (line 542) 50314* mno-explicit-relocs: DEC Alpha Options. (line 176) 50315* mno-exr: H8/300 Options. (line 33) 50316* mno-extern-sdata: MIPS Options. (line 460) 50317* mno-fancy-math-387: x86 Options. (line 370) 50318* mno-fast-sw-div: Nios II Options. (line 84) 50319* mno-faster-structs: SPARC Options. (line 92) 50320* mno-fix: DEC Alpha Options. (line 163) 50321* mno-fix-24k: MIPS Options. (line 617) 50322* mno-fix-cortex-a53-835769: AArch64 Options. (line 67) 50323* mno-fix-cortex-a53-843419: AArch64 Options. (line 74) 50324* mno-fix-r10000: MIPS Options. (line 644) 50325* mno-fix-r4000: MIPS Options. (line 623) 50326* mno-fix-r4400: MIPS Options. (line 637) 50327* mno-flat: SPARC Options. (line 22) 50328* mno-float: MIPS Options. (line 276) 50329* mno-float32: PDP-11 Options. (line 48) 50330* mno-float64: PDP-11 Options. (line 52) 50331* mno-flush-func: M32R/D Options. (line 98) 50332* mno-flush-trap: M32R/D Options. (line 90) 50333* mno-fmaf: SPARC Options. (line 238) 50334* mno-fp-in-toc: RS/6000 and PowerPC Options. 50335 (line 314) 50336* mno-fp-regs: DEC Alpha Options. (line 25) 50337* mno-fp-ret-in-387: x86 Options. (line 360) 50338* mno-fprnd: RS/6000 and PowerPC Options. 50339 (line 27) 50340* mno-fpu <1>: Visium Options. (line 24) 50341* mno-fpu: SPARC Options. (line 40) 50342* mno-fsca: SH Options. (line 497) 50343* mno-fsrra: SH Options. (line 506) 50344* mno-fused-madd <1>: Xtensa Options. (line 19) 50345* mno-fused-madd <2>: SH Options. (line 488) 50346* mno-fused-madd <3>: S/390 and zSeries Options. 50347 (line 137) 50348* mno-fused-madd <4>: RS/6000 and PowerPC Options. 50349 (line 459) 50350* mno-fused-madd <5>: MIPS Options. (line 599) 50351* mno-fused-madd: IA-64 Options. (line 88) 50352* mno-gnu-as: IA-64 Options. (line 18) 50353* mno-gnu-ld: IA-64 Options. (line 23) 50354* mno-gotplt: CRIS Options. (line 81) 50355* mno-gpopt <1>: Nios II Options. (line 17) 50356* mno-gpopt: MIPS Options. (line 483) 50357* mno-hard-dfp <1>: S/390 and zSeries Options. 50358 (line 20) 50359* mno-hard-dfp: RS/6000 and PowerPC Options. 50360 (line 27) 50361* mno-hardlit: MCore Options. (line 10) 50362* mno-hw-div: Nios II Options. (line 93) 50363* mno-hw-mul: Nios II Options. (line 93) 50364* mno-hw-mulx: Nios II Options. (line 93) 50365* mno-id-shared-library: Blackfin Options. (line 88) 50366* mno-ieee: SH Options. (line 186) 50367* mno-ieee-fp: x86 Options. (line 342) 50368* mno-imadd: MIPS Options. (line 592) 50369* mno-inline-float-divide: IA-64 Options. (line 62) 50370* mno-inline-int-divide: IA-64 Options. (line 73) 50371* mno-inline-sqrt: IA-64 Options. (line 84) 50372* mno-int16: PDP-11 Options. (line 44) 50373* mno-int32: PDP-11 Options. (line 40) 50374* mno-interlink-compressed: MIPS Options. (line 136) 50375* mno-interlink-mips16: MIPS Options. (line 148) 50376* mno-interrupts: AVR Options. (line 180) 50377* mno-isel: RS/6000 and PowerPC Options. 50378 (line 195) 50379* mno-knuthdiv: MMIX Options. (line 33) 50380* mno-leaf-id-shared-library: Blackfin Options. (line 98) 50381* mno-libfuncs: MMIX Options. (line 10) 50382* mno-llsc: MIPS Options. (line 341) 50383* mno-local-sdata: MIPS Options. (line 448) 50384* mno-long-calls <1>: V850 Options. (line 10) 50385* mno-long-calls <2>: MIPS Options. (line 578) 50386* mno-long-calls <3>: HPPA Options. (line 129) 50387* mno-long-calls <4>: Blackfin Options. (line 121) 50388* mno-long-calls: ARM Options. (line 196) 50389* mno-long-jumps: V850 Options. (line 108) 50390* mno-longcall: RS/6000 and PowerPC Options. 50391 (line 784) 50392* mno-longcalls: Xtensa Options. (line 72) 50393* mno-low-64k: Blackfin Options. (line 74) 50394* mno-lsim <1>: MCore Options. (line 46) 50395* mno-lsim: FR30 Options. (line 14) 50396* mno-mad: MIPS Options. (line 587) 50397* mno-max: DEC Alpha Options. (line 163) 50398* mno-mcount-ra-address: MIPS Options. (line 823) 50399* mno-mcu: MIPS Options. (line 401) 50400* mno-mdmx: MIPS Options. (line 378) 50401* mno-media: FRV Options. (line 47) 50402* mno-memcpy: MIPS Options. (line 572) 50403* mno-mfcrf: RS/6000 and PowerPC Options. 50404 (line 27) 50405* mno-mfpgpr: RS/6000 and PowerPC Options. 50406 (line 27) 50407* mno-millicode: ARC Options. (line 257) 50408* mno-mips16: MIPS Options. (line 120) 50409* mno-mips3d: MIPS Options. (line 384) 50410* mno-mmicromips: MIPS Options. (line 389) 50411* mno-mpy: ARC Options. (line 48) 50412* mno-mt: MIPS Options. (line 397) 50413* mno-mul-bug-workaround: CRIS Options. (line 31) 50414* mno-muladd: FRV Options. (line 53) 50415* mno-mulhw: RS/6000 and PowerPC Options. 50416 (line 468) 50417* mno-mult-bug: MN10300 Options. (line 13) 50418* mno-multi-cond-exec: FRV Options. (line 183) 50419* mno-multiple: RS/6000 and PowerPC Options. 50420 (line 418) 50421* mno-mvcle: S/390 and zSeries Options. 50422 (line 105) 50423* mno-nested-cond-exec: FRV Options. (line 195) 50424* mno-odd-spreg: MIPS Options. (line 295) 50425* mno-omit-leaf-frame-pointer: AArch64 Options. (line 54) 50426* mno-optimize-membar: FRV Options. (line 205) 50427* mno-opts: MeP Options. (line 93) 50428* mno-pack: FRV Options. (line 122) 50429* mno-packed-stack: S/390 and zSeries Options. 50430 (line 54) 50431* mno-paired: RS/6000 and PowerPC Options. 50432 (line 209) 50433* mno-paired-single: MIPS Options. (line 372) 50434* mno-perf-ext: NDS32 Options. (line 30) 50435* mno-pic: IA-64 Options. (line 26) 50436* mno-pid: RX Options. (line 117) 50437* mno-plt: MIPS Options. (line 221) 50438* mno-popc: SPARC Options. (line 231) 50439* mno-popcntb: RS/6000 and PowerPC Options. 50440 (line 27) 50441* mno-popcntd: RS/6000 and PowerPC Options. 50442 (line 27) 50443* mno-postinc: Adapteva Epiphany Options. 50444 (line 110) 50445* mno-postmodify: Adapteva Epiphany Options. 50446 (line 110) 50447* mno-power8-fusion: RS/6000 and PowerPC Options. 50448 (line 236) 50449* mno-power8-vector: RS/6000 and PowerPC Options. 50450 (line 242) 50451* mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 50452 (line 27) 50453* mno-powerpc-gpopt: RS/6000 and PowerPC Options. 50454 (line 27) 50455* mno-powerpc64: RS/6000 and PowerPC Options. 50456 (line 27) 50457* mno-prolog-function: V850 Options. (line 23) 50458* mno-prologue-epilogue: CRIS Options. (line 71) 50459* mno-prototype: RS/6000 and PowerPC Options. 50460 (line 672) 50461* mno-push-args: x86 Options. (line 811) 50462* mno-quad-memory: RS/6000 and PowerPC Options. 50463 (line 249) 50464* mno-quad-memory-atomic: RS/6000 and PowerPC Options. 50465 (line 255) 50466* mno-red-zone: x86 Options. (line 982) 50467* mno-register-names: IA-64 Options. (line 37) 50468* mno-regnames: RS/6000 and PowerPC Options. 50469 (line 778) 50470* mno-relax: V850 Options. (line 103) 50471* mno-relax-immediate: MCore Options. (line 19) 50472* mno-relocatable: RS/6000 and PowerPC Options. 50473 (line 498) 50474* mno-relocatable-lib: RS/6000 and PowerPC Options. 50475 (line 509) 50476* mno-renesas: SH Options. (line 176) 50477* mno-round-nearest: Adapteva Epiphany Options. 50478 (line 51) 50479* mno-rtd: M680x0 Options. (line 262) 50480* mno-scc: FRV Options. (line 146) 50481* mno-sched-ar-data-spec: IA-64 Options. (line 134) 50482* mno-sched-ar-in-data-spec: IA-64 Options. (line 155) 50483* mno-sched-br-data-spec: IA-64 Options. (line 128) 50484* mno-sched-br-in-data-spec: IA-64 Options. (line 148) 50485* mno-sched-control-spec: IA-64 Options. (line 140) 50486* mno-sched-count-spec-in-critical-path: IA-64 Options. (line 182) 50487* mno-sched-in-control-spec: IA-64 Options. (line 162) 50488* mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 175) 50489* mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 168) 50490* mno-sched-prolog: ARM Options. (line 32) 50491* mno-sdata <1>: RS/6000 and PowerPC Options. 50492 (line 759) 50493* mno-sdata <2>: IA-64 Options. (line 42) 50494* mno-sdata: ARC Options. (line 175) 50495* mno-sep-data: Blackfin Options. (line 116) 50496* mno-serialize-volatile: Xtensa Options. (line 35) 50497* mno-short: M680x0 Options. (line 226) 50498* mno-side-effects: CRIS Options. (line 46) 50499* mno-sim: RX Options. (line 71) 50500* mno-single-exit: MMIX Options. (line 66) 50501* mno-slow-bytes: MCore Options. (line 35) 50502* mno-small-exec: S/390 and zSeries Options. 50503 (line 80) 50504* mno-smartmips: MIPS Options. (line 368) 50505* mno-soft-cmpsf: Adapteva Epiphany Options. 50506 (line 29) 50507* mno-soft-float: DEC Alpha Options. (line 10) 50508* mno-space-regs: HPPA Options. (line 38) 50509* mno-spe: RS/6000 and PowerPC Options. 50510 (line 204) 50511* mno-specld-anomaly: Blackfin Options. (line 56) 50512* mno-split-addresses: MIPS Options. (line 536) 50513* mno-stack-align: CRIS Options. (line 55) 50514* mno-stack-bias: SPARC Options. (line 314) 50515* mno-strict-align <1>: RS/6000 and PowerPC Options. 50516 (line 493) 50517* mno-strict-align: M680x0 Options. (line 287) 50518* mno-string: RS/6000 and PowerPC Options. 50519 (line 429) 50520* mno-sum-in-toc: RS/6000 and PowerPC Options. 50521 (line 314) 50522* mno-sym32: MIPS Options. (line 433) 50523* mno-target-align: Xtensa Options. (line 59) 50524* mno-text-section-literals: Xtensa Options. (line 47) 50525* mno-tls-markers: RS/6000 and PowerPC Options. 50526 (line 817) 50527* mno-toc: RS/6000 and PowerPC Options. 50528 (line 518) 50529* mno-toplevel-symbols: MMIX Options. (line 40) 50530* mno-tpf-trace: S/390 and zSeries Options. 50531 (line 131) 50532* mno-unaligned-access: ARM Options. (line 326) 50533* mno-unaligned-doubles: SPARC Options. (line 74) 50534* mno-uninit-const-in-rodata: MIPS Options. (line 506) 50535* mno-update: RS/6000 and PowerPC Options. 50536 (line 440) 50537* mno-upper-regs: RS/6000 and PowerPC Options. 50538 (line 277) 50539* mno-upper-regs-df: RS/6000 and PowerPC Options. 50540 (line 261) 50541* mno-upper-regs-sf: RS/6000 and PowerPC Options. 50542 (line 269) 50543* mno-user-mode: SPARC Options. (line 86) 50544* mno-usermode: SH Options. (line 297) 50545* mno-v3push: NDS32 Options. (line 36) 50546* mno-v8plus: SPARC Options. (line 195) 50547* mno-vect-double: Adapteva Epiphany Options. 50548 (line 116) 50549* mno-virt: MIPS Options. (line 409) 50550* mno-vis: SPARC Options. (line 202) 50551* mno-vis2: SPARC Options. (line 208) 50552* mno-vis3: SPARC Options. (line 216) 50553* mno-vliw-branch: FRV Options. (line 170) 50554* mno-volatile-asm-stop: IA-64 Options. (line 32) 50555* mno-volatile-cache: ARC Options. (line 189) 50556* mno-vrsave: RS/6000 and PowerPC Options. 50557 (line 174) 50558* mno-vsx: RS/6000 and PowerPC Options. 50559 (line 218) 50560* mno-warn-multiple-fast-interrupts: RX Options. (line 143) 50561* mno-wide-bitfields: MCore Options. (line 23) 50562* mno-xgot <1>: MIPS Options. (line 231) 50563* mno-xgot: M680x0 Options. (line 319) 50564* mno-xl-compat: RS/6000 and PowerPC Options. 50565 (line 349) 50566* mno-xpa: MIPS Options. (line 414) 50567* mno-zdcbranch: SH Options. (line 473) 50568* mno-zero-extend: MMIX Options. (line 27) 50569* mnobitfield: M680x0 Options. (line 231) 50570* mnoliw: MN10300 Options. (line 59) 50571* mnomacsave: SH Options. (line 181) 50572* mnop-fun-dllimport: x86 Windows Options. 50573 (line 22) 50574* mnop-mcount: x86 Options. (line 920) 50575* mnops: Adapteva Epiphany Options. 50576 (line 26) 50577* mnorm: ARC Options. (line 58) 50578* mnosetlb: MN10300 Options. (line 69) 50579* mnosplit-lohi: Adapteva Epiphany Options. 50580 (line 110) 50581* modd-spreg: MIPS Options. (line 295) 50582* momit-leaf-frame-pointer <1>: x86 Options. (line 884) 50583* momit-leaf-frame-pointer <2>: Blackfin Options. (line 44) 50584* momit-leaf-frame-pointer: AArch64 Options. (line 54) 50585* mone-byte-bool: Darwin Options. (line 90) 50586* moptimize-membar: FRV Options. (line 201) 50587* MP: Preprocessor Options. 50588 (line 239) 50589* mpa-risc-1-0: HPPA Options. (line 19) 50590* mpa-risc-1-1: HPPA Options. (line 19) 50591* mpa-risc-2-0: HPPA Options. (line 19) 50592* mpack: FRV Options. (line 119) 50593* mpacked-stack: S/390 and zSeries Options. 50594 (line 54) 50595* mpadstruct: SH Options. (line 210) 50596* mpaired: RS/6000 and PowerPC Options. 50597 (line 209) 50598* mpaired-single: MIPS Options. (line 372) 50599* mpc32: x86 Options. (line 505) 50600* mpc64: x86 Options. (line 505) 50601* mpc80: x86 Options. (line 505) 50602* mpclmul: x86 Options. (line 598) 50603* mpcrel: M680x0 Options. (line 279) 50604* mpdebug: CRIS Options. (line 35) 50605* mpe: RS/6000 and PowerPC Options. 50606 (line 369) 50607* mpe-aligned-commons: x86 Windows Options. 50608 (line 59) 50609* mperf-ext: NDS32 Options. (line 27) 50610* mpic-data-is-text-relative: ARM Options. (line 233) 50611* mpic-register: ARM Options. (line 226) 50612* mpid: RX Options. (line 117) 50613* mplt: MIPS Options. (line 221) 50614* mpointer-size=SIZE: VMS Options. (line 20) 50615* mpointers-to-nested-functions: RS/6000 and PowerPC Options. 50616 (line 923) 50617* mpoke-function-name: ARM Options. (line 239) 50618* mpopc: SPARC Options. (line 231) 50619* mpopcnt: x86 Options. (line 610) 50620* mpopcntb: RS/6000 and PowerPC Options. 50621 (line 27) 50622* mpopcntd: RS/6000 and PowerPC Options. 50623 (line 27) 50624* mportable-runtime: HPPA Options. (line 64) 50625* mpower8-fusion: RS/6000 and PowerPC Options. 50626 (line 236) 50627* mpower8-vector: RS/6000 and PowerPC Options. 50628 (line 242) 50629* mpowerpc-gfxopt: RS/6000 and PowerPC Options. 50630 (line 27) 50631* mpowerpc-gpopt: RS/6000 and PowerPC Options. 50632 (line 27) 50633* mpowerpc64: RS/6000 and PowerPC Options. 50634 (line 27) 50635* mprefer-avx128: x86 Options. (line 688) 50636* mprefer-short-insn-regs: Adapteva Epiphany Options. 50637 (line 13) 50638* mprefergot: SH Options. (line 291) 50639* mpreferred-stack-boundary: x86 Options. (line 535) 50640* mprefetchwt1: x86 Options. (line 606) 50641* mpretend-cmove: SH Options. (line 515) 50642* mprint-tune-info: ARM Options. (line 363) 50643* mprioritize-restricted-insns: RS/6000 and PowerPC Options. 50644 (line 547) 50645* mprolog-function: V850 Options. (line 23) 50646* mprologue-epilogue: CRIS Options. (line 71) 50647* mprototype: RS/6000 and PowerPC Options. 50648 (line 672) 50649* mpt-fixed: SH Options. (line 434) 50650* mpush-args: x86 Options. (line 811) 50651* MQ: Preprocessor Options. 50652 (line 265) 50653* mq-class: ARC Options. (line 271) 50654* mquad-memory: RS/6000 and PowerPC Options. 50655 (line 249) 50656* mquad-memory-atomic: RS/6000 and PowerPC Options. 50657 (line 255) 50658* mr10k-cache-barrier: MIPS Options. (line 686) 50659* mRcq: ARC Options. (line 275) 50660* mRcw: ARC Options. (line 279) 50661* mrdrnd: x86 Options. (line 601) 50662* mrecip <1>: x86 Options. (line 721) 50663* mrecip: RS/6000 and PowerPC Options. 50664 (line 829) 50665* mrecip-precision: RS/6000 and PowerPC Options. 50666 (line 887) 50667* mrecip=opt <1>: x86 Options. (line 743) 50668* mrecip=opt: RS/6000 and PowerPC Options. 50669 (line 842) 50670* mrecord-mcount: x86 Options. (line 914) 50671* mreduced-regs: NDS32 Options. (line 15) 50672* mregister-names: IA-64 Options. (line 37) 50673* mregnames: RS/6000 and PowerPC Options. 50674 (line 778) 50675* mregparm: x86 Options. (line 472) 50676* mrelax <1>: V850 Options. (line 103) 50677* mrelax <2>: SH Options. (line 158) 50678* mrelax <3>: RX Options. (line 95) 50679* mrelax <4>: NDS32 Options. (line 74) 50680* mrelax <5>: MSP430 Options. (line 50) 50681* mrelax <6>: MN10300 Options. (line 46) 50682* mrelax <7>: H8/300 Options. (line 9) 50683* mrelax: AVR Options. (line 184) 50684* mrelax-immediate: MCore Options. (line 19) 50685* mrelax-pic-calls: MIPS Options. (line 810) 50686* mrelocatable: RS/6000 and PowerPC Options. 50687 (line 498) 50688* mrelocatable-lib: RS/6000 and PowerPC Options. 50689 (line 509) 50690* mrenesas: SH Options. (line 173) 50691* mrepeat: MeP Options. (line 96) 50692* mrestrict-it: ARM Options. (line 357) 50693* mreturn-pointer-on-d0: MN10300 Options. (line 36) 50694* mrh850-abi: V850 Options. (line 127) 50695* mrmw: AVR Options. (line 198) 50696* mrtd <1>: Function Attributes. 50697 (line 217) 50698* mrtd <2>: x86 Options. (line 448) 50699* mrtd: M680x0 Options. (line 240) 50700* mrtm: x86 Options. (line 620) 50701* mrtp: VxWorks Options. (line 11) 50702* mrtsc: ARC Options. (line 110) 50703* ms <1>: MeP Options. (line 100) 50704* ms: H8/300 Options. (line 17) 50705* ms2600: H8/300 Options. (line 24) 50706* msafe-dma: SPU Options. (line 17) 50707* msafe-hints: SPU Options. (line 107) 50708* msahf: x86 Options. (line 701) 50709* msatur: MeP Options. (line 105) 50710* msave-acc-in-interrupts: RX Options. (line 109) 50711* msave-toc-indirect: RS/6000 and PowerPC Options. 50712 (line 935) 50713* mscc: FRV Options. (line 140) 50714* msched-ar-data-spec: IA-64 Options. (line 134) 50715* msched-ar-in-data-spec: IA-64 Options. (line 155) 50716* msched-br-data-spec: IA-64 Options. (line 128) 50717* msched-br-in-data-spec: IA-64 Options. (line 148) 50718* msched-control-spec: IA-64 Options. (line 140) 50719* msched-costly-dep: RS/6000 and PowerPC Options. 50720 (line 554) 50721* msched-count-spec-in-critical-path: IA-64 Options. (line 182) 50722* msched-fp-mem-deps-zero-cost: IA-64 Options. (line 198) 50723* msched-in-control-spec: IA-64 Options. (line 162) 50724* msched-max-memory-insns: IA-64 Options. (line 207) 50725* msched-max-memory-insns-hard-limit: IA-64 Options. (line 213) 50726* msched-prefer-non-control-spec-insns: IA-64 Options. (line 175) 50727* msched-prefer-non-data-spec-insns: IA-64 Options. (line 168) 50728* msched-spec-ldc: IA-64 Options. (line 187) 50729* msched-stop-bits-after-every-cycle: IA-64 Options. (line 194) 50730* mschedule: HPPA Options. (line 71) 50731* mscore5: Score Options. (line 25) 50732* mscore5u: Score Options. (line 28) 50733* mscore7: Score Options. (line 31) 50734* mscore7d: Score Options. (line 34) 50735* msda: V850 Options. (line 40) 50736* msdata <1>: RS/6000 and PowerPC Options. 50737 (line 746) 50738* msdata: IA-64 Options. (line 42) 50739* msdata=all: C6X Options. (line 30) 50740* msdata=data: RS/6000 and PowerPC Options. 50741 (line 751) 50742* msdata=default <1>: RS/6000 and PowerPC Options. 50743 (line 746) 50744* msdata=default: C6X Options. (line 22) 50745* msdata=eabi: RS/6000 and PowerPC Options. 50746 (line 726) 50747* msdata=none <1>: RS/6000 and PowerPC Options. 50748 (line 759) 50749* msdata=none <2>: M32R/D Options. (line 40) 50750* msdata=none: C6X Options. (line 35) 50751* msdata=sdata: M32R/D Options. (line 49) 50752* msdata=sysv: RS/6000 and PowerPC Options. 50753 (line 737) 50754* msdata=use: M32R/D Options. (line 53) 50755* msdram <1>: MeP Options. (line 110) 50756* msdram: Blackfin Options. (line 172) 50757* msecure-plt: RS/6000 and PowerPC Options. 50758 (line 184) 50759* msel-sched-dont-check-control-spec: IA-64 Options. (line 203) 50760* msep-data: Blackfin Options. (line 110) 50761* mserialize-volatile: Xtensa Options. (line 35) 50762* msetlb: MN10300 Options. (line 64) 50763* msha: x86 Options. (line 596) 50764* mshared-library-id: Blackfin Options. (line 103) 50765* mshort: M680x0 Options. (line 220) 50766* msign-extend-enabled: LM32 Options. (line 18) 50767* msim <1>: Xstormy16 Options. (line 9) 50768* msim <2>: Visium Options. (line 13) 50769* msim <3>: RX Options. (line 71) 50770* msim <4>: RS/6000 and PowerPC Options. 50771 (line 682) 50772* msim <5>: RL78 Options. (line 7) 50773* msim <6>: MSP430 Options. (line 39) 50774* msim <7>: MeP Options. (line 114) 50775* msim <8>: M32C Options. (line 13) 50776* msim <9>: CR16 Options. (line 18) 50777* msim <10>: C6X Options. (line 19) 50778* msim: Blackfin Options. (line 37) 50779* msimd: ARC Options. (line 71) 50780* msimnovec: MeP Options. (line 117) 50781* msimple-fpu: RS/6000 and PowerPC Options. 50782 (line 402) 50783* msingle-exit: MMIX Options. (line 66) 50784* msingle-float <1>: RS/6000 and PowerPC Options. 50785 (line 398) 50786* msingle-float: MIPS Options. (line 286) 50787* msingle-pic-base <1>: RS/6000 and PowerPC Options. 50788 (line 541) 50789* msingle-pic-base: ARM Options. (line 220) 50790* msio: HPPA Options. (line 98) 50791* msize-level: ARC Options. (line 283) 50792* mskip-rax-setup: x86 Options. (line 927) 50793* mslow-bytes: MCore Options. (line 35) 50794* mslow-flash-data: ARM Options. (line 344) 50795* msmall: MSP430 Options. (line 47) 50796* msmall-data: DEC Alpha Options. (line 187) 50797* msmall-data-limit: RX Options. (line 47) 50798* msmall-divides: MicroBlaze Options. (line 39) 50799* msmall-exec: S/390 and zSeries Options. 50800 (line 80) 50801* msmall-mem: SPU Options. (line 35) 50802* msmall-model: FR30 Options. (line 9) 50803* msmall-text: DEC Alpha Options. (line 205) 50804* msmall16: Adapteva Epiphany Options. 50805 (line 67) 50806* msmallc: Nios II Options. (line 272) 50807* msmartmips: MIPS Options. (line 368) 50808* msoft-float <1>: x86 Options. (line 347) 50809* msoft-float <2>: Visium Options. (line 24) 50810* msoft-float <3>: V850 Options. (line 113) 50811* msoft-float <4>: SPARC Options. (line 40) 50812* msoft-float <5>: S/390 and zSeries Options. 50813 (line 11) 50814* msoft-float <6>: RS/6000 and PowerPC Options. 50815 (line 392) 50816* msoft-float <7>: PDP-11 Options. (line 13) 50817* msoft-float <8>: MIPS Options. (line 272) 50818* msoft-float <9>: MicroBlaze Options. (line 7) 50819* msoft-float <10>: M680x0 Options. (line 203) 50820* msoft-float <11>: HPPA Options. (line 84) 50821* msoft-float <12>: FRV Options. (line 22) 50822* msoft-float <13>: DEC Alpha Options. (line 10) 50823* msoft-float: ARC Options. (line 75) 50824* msoft-quad-float: SPARC Options. (line 60) 50825* msp8: AVR Options. (line 202) 50826* mspace: V850 Options. (line 30) 50827* mspe: RS/6000 and PowerPC Options. 50828 (line 204) 50829* mspecld-anomaly: Blackfin Options. (line 51) 50830* mspfp: ARC Options. (line 62) 50831* mspfp-compact: ARC Options. (line 63) 50832* mspfp-fast: ARC Options. (line 67) 50833* mspfp_compact: ARC Options. (line 384) 50834* mspfp_fast: ARC Options. (line 387) 50835* msplit-addresses: MIPS Options. (line 536) 50836* msplit-vecmove-early: Adapteva Epiphany Options. 50837 (line 127) 50838* msse: x86 Options. (line 582) 50839* msse2avx: x86 Options. (line 902) 50840* msseregparm: x86 Options. (line 483) 50841* mstack-align: CRIS Options. (line 55) 50842* mstack-bias: SPARC Options. (line 314) 50843* mstack-check-l1: Blackfin Options. (line 77) 50844* mstack-guard: S/390 and zSeries Options. 50845 (line 156) 50846* mstack-increment: MCore Options. (line 50) 50847* mstack-offset: Adapteva Epiphany Options. 50848 (line 37) 50849* mstack-protector-guard=GUARD: x86 Options. (line 951) 50850* mstack-size: S/390 and zSeries Options. 50851 (line 156) 50852* mstackrealign: x86 Options. (line 526) 50853* mstdmain: SPU Options. (line 40) 50854* mstrict-align <1>: RS/6000 and PowerPC Options. 50855 (line 493) 50856* mstrict-align <2>: M680x0 Options. (line 287) 50857* mstrict-align: AArch64 Options. (line 49) 50858* mstrict-X: AVR Options. (line 215) 50859* mstring: RS/6000 and PowerPC Options. 50860 (line 429) 50861* mstringop-strategy=ALG: x86 Options. (line 850) 50862* mstructure-size-boundary: ARM Options. (line 177) 50863* msv-mode: Visium Options. (line 52) 50864* msvr4-struct-return: RS/6000 and PowerPC Options. 50865 (line 634) 50866* mswap: ARC Options. (line 82) 50867* mswape: ARC Options. (line 115) 50868* msym32: MIPS Options. (line 433) 50869* msynci: MIPS Options. (line 796) 50870* msys-crt0: Nios II Options. (line 276) 50871* msys-lib: Nios II Options. (line 280) 50872* MT: Preprocessor Options. 50873 (line 251) 50874* mtarget-align: Xtensa Options. (line 59) 50875* mtas: SH Options. (line 282) 50876* mtbm: x86 Options. (line 621) 50877* mtda: V850 Options. (line 34) 50878* mtelephony: ARC Options. (line 120) 50879* mtext-section-literals: Xtensa Options. (line 47) 50880* mtf: MeP Options. (line 121) 50881* mthread: x86 Windows Options. 50882 (line 26) 50883* mthreads: x86 Options. (line 826) 50884* mthumb: ARM Options. (line 261) 50885* mthumb-interwork: ARM Options. (line 24) 50886* mtiny-stack: AVR Options. (line 229) 50887* mtiny=: MeP Options. (line 125) 50888* mtls: FRV Options. (line 75) 50889* mTLS: FRV Options. (line 72) 50890* mtls-dialect <1>: x86 Options. (line 804) 50891* mtls-dialect: ARM Options. (line 302) 50892* mtls-dialect=desc: AArch64 Options. (line 58) 50893* mtls-dialect=traditional: AArch64 Options. (line 62) 50894* mtls-direct-seg-refs: x86 Options. (line 892) 50895* mtls-markers: RS/6000 and PowerPC Options. 50896 (line 817) 50897* mtls-size: IA-64 Options. (line 112) 50898* mtoc: RS/6000 and PowerPC Options. 50899 (line 518) 50900* mtomcat-stats: FRV Options. (line 209) 50901* mtoplevel-symbols: MMIX Options. (line 40) 50902* mtp: ARM Options. (line 294) 50903* mtpcs-frame: ARM Options. (line 267) 50904* mtpcs-leaf-frame: ARM Options. (line 273) 50905* mtpf-trace: S/390 and zSeries Options. 50906 (line 131) 50907* mtrap-precision: DEC Alpha Options. (line 109) 50908* mtune <1>: x86 Options. (line 227) 50909* mtune <2>: Visium Options. (line 47) 50910* mtune <3>: SPARC Options. (line 181) 50911* mtune <4>: S/390 and zSeries Options. 50912 (line 124) 50913* mtune <5>: RS/6000 and PowerPC Options. 50914 (line 114) 50915* mtune <6>: MN10300 Options. (line 30) 50916* mtune <7>: MIPS Options. (line 65) 50917* mtune <8>: M680x0 Options. (line 70) 50918* mtune <9>: IA-64 Options. (line 116) 50919* mtune <10>: DEC Alpha Options. (line 259) 50920* mtune <11>: CRIS Options. (line 16) 50921* mtune <12>: ARM Options. (line 87) 50922* mtune <13>: ARC Options. (line 305) 50923* mtune: AArch64 Options. (line 96) 50924* mtune-ctrl=FEATURE-LIST: x86 Options. (line 654) 50925* mucb-mcount: ARC Options. (line 180) 50926* muclibc: GNU/Linux Options. (line 13) 50927* muls: Score Options. (line 18) 50928* multcost: ARC Options. (line 395) 50929* multcost=NUMBER: SH Options. (line 305) 50930* multi_module: Darwin Options. (line 196) 50931* multilib-library-pic: FRV Options. (line 89) 50932* multiply-enabled: LM32 Options. (line 15) 50933* multiply_defined: Darwin Options. (line 196) 50934* multiply_defined_unused: Darwin Options. (line 196) 50935* munalign-prob-threshold: ARC Options. (line 334) 50936* munaligned-access: ARM Options. (line 326) 50937* munaligned-doubles: SPARC Options. (line 74) 50938* municode: x86 Windows Options. 50939 (line 30) 50940* muninit-const-in-rodata: MIPS Options. (line 506) 50941* munix: VAX Options. (line 9) 50942* munix-asm: PDP-11 Options. (line 68) 50943* munsafe-dma: SPU Options. (line 17) 50944* mupdate: RS/6000 and PowerPC Options. 50945 (line 440) 50946* mupper-regs: RS/6000 and PowerPC Options. 50947 (line 277) 50948* mupper-regs-df: RS/6000 and PowerPC Options. 50949 (line 261) 50950* mupper-regs-sf: RS/6000 and PowerPC Options. 50951 (line 269) 50952* muser-enabled: LM32 Options. (line 21) 50953* muser-mode <1>: Visium Options. (line 57) 50954* muser-mode: SPARC Options. (line 86) 50955* musermode: SH Options. (line 297) 50956* mv3push: NDS32 Options. (line 33) 50957* mv850: V850 Options. (line 49) 50958* mv850e: V850 Options. (line 79) 50959* mv850e1: V850 Options. (line 70) 50960* mv850e2: V850 Options. (line 66) 50961* mv850e2v3: V850 Options. (line 61) 50962* mv850e2v4: V850 Options. (line 57) 50963* mv850e3v5: V850 Options. (line 52) 50964* mv850es: V850 Options. (line 75) 50965* mv8plus: SPARC Options. (line 195) 50966* mveclibabi <1>: x86 Options. (line 772) 50967* mveclibabi: RS/6000 and PowerPC Options. 50968 (line 896) 50969* mvect8-ret-in-mem: x86 Options. (line 493) 50970* mvirt: MIPS Options. (line 409) 50971* mvis: SPARC Options. (line 202) 50972* mvis2: SPARC Options. (line 208) 50973* mvis3: SPARC Options. (line 216) 50974* mvliw-branch: FRV Options. (line 164) 50975* mvms-return-codes: VMS Options. (line 9) 50976* mvolatile-asm-stop: IA-64 Options. (line 32) 50977* mvolatile-cache: ARC Options. (line 185) 50978* mvr4130-align: MIPS Options. (line 785) 50979* mvrsave: RS/6000 and PowerPC Options. 50980 (line 174) 50981* mvsx: RS/6000 and PowerPC Options. 50982 (line 218) 50983* mvxworks: RS/6000 and PowerPC Options. 50984 (line 703) 50985* mvzeroupper: x86 Options. (line 682) 50986* mwarn-cell-microcode: RS/6000 and PowerPC Options. 50987 (line 180) 50988* mwarn-dynamicstack: S/390 and zSeries Options. 50989 (line 150) 50990* mwarn-framesize: S/390 and zSeries Options. 50991 (line 142) 50992* mwarn-multiple-fast-interrupts: RX Options. (line 143) 50993* mwarn-reloc: SPU Options. (line 10) 50994* mwide-bitfields: MCore Options. (line 23) 50995* mwin32: x86 Windows Options. 50996 (line 35) 50997* mwindows: x86 Windows Options. 50998 (line 41) 50999* mword-relocations: ARM Options. (line 313) 51000* mx32: x86 Options. (line 965) 51001* mxgot <1>: MIPS Options. (line 231) 51002* mxgot: M680x0 Options. (line 319) 51003* mxilinx-fpu: RS/6000 and PowerPC Options. 51004 (line 413) 51005* mxl-barrel-shift: MicroBlaze Options. (line 33) 51006* mxl-compat: RS/6000 and PowerPC Options. 51007 (line 349) 51008* mxl-float-convert: MicroBlaze Options. (line 51) 51009* mxl-float-sqrt: MicroBlaze Options. (line 54) 51010* mxl-gp-opt: MicroBlaze Options. (line 45) 51011* mxl-multiply-high: MicroBlaze Options. (line 48) 51012* mxl-pattern-compare: MicroBlaze Options. (line 36) 51013* mxl-reorder: MicroBlaze Options. (line 63) 51014* mxl-soft-div: MicroBlaze Options. (line 30) 51015* mxl-soft-mul: MicroBlaze Options. (line 27) 51016* mxl-stack-check: MicroBlaze Options. (line 42) 51017* mxop: x86 Options. (line 607) 51018* mxpa: MIPS Options. (line 414) 51019* mxsave: x86 Options. (line 616) 51020* mxsavec: x86 Options. (line 618) 51021* mxsaveopt: x86 Options. (line 617) 51022* mxsaves: x86 Options. (line 619) 51023* mxy: ARC Options. (line 125) 51024* myellowknife: RS/6000 and PowerPC Options. 51025 (line 698) 51026* mzarch: S/390 and zSeries Options. 51027 (line 95) 51028* mzda: V850 Options. (line 45) 51029* mzdcbranch: SH Options. (line 473) 51030* mzero-extend: MMIX Options. (line 27) 51031* no-canonical-prefixes: Overall Options. (line 334) 51032* no-integrated-cpp: Preprocessor Options. 51033 (line 34) 51034* no-sysroot-suffix: Directory Options. (line 111) 51035* no_dead_strip_inits_and_terms: Darwin Options. (line 196) 51036* noall_load: Darwin Options. (line 196) 51037* nocpp: MIPS Options. (line 611) 51038* nodefaultlibs: Link Options. (line 68) 51039* nodevicelib: AVR Options. (line 232) 51040* nofixprebinding: Darwin Options. (line 196) 51041* nofpu: RX Options. (line 17) 51042* nolibdld: HPPA Options. (line 181) 51043* nomultidefs: Darwin Options. (line 196) 51044* non-static: VxWorks Options. (line 16) 51045* noprebind: Darwin Options. (line 196) 51046* noseglinkedit: Darwin Options. (line 196) 51047* nostartfiles: Link Options. (line 63) 51048* nostdinc: Preprocessor Options. 51049 (line 399) 51050* nostdinc++ <1>: Preprocessor Options. 51051 (line 404) 51052* nostdinc++: C++ Dialect Options. 51053 (line 431) 51054* nostdlib: Link Options. (line 80) 51055* o: Preprocessor Options. 51056 (line 87) 51057* O: Optimize Options. (line 39) 51058* o: Overall Options. (line 192) 51059* O0: Optimize Options. (line 145) 51060* O1: Optimize Options. (line 39) 51061* O2: Optimize Options. (line 91) 51062* O3: Optimize Options. (line 136) 51063* Ofast: Optimize Options. (line 159) 51064* Og: Optimize Options. (line 166) 51065* Os: Optimize Options. (line 149) 51066* P: Preprocessor Options. 51067 (line 648) 51068* p: Debugging Options. (line 640) 51069* pagezero_size: Darwin Options. (line 196) 51070* param: Optimize Options. (line 2438) 51071* pass-exit-codes: Overall Options. (line 150) 51072* pedantic <1>: Warnings and Errors. 51073 (line 25) 51074* pedantic <2>: Alternate Keywords. (line 30) 51075* pedantic <3>: C Extensions. (line 6) 51076* pedantic <4>: Preprocessor Options. 51077 (line 175) 51078* pedantic <5>: Warning Options. (line 82) 51079* pedantic: Standards. (line 16) 51080* pedantic-errors <1>: Warnings and Errors. 51081 (line 25) 51082* pedantic-errors <2>: Non-bugs. (line 216) 51083* pedantic-errors <3>: Preprocessor Options. 51084 (line 180) 51085* pedantic-errors <4>: Warning Options. (line 124) 51086* pedantic-errors: Standards. (line 16) 51087* pg: Debugging Options. (line 646) 51088* pie: Link Options. (line 105) 51089* pipe: Overall Options. (line 215) 51090* prebind: Darwin Options. (line 196) 51091* prebind_all_twolevel_modules: Darwin Options. (line 196) 51092* print-file-name: Debugging Options. (line 1612) 51093* print-libgcc-file-name: Debugging Options. (line 1646) 51094* print-multi-directory: Debugging Options. (line 1618) 51095* print-multi-lib: Debugging Options. (line 1623) 51096* print-multi-os-directory: Debugging Options. (line 1630) 51097* print-multiarch: Debugging Options. (line 1639) 51098* print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 51099 (line 217) 51100* print-prog-name: Debugging Options. (line 1643) 51101* print-search-dirs: Debugging Options. (line 1654) 51102* print-sysroot: Debugging Options. (line 1667) 51103* print-sysroot-headers-suffix: Debugging Options. (line 1674) 51104* private_bundle: Darwin Options. (line 196) 51105* pthread <1>: Solaris 2 Options. (line 38) 51106* pthread: RS/6000 and PowerPC Options. 51107 (line 824) 51108* pthreads: Solaris 2 Options. (line 32) 51109* Q: Debugging Options. (line 652) 51110* Qn: System V Options. (line 18) 51111* Qy: System V Options. (line 14) 51112* rdynamic: Link Options. (line 111) 51113* read_only_relocs: Darwin Options. (line 196) 51114* remap: Preprocessor Options. 51115 (line 696) 51116* s: Link Options. (line 118) 51117* S <1>: Link Options. (line 20) 51118* S: Overall Options. (line 175) 51119* save-temps: Debugging Options. (line 1519) 51120* save-temps=obj: Debugging Options. (line 1545) 51121* sectalign: Darwin Options. (line 196) 51122* sectcreate: Darwin Options. (line 196) 51123* sectobjectsymbols: Darwin Options. (line 196) 51124* sectorder: Darwin Options. (line 196) 51125* seg1addr: Darwin Options. (line 196) 51126* seg_addr_table: Darwin Options. (line 196) 51127* seg_addr_table_filename: Darwin Options. (line 196) 51128* segaddr: Darwin Options. (line 196) 51129* seglinkedit: Darwin Options. (line 196) 51130* segprot: Darwin Options. (line 196) 51131* segs_read_only_addr: Darwin Options. (line 196) 51132* segs_read_write_addr: Darwin Options. (line 196) 51133* shared: Link Options. (line 127) 51134* shared-libgcc: Link Options. (line 135) 51135* short-calls: Adapteva Epiphany Options. 51136 (line 61) 51137* sim: CRIS Options. (line 95) 51138* sim2: CRIS Options. (line 101) 51139* single_module: Darwin Options. (line 196) 51140* specs: Directory Options. (line 88) 51141* static <1>: HPPA Options. (line 185) 51142* static <2>: Darwin Options. (line 196) 51143* static: Link Options. (line 122) 51144* static-libasan: Link Options. (line 170) 51145* static-libgcc: Link Options. (line 135) 51146* static-liblsan: Link Options. (line 188) 51147* static-libmpx: Link Options. (line 206) 51148* static-libmpxwrappers: Link Options. (line 215) 51149* static-libstdc++: Link Options. (line 225) 51150* static-libtsan: Link Options. (line 179) 51151* static-libubsan: Link Options. (line 197) 51152* std <1>: Non-bugs. (line 107) 51153* std <2>: Other Builtins. (line 22) 51154* std <3>: C Dialect Options. (line 47) 51155* std: Standards. (line 16) 51156* std=: Preprocessor Options. 51157 (line 338) 51158* sub_library: Darwin Options. (line 196) 51159* sub_umbrella: Darwin Options. (line 196) 51160* symbolic: Link Options. (line 236) 51161* sysroot: Directory Options. (line 96) 51162* T: Link Options. (line 242) 51163* target-help <1>: Preprocessor Options. 51164 (line 701) 51165* target-help: Overall Options. (line 230) 51166* threads: HPPA Options. (line 198) 51167* time: Debugging Options. (line 1560) 51168* tno-android-cc: GNU/Linux Options. (line 31) 51169* tno-android-ld: GNU/Linux Options. (line 35) 51170* traditional <1>: Incompatibilities. (line 6) 51171* traditional: C Dialect Options. (line 346) 51172* traditional-cpp <1>: Preprocessor Options. 51173 (line 679) 51174* traditional-cpp: C Dialect Options. (line 346) 51175* trigraphs <1>: Preprocessor Options. 51176 (line 683) 51177* trigraphs: C Dialect Options. (line 341) 51178* twolevel_namespace: Darwin Options. (line 196) 51179* u: Link Options. (line 274) 51180* U: Preprocessor Options. 51181 (line 69) 51182* umbrella: Darwin Options. (line 196) 51183* undef: Preprocessor Options. 51184 (line 73) 51185* undefined: Darwin Options. (line 196) 51186* unexported_symbols_list: Darwin Options. (line 196) 51187* v <1>: Preprocessor Options. 51188 (line 705) 51189* v: Overall Options. (line 203) 51190* version <1>: Preprocessor Options. 51191 (line 718) 51192* version: Overall Options. (line 338) 51193* W: Incompatibilities. (line 64) 51194* w: Preprocessor Options. 51195 (line 171) 51196* W: Warning Options. (line 183) 51197* w: Warning Options. (line 25) 51198* Wa: Assembler Options. (line 9) 51199* Wabi: C++ Dialect Options. 51200 (line 439) 51201* Wabi-tag: C++ Dialect Options. 51202 (line 531) 51203* Waddr-space-convert: AVR Options. (line 235) 51204* Waddress: Warning Options. (line 1353) 51205* Waggregate-return: Warning Options. (line 1386) 51206* Waggressive-loop-optimizations: Warning Options. (line 1391) 51207* Wall <1>: Standard Libraries. (line 6) 51208* Wall <2>: Preprocessor Options. 51209 (line 93) 51210* Wall: Warning Options. (line 133) 51211* Warray-bounds: Warning Options. (line 895) 51212* Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 51213 (line 171) 51214* Wattributes: Warning Options. (line 1396) 51215* Wbad-function-cast: Warning Options. (line 1160) 51216* Wbool-compare: Warning Options. (line 911) 51217* Wbuiltin-macro-redefined: Warning Options. (line 1402) 51218* Wc++-compat: Warning Options. (line 1182) 51219* Wc++11-compat: Warning Options. (line 1187) 51220* Wc++14-compat: Warning Options. (line 1193) 51221* Wc90-c99-compat: Warning Options. (line 1165) 51222* Wc99-c11-compat: Warning Options. (line 1173) 51223* Wcast-align: Warning Options. (line 1213) 51224* Wcast-qual: Warning Options. (line 1197) 51225* Wchar-subscripts: Warning Options. (line 222) 51226* Wclobbered: Warning Options. (line 1233) 51227* Wcomment <1>: Preprocessor Options. 51228 (line 101) 51229* Wcomment: Warning Options. (line 227) 51230* Wcomments: Preprocessor Options. 51231 (line 101) 51232* Wconditionally-supported: Warning Options. (line 1237) 51233* Wconversion: Warning Options. (line 1240) 51234* Wconversion-null: Warning Options. (line 1258) 51235* Wctor-dtor-privacy: C++ Dialect Options. 51236 (line 536) 51237* Wdate-time: Warning Options. (line 1266) 51238* Wdeclaration-after-statement: Warning Options. (line 1071) 51239* Wdelete-incomplete: Warning Options. (line 1271) 51240* Wdelete-non-virtual-dtor: C++ Dialect Options. 51241 (line 543) 51242* Wdeprecated: Warning Options. (line 1525) 51243* Wdeprecated-declarations: Warning Options. (line 1529) 51244* Wdisabled-optimization: Warning Options. (line 1693) 51245* Wdiscarded-array-qualifiers: Warning Options. (line 926) 51246* Wdiscarded-qualifiers: Warning Options. (line 920) 51247* Wdiv-by-zero: Warning Options. (line 944) 51248* Wdouble-promotion: Warning Options. (line 251) 51249* weak_reference_mismatches: Darwin Options. (line 196) 51250* Weffc++: C++ Dialect Options. 51251 (line 623) 51252* Wempty-body: Warning Options. (line 1278) 51253* Wendif-labels <1>: Preprocessor Options. 51254 (line 148) 51255* Wendif-labels: Warning Options. (line 1080) 51256* Wenum-compare: Warning Options. (line 1282) 51257* Werror <1>: Preprocessor Options. 51258 (line 161) 51259* Werror: Warning Options. (line 28) 51260* Werror=: Warning Options. (line 31) 51261* Wextra: Warning Options. (line 183) 51262* Wfatal-errors: Warning Options. (line 48) 51263* Wfloat-conversion: Warning Options. (line 1312) 51264* Wfloat-equal: Warning Options. (line 970) 51265* Wformat <1>: Function Attributes. 51266 (line 424) 51267* Wformat: Warning Options. (line 270) 51268* Wformat-contains-nul: Warning Options. (line 307) 51269* Wformat-extra-args: Warning Options. (line 311) 51270* Wformat-nonliteral <1>: Function Attributes. 51271 (line 490) 51272* Wformat-nonliteral: Warning Options. (line 335) 51273* Wformat-security: Warning Options. (line 340) 51274* Wformat-signedness: Warning Options. (line 352) 51275* Wformat-y2k: Warning Options. (line 357) 51276* Wformat-zero-length: Warning Options. (line 325) 51277* Wformat=: Warning Options. (line 270) 51278* Wformat=1: Warning Options. (line 297) 51279* Wformat=2: Warning Options. (line 330) 51280* Wframe-larger-than: Warning Options. (line 1099) 51281* Wfree-nonheap-object: Warning Options. (line 1108) 51282* whatsloaded: Darwin Options. (line 196) 51283* whyload: Darwin Options. (line 196) 51284* Wignored-qualifiers: Warning Options. (line 397) 51285* Wimplicit: Warning Options. (line 393) 51286* Wimplicit-function-declaration: Warning Options. (line 387) 51287* Wimplicit-int: Warning Options. (line 383) 51288* Wincompatible-pointer-types: Warning Options. (line 932) 51289* Winherited-variadic-ctor: Warning Options. (line 1605) 51290* Winit-self: Warning Options. (line 368) 51291* Winline <1>: Inline. (line 63) 51292* Winline: Warning Options. (line 1610) 51293* Wint-conversion: Warning Options. (line 938) 51294* Wint-to-pointer-cast: Warning Options. (line 1635) 51295* Winvalid-offsetof: Warning Options. (line 1623) 51296* Winvalid-pch: Warning Options. (line 1644) 51297* Wjump-misses-init: Warning Options. (line 1288) 51298* Wl: Link Options. (line 266) 51299* Wlarger-than-LEN: Warning Options. (line 1096) 51300* Wlarger-than=LEN: Warning Options. (line 1096) 51301* Wliteral-suffix: C++ Dialect Options. 51302 (line 550) 51303* Wlogical-not-parentheses: Warning Options. (line 1371) 51304* Wlogical-op: Warning Options. (line 1366) 51305* Wlong-long: Warning Options. (line 1648) 51306* Wmain: Warning Options. (line 408) 51307* Wmaybe-uninitialized: Warning Options. (line 686) 51308* Wmemset-transposed-args: Warning Options. (line 1342) 51309* Wmissing-braces: Warning Options. (line 415) 51310* Wmissing-declarations: Warning Options. (line 1441) 51311* Wmissing-field-initializers: Warning Options. (line 1451) 51312* Wmissing-format-attribute: Warning Options. (line 850) 51313* Wmissing-include-dirs: Warning Options. (line 426) 51314* Wmissing-parameter-type: Warning Options. (line 1423) 51315* Wmissing-prototypes: Warning Options. (line 1431) 51316* Wmultichar: Warning Options. (line 1475) 51317* Wnarrowing: C++ Dialect Options. 51318 (line 571) 51319* Wnested-externs: Warning Options. (line 1602) 51320* Wno-abi: C++ Dialect Options. 51321 (line 439) 51322* Wno-address: Warning Options. (line 1353) 51323* Wno-aggregate-return: Warning Options. (line 1386) 51324* Wno-aggressive-loop-optimizations: Warning Options. (line 1391) 51325* Wno-all: Warning Options. (line 133) 51326* Wno-array-bounds: Warning Options. (line 895) 51327* Wno-assign-intercept: Objective-C and Objective-C++ Dialect Options. 51328 (line 171) 51329* Wno-attributes: Warning Options. (line 1396) 51330* Wno-bad-function-cast: Warning Options. (line 1160) 51331* Wno-bool-compare: Warning Options. (line 911) 51332* Wno-builtin-macro-redefined: Warning Options. (line 1402) 51333* Wno-c90-c99-compat: Warning Options. (line 1165) 51334* Wno-c99-c11-compat: Warning Options. (line 1173) 51335* Wno-cast-align: Warning Options. (line 1213) 51336* Wno-cast-qual: Warning Options. (line 1197) 51337* Wno-char-subscripts: Warning Options. (line 222) 51338* Wno-clobbered: Warning Options. (line 1233) 51339* Wno-comment: Warning Options. (line 227) 51340* Wno-conditionally-supported: Warning Options. (line 1237) 51341* Wno-conversion: Warning Options. (line 1240) 51342* Wno-conversion-null: Warning Options. (line 1258) 51343* Wno-coverage-mismatch: Warning Options. (line 232) 51344* Wno-ctor-dtor-privacy: C++ Dialect Options. 51345 (line 536) 51346* Wno-date-time: Warning Options. (line 1266) 51347* Wno-declaration-after-statement: Warning Options. (line 1071) 51348* Wno-delete-incomplete: Warning Options. (line 1271) 51349* Wno-delete-non-virtual-dtor: C++ Dialect Options. 51350 (line 543) 51351* Wno-deprecated: Warning Options. (line 1525) 51352* Wno-deprecated-declarations: Warning Options. (line 1529) 51353* Wno-disabled-optimization: Warning Options. (line 1693) 51354* Wno-discarded-array-qualifiers: Warning Options. (line 926) 51355* Wno-discarded-qualifiers: Warning Options. (line 920) 51356* Wno-div-by-zero: Warning Options. (line 944) 51357* Wno-double-promotion: Warning Options. (line 251) 51358* Wno-effc++: C++ Dialect Options. 51359 (line 623) 51360* Wno-empty-body: Warning Options. (line 1278) 51361* Wno-endif-labels: Warning Options. (line 1080) 51362* Wno-enum-compare: Warning Options. (line 1282) 51363* Wno-error: Warning Options. (line 28) 51364* Wno-error=: Warning Options. (line 31) 51365* Wno-extra: Warning Options. (line 183) 51366* Wno-fatal-errors: Warning Options. (line 48) 51367* Wno-float-conversion: Warning Options. (line 1312) 51368* Wno-float-equal: Warning Options. (line 970) 51369* Wno-format: Warning Options. (line 270) 51370* Wno-format-contains-nul: Warning Options. (line 307) 51371* Wno-format-extra-args: Warning Options. (line 311) 51372* Wno-format-nonliteral: Warning Options. (line 335) 51373* Wno-format-security: Warning Options. (line 340) 51374* Wno-format-signedness: Warning Options. (line 352) 51375* Wno-format-y2k: Warning Options. (line 357) 51376* Wno-format-zero-length: Warning Options. (line 325) 51377* Wno-free-nonheap-object: Warning Options. (line 1108) 51378* Wno-ignored-qualifiers: Warning Options. (line 397) 51379* Wno-implicit: Warning Options. (line 393) 51380* Wno-implicit-function-declaration: Warning Options. (line 387) 51381* Wno-implicit-int: Warning Options. (line 383) 51382* Wno-incompatible-pointer-types: Warning Options. (line 932) 51383* Wno-inherited-variadic-ctor: Warning Options. (line 1605) 51384* Wno-init-self: Warning Options. (line 368) 51385* Wno-inline: Warning Options. (line 1610) 51386* Wno-int-conversion: Warning Options. (line 938) 51387* Wno-int-to-pointer-cast: Warning Options. (line 1635) 51388* Wno-invalid-offsetof: Warning Options. (line 1623) 51389* Wno-invalid-pch: Warning Options. (line 1644) 51390* Wno-jump-misses-init: Warning Options. (line 1288) 51391* Wno-literal-suffix: C++ Dialect Options. 51392 (line 550) 51393* Wno-logical-not-parentheses: Warning Options. (line 1371) 51394* Wno-logical-op: Warning Options. (line 1366) 51395* Wno-long-long: Warning Options. (line 1648) 51396* Wno-main: Warning Options. (line 408) 51397* Wno-maybe-uninitialized: Warning Options. (line 686) 51398* Wno-memset-transposed-args: Warning Options. (line 1342) 51399* Wno-missing-braces: Warning Options. (line 415) 51400* Wno-missing-declarations: Warning Options. (line 1441) 51401* Wno-missing-field-initializers: Warning Options. (line 1451) 51402* Wno-missing-format-attribute: Warning Options. (line 850) 51403* Wno-missing-include-dirs: Warning Options. (line 426) 51404* Wno-missing-parameter-type: Warning Options. (line 1423) 51405* Wno-missing-prototypes: Warning Options. (line 1431) 51406* Wno-multichar: Warning Options. (line 1475) 51407* Wno-narrowing: C++ Dialect Options. 51408 (line 571) 51409* Wno-nested-externs: Warning Options. (line 1602) 51410* Wno-noexcept: C++ Dialect Options. 51411 (line 584) 51412* Wno-non-template-friend: C++ Dialect Options. 51413 (line 660) 51414* Wno-non-virtual-dtor: C++ Dialect Options. 51415 (line 590) 51416* Wno-nonnull: Warning Options. (line 361) 51417* Wno-normalized: Warning Options. (line 1481) 51418* Wno-odr: Warning Options. (line 1538) 51419* Wno-old-style-cast: C++ Dialect Options. 51420 (line 676) 51421* Wno-old-style-declaration: Warning Options. (line 1413) 51422* Wno-old-style-definition: Warning Options. (line 1419) 51423* Wno-overflow: Warning Options. (line 1535) 51424* Wno-overlength-strings: Warning Options. (line 1713) 51425* Wno-overloaded-virtual: C++ Dialect Options. 51426 (line 682) 51427* Wno-override-init: Warning Options. (line 1548) 51428* Wno-packed: Warning Options. (line 1556) 51429* Wno-packed-bitfield-compat: Warning Options. (line 1573) 51430* Wno-padded: Warning Options. (line 1590) 51431* Wno-parentheses: Warning Options. (line 429) 51432* Wno-pedantic-ms-format: Warning Options. (line 1140) 51433* Wno-pmf-conversions <1>: Bound member functions. 51434 (line 35) 51435* Wno-pmf-conversions: C++ Dialect Options. 51436 (line 701) 51437* Wno-pointer-arith: Warning Options. (line 1146) 51438* Wno-pointer-sign: Warning Options. (line 1702) 51439* Wno-pointer-to-int-cast: Warning Options. (line 1640) 51440* Wno-pragmas: Warning Options. (line 736) 51441* Wno-protocol: Objective-C and Objective-C++ Dialect Options. 51442 (line 175) 51443* Wno-redundant-decls: Warning Options. (line 1597) 51444* Wno-reorder: C++ Dialect Options. 51445 (line 598) 51446* Wno-return-local-addr: Warning Options. (line 524) 51447* Wno-return-type: Warning Options. (line 528) 51448* Wno-selector: Objective-C and Objective-C++ Dialect Options. 51449 (line 185) 51450* Wno-sequence-point: Warning Options. (line 478) 51451* Wno-shadow: Warning Options. (line 1084) 51452* Wno-shadow-ivar: Warning Options. (line 1092) 51453* Wno-shift-count-negative: Warning Options. (line 543) 51454* Wno-shift-count-overflow: Warning Options. (line 547) 51455* Wno-sign-compare: Warning Options. (line 1299) 51456* Wno-sign-conversion: Warning Options. (line 1306) 51457* Wno-sign-promo: C++ Dialect Options. 51458 (line 705) 51459* Wno-sized-deallocation: Warning Options. (line 1318) 51460* Wno-sizeof-array-argument: Warning Options. (line 1337) 51461* Wno-sizeof-pointer-memaccess: Warning Options. (line 1329) 51462* Wno-stack-protector: Warning Options. (line 1708) 51463* Wno-strict-aliasing: Warning Options. (line 741) 51464* Wno-strict-null-sentinel: C++ Dialect Options. 51465 (line 652) 51466* Wno-strict-overflow: Warning Options. (line 781) 51467* Wno-strict-prototypes: Warning Options. (line 1407) 51468* Wno-strict-selector-match: Objective-C and Objective-C++ Dialect Options. 51469 (line 197) 51470* Wno-suggest-attribute=: Warning Options. (line 831) 51471* Wno-suggest-attribute=const: Warning Options. (line 837) 51472* Wno-suggest-attribute=format: Warning Options. (line 850) 51473* Wno-suggest-attribute=noreturn: Warning Options. (line 837) 51474* Wno-suggest-attribute=pure: Warning Options. (line 837) 51475* Wno-suggest-final-methods: Warning Options. (line 880) 51476* Wno-suggest-final-types: Warning Options. (line 871) 51477* Wno-switch: Warning Options. (line 551) 51478* Wno-switch-bool: Warning Options. (line 571) 51479* Wno-switch-default: Warning Options. (line 559) 51480* Wno-switch-enum: Warning Options. (line 562) 51481* Wno-sync-nand: Warning Options. (line 581) 51482* Wno-system-headers: Warning Options. (line 949) 51483* Wno-traditional: Warning Options. (line 985) 51484* Wno-traditional-conversion: Warning Options. (line 1063) 51485* Wno-trampolines: Warning Options. (line 960) 51486* Wno-trigraphs: Warning Options. (line 586) 51487* Wno-type-limits: Warning Options. (line 1153) 51488* Wno-undeclared-selector: Objective-C and Objective-C++ Dialect Options. 51489 (line 205) 51490* Wno-undef: Warning Options. (line 1077) 51491* Wno-uninitialized: Warning Options. (line 663) 51492* Wno-unknown-pragmas: Warning Options. (line 729) 51493* Wno-unsafe-loop-optimizations: Warning Options. (line 1134) 51494* Wno-unused: Warning Options. (line 656) 51495* Wno-unused-but-set-parameter: Warning Options. (line 591) 51496* Wno-unused-but-set-variable: Warning Options. (line 600) 51497* Wno-unused-function: Warning Options. (line 610) 51498* Wno-unused-label: Warning Options. (line 615) 51499* Wno-unused-parameter: Warning Options. (line 626) 51500* Wno-unused-result: Warning Options. (line 633) 51501* Wno-unused-value: Warning Options. (line 646) 51502* Wno-unused-variable: Warning Options. (line 638) 51503* Wno-useless-cast: Warning Options. (line 1275) 51504* Wno-varargs: Warning Options. (line 1659) 51505* Wno-variadic-macros: Warning Options. (line 1653) 51506* Wno-vector-operation-performance: Warning Options. (line 1664) 51507* Wno-virtual-move-assign: Warning Options. (line 1674) 51508* Wno-vla: Warning Options. (line 1683) 51509* Wno-volatile-register-var: Warning Options. (line 1687) 51510* Wno-write-strings: Warning Options. (line 1219) 51511* Wno-zero-as-null-pointer-constant: Warning Options. (line 1262) 51512* Wnoexcept: C++ Dialect Options. 51513 (line 584) 51514* Wnon-template-friend: C++ Dialect Options. 51515 (line 660) 51516* Wnon-virtual-dtor: C++ Dialect Options. 51517 (line 590) 51518* Wnonnull: Warning Options. (line 361) 51519* Wnormalized: Warning Options. (line 1481) 51520* Wnormalized=: Warning Options. (line 1481) 51521* Wodr: Warning Options. (line 1538) 51522* Wold-style-cast: C++ Dialect Options. 51523 (line 676) 51524* Wold-style-declaration: Warning Options. (line 1413) 51525* Wold-style-definition: Warning Options. (line 1419) 51526* Wopenm-simd: Warning Options. (line 1543) 51527* Woverflow: Warning Options. (line 1535) 51528* Woverlength-strings: Warning Options. (line 1713) 51529* Woverloaded-virtual: C++ Dialect Options. 51530 (line 682) 51531* Woverride-init: Warning Options. (line 1548) 51532* Wp: Preprocessor Options. 51533 (line 14) 51534* Wpacked: Warning Options. (line 1556) 51535* Wpacked-bitfield-compat: Warning Options. (line 1573) 51536* Wpadded: Warning Options. (line 1590) 51537* Wparentheses: Warning Options. (line 429) 51538* Wpedantic: Warning Options. (line 82) 51539* Wpedantic-ms-format: Warning Options. (line 1140) 51540* Wpmf-conversions: C++ Dialect Options. 51541 (line 701) 51542* Wpointer-arith <1>: Pointer Arith. (line 13) 51543* Wpointer-arith: Warning Options. (line 1146) 51544* Wpointer-sign: Warning Options. (line 1702) 51545* Wpointer-to-int-cast: Warning Options. (line 1640) 51546* Wpragmas: Warning Options. (line 736) 51547* Wprotocol: Objective-C and Objective-C++ Dialect Options. 51548 (line 175) 51549* wrapper: Overall Options. (line 341) 51550* Wredundant-decls: Warning Options. (line 1597) 51551* Wreorder: C++ Dialect Options. 51552 (line 598) 51553* Wreturn-local-addr: Warning Options. (line 524) 51554* Wreturn-type: Warning Options. (line 528) 51555* Wselector: Objective-C and Objective-C++ Dialect Options. 51556 (line 185) 51557* Wsequence-point: Warning Options. (line 478) 51558* Wshadow: Warning Options. (line 1084) 51559* Wshadow-ivar: Warning Options. (line 1092) 51560* Wshift-count-negative: Warning Options. (line 543) 51561* Wshift-count-overflow: Warning Options. (line 547) 51562* Wsign-compare: Warning Options. (line 1299) 51563* Wsign-conversion: Warning Options. (line 1306) 51564* Wsign-promo: C++ Dialect Options. 51565 (line 705) 51566* Wsized-deallocation: Warning Options. (line 1318) 51567* Wsizeof-array-argument: Warning Options. (line 1337) 51568* Wsizeof-pointer-memaccess: Warning Options. (line 1329) 51569* Wstack-protector: Warning Options. (line 1708) 51570* Wstack-usage: Warning Options. (line 1112) 51571* Wstrict-aliasing: Warning Options. (line 741) 51572* Wstrict-aliasing=n: Warning Options. (line 749) 51573* Wstrict-null-sentinel: C++ Dialect Options. 51574 (line 652) 51575* Wstrict-overflow: Warning Options. (line 781) 51576* Wstrict-prototypes: Warning Options. (line 1407) 51577* Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 51578 (line 197) 51579* Wsuggest-attribute=: Warning Options. (line 831) 51580* Wsuggest-attribute=const: Warning Options. (line 837) 51581* Wsuggest-attribute=format: Warning Options. (line 850) 51582* Wsuggest-attribute=noreturn: Warning Options. (line 837) 51583* Wsuggest-attribute=pure: Warning Options. (line 837) 51584* Wsuggest-final-methods: Warning Options. (line 880) 51585* Wsuggest-final-types: Warning Options. (line 871) 51586* Wswitch: Warning Options. (line 551) 51587* Wswitch-bool: Warning Options. (line 571) 51588* Wswitch-default: Warning Options. (line 559) 51589* Wswitch-enum: Warning Options. (line 562) 51590* Wsync-nand: Warning Options. (line 581) 51591* Wsystem-headers <1>: Preprocessor Options. 51592 (line 165) 51593* Wsystem-headers: Warning Options. (line 949) 51594* Wtraditional <1>: Preprocessor Options. 51595 (line 118) 51596* Wtraditional: Warning Options. (line 985) 51597* Wtraditional-conversion: Warning Options. (line 1063) 51598* Wtrampolines: Warning Options. (line 960) 51599* Wtrigraphs <1>: Preprocessor Options. 51600 (line 106) 51601* Wtrigraphs: Warning Options. (line 586) 51602* Wtype-limits: Warning Options. (line 1153) 51603* Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 51604 (line 205) 51605* Wundef <1>: Preprocessor Options. 51606 (line 124) 51607* Wundef: Warning Options. (line 1077) 51608* Wuninitialized: Warning Options. (line 663) 51609* Wunknown-pragmas: Warning Options. (line 729) 51610* Wunsafe-loop-optimizations: Warning Options. (line 1134) 51611* Wunsuffixed-float-constants: Warning Options. (line 1728) 51612* Wunused: Warning Options. (line 656) 51613* Wunused-but-set-parameter: Warning Options. (line 591) 51614* Wunused-but-set-variable: Warning Options. (line 600) 51615* Wunused-function: Warning Options. (line 610) 51616* Wunused-label: Warning Options. (line 615) 51617* Wunused-local-typedefs: Warning Options. (line 622) 51618* Wunused-macros: Preprocessor Options. 51619 (line 129) 51620* Wunused-parameter: Warning Options. (line 626) 51621* Wunused-result: Warning Options. (line 633) 51622* Wunused-value: Warning Options. (line 646) 51623* Wunused-variable: Warning Options. (line 638) 51624* Wuseless-cast: Warning Options. (line 1275) 51625* Wvarargs: Warning Options. (line 1659) 51626* Wvariadic-macros: Warning Options. (line 1653) 51627* Wvector-operation-performance: Warning Options. (line 1664) 51628* Wvirtual-move-assign: Warning Options. (line 1674) 51629* Wvla: Warning Options. (line 1683) 51630* Wvolatile-register-var: Warning Options. (line 1687) 51631* Wwrite-strings: Warning Options. (line 1219) 51632* Wzero-as-null-pointer-constant: Warning Options. (line 1262) 51633* x <1>: Preprocessor Options. 51634 (line 322) 51635* x: Overall Options. (line 126) 51636* Xassembler: Assembler Options. (line 13) 51637* Xbind-lazy: VxWorks Options. (line 26) 51638* Xbind-now: VxWorks Options. (line 30) 51639* Xlinker: Link Options. (line 248) 51640* Xpreprocessor: Preprocessor Options. 51641 (line 25) 51642* Ym: System V Options. (line 26) 51643* YP: System V Options. (line 22) 51644* z: Link Options. (line 279) 51645 51646 51647File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 51648 51649Keyword Index 51650************* 51651 51652[index] 51653* Menu: 51654 51655* ! in constraint: Multi-Alternative. (line 33) 51656* # in constraint: Modifiers. (line 68) 51657* #pragma: Pragmas. (line 6) 51658* #pragma implementation: C++ Interface. (line 36) 51659* #pragma implementation, implied: C++ Interface. (line 43) 51660* #pragma interface: C++ Interface. (line 17) 51661* #pragma, reason for not using: Function Attributes. 51662 (line 2049) 51663* $: Dollar Signs. (line 6) 51664* $ in constraint: Multi-Alternative. (line 42) 51665* % in constraint: Modifiers. (line 52) 51666* %include: Spec Files. (line 27) 51667* %include_noerr: Spec Files. (line 31) 51668* %rename: Spec Files. (line 35) 51669* & in constraint: Modifiers. (line 25) 51670* ': Incompatibilities. (line 116) 51671* * in constraint: Modifiers. (line 73) 51672* *__builtin_assume_aligned: Other Builtins. (line 346) 51673* + in constraint: Modifiers. (line 12) 51674* -lgcc, use with -nodefaultlibs: Link Options. (line 91) 51675* -lgcc, use with -nostdlib: Link Options. (line 91) 51676* -march feature modifiers: AArch64 Options. (line 133) 51677* -mcpu feature modifiers: AArch64 Options. (line 133) 51678* -nodefaultlibs and unresolved references: Link Options. (line 91) 51679* -nostdlib and unresolved references: Link Options. (line 91) 51680* .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 51681 (line 770) 51682* //: C++ Comments. (line 6) 51683* 0 in constraint: Simple Constraints. (line 127) 51684* < in constraint: Simple Constraints. (line 48) 51685* = in constraint: Modifiers. (line 8) 51686* > in constraint: Simple Constraints. (line 61) 51687* ? in constraint: Multi-Alternative. (line 27) 51688* ?: extensions: Conditionals. (line 6) 51689* ?: side effect: Conditionals. (line 20) 51690* ^ in constraint: Multi-Alternative. (line 38) 51691* _ in variables in macros: Typeof. (line 46) 51692* __atomic_add_fetch: __atomic Builtins. (line 169) 51693* __atomic_always_lock_free: __atomic Builtins. (line 247) 51694* __atomic_and_fetch: __atomic Builtins. (line 173) 51695* __atomic_clear: __atomic Builtins. (line 221) 51696* __atomic_compare_exchange: __atomic Builtins. (line 161) 51697* __atomic_compare_exchange_n: __atomic Builtins. (line 138) 51698* __atomic_exchange: __atomic Builtins. (line 130) 51699* __atomic_exchange_n: __atomic Builtins. (line 119) 51700* __atomic_fetch_add: __atomic Builtins. (line 189) 51701* __atomic_fetch_and: __atomic Builtins. (line 193) 51702* __atomic_fetch_nand: __atomic Builtins. (line 199) 51703* __atomic_fetch_or: __atomic Builtins. (line 197) 51704* __atomic_fetch_sub: __atomic Builtins. (line 191) 51705* __atomic_fetch_xor: __atomic Builtins. (line 195) 51706* __atomic_is_lock_free: __atomic Builtins. (line 261) 51707* __atomic_load: __atomic Builtins. (line 98) 51708* __atomic_load_n: __atomic Builtins. (line 89) 51709* __atomic_nand_fetch: __atomic Builtins. (line 179) 51710* __atomic_or_fetch: __atomic Builtins. (line 177) 51711* __atomic_signal_fence: __atomic Builtins. (line 239) 51712* __atomic_store: __atomic Builtins. (line 113) 51713* __atomic_store_n: __atomic Builtins. (line 104) 51714* __atomic_sub_fetch: __atomic Builtins. (line 171) 51715* __atomic_test_and_set: __atomic Builtins. (line 210) 51716* __atomic_thread_fence: __atomic Builtins. (line 232) 51717* __atomic_xor_fetch: __atomic Builtins. (line 175) 51718* __builtin___bnd_chk_ptr_bounds: Pointer Bounds Checker builtins. 51719 (line 6) 51720* __builtin___bnd_chk_ptr_lbounds: Pointer Bounds Checker builtins. 51721 (line 6) 51722* __builtin___bnd_chk_ptr_ubounds: Pointer Bounds Checker builtins. 51723 (line 6) 51724* __builtin___bnd_copy_ptr_bounds: Pointer Bounds Checker builtins. 51725 (line 6) 51726* __builtin___bnd_get_ptr_lbound: Pointer Bounds Checker builtins. 51727 (line 6) 51728* __builtin___bnd_get_ptr_ubound: Pointer Bounds Checker builtins. 51729 (line 6) 51730* __builtin___bnd_init_ptr_bounds: Pointer Bounds Checker builtins. 51731 (line 6) 51732* __builtin___bnd_narrow_ptr_bounds: Pointer Bounds Checker builtins. 51733 (line 6) 51734* __builtin___bnd_null_ptr_bounds: Pointer Bounds Checker builtins. 51735 (line 6) 51736* __builtin___bnd_set_ptr_bounds: Pointer Bounds Checker builtins. 51737 (line 6) 51738* __builtin___bnd_store_ptr_bounds: Pointer Bounds Checker builtins. 51739 (line 6) 51740* __builtin___clear_cache: Other Builtins. (line 381) 51741* __builtin___fprintf_chk: Object Size Checking. 51742 (line 6) 51743* __builtin___memcpy_chk: Object Size Checking. 51744 (line 6) 51745* __builtin___memmove_chk: Object Size Checking. 51746 (line 6) 51747* __builtin___mempcpy_chk: Object Size Checking. 51748 (line 6) 51749* __builtin___memset_chk: Object Size Checking. 51750 (line 6) 51751* __builtin___printf_chk: Object Size Checking. 51752 (line 6) 51753* __builtin___snprintf_chk: Object Size Checking. 51754 (line 6) 51755* __builtin___sprintf_chk: Object Size Checking. 51756 (line 6) 51757* __builtin___stpcpy_chk: Object Size Checking. 51758 (line 6) 51759* __builtin___strcat_chk: Object Size Checking. 51760 (line 6) 51761* __builtin___strcpy_chk: Object Size Checking. 51762 (line 6) 51763* __builtin___strncat_chk: Object Size Checking. 51764 (line 6) 51765* __builtin___strncpy_chk: Object Size Checking. 51766 (line 6) 51767* __builtin___vfprintf_chk: Object Size Checking. 51768 (line 6) 51769* __builtin___vprintf_chk: Object Size Checking. 51770 (line 6) 51771* __builtin___vsnprintf_chk: Object Size Checking. 51772 (line 6) 51773* __builtin___vsprintf_chk: Object Size Checking. 51774 (line 6) 51775* __builtin_add_overflow: Integer Overflow Builtins. 51776 (line 11) 51777* __builtin_apply: Constructing Calls. (line 31) 51778* __builtin_apply_args: Constructing Calls. (line 20) 51779* __builtin_arc_aligned: ARC Built-in Functions. 51780 (line 20) 51781* __builtin_arc_brk: ARC Built-in Functions. 51782 (line 29) 51783* __builtin_arc_core_read: ARC Built-in Functions. 51784 (line 34) 51785* __builtin_arc_core_write: ARC Built-in Functions. 51786 (line 41) 51787* __builtin_arc_divaw: ARC Built-in Functions. 51788 (line 47) 51789* __builtin_arc_flag: ARC Built-in Functions. 51790 (line 54) 51791* __builtin_arc_lr: ARC Built-in Functions. 51792 (line 58) 51793* __builtin_arc_mul64: ARC Built-in Functions. 51794 (line 65) 51795* __builtin_arc_mulu64: ARC Built-in Functions. 51796 (line 70) 51797* __builtin_arc_nop: ARC Built-in Functions. 51798 (line 74) 51799* __builtin_arc_norm: ARC Built-in Functions. 51800 (line 78) 51801* __builtin_arc_normw: ARC Built-in Functions. 51802 (line 85) 51803* __builtin_arc_rtie: ARC Built-in Functions. 51804 (line 92) 51805* __builtin_arc_sleep: ARC Built-in Functions. 51806 (line 96) 51807* __builtin_arc_sr: ARC Built-in Functions. 51808 (line 101) 51809* __builtin_arc_swap: ARC Built-in Functions. 51810 (line 107) 51811* __builtin_arc_swi: ARC Built-in Functions. 51812 (line 113) 51813* __builtin_arc_sync: ARC Built-in Functions. 51814 (line 117) 51815* __builtin_arc_trap_s: ARC Built-in Functions. 51816 (line 121) 51817* __builtin_arc_unimp_s: ARC Built-in Functions. 51818 (line 125) 51819* __builtin_bswap16: Other Builtins. (line 612) 51820* __builtin_bswap32: Other Builtins. (line 616) 51821* __builtin_bswap64: Other Builtins. (line 620) 51822* __builtin_call_with_static_chain: Other Builtins. (line 6) 51823* __builtin_choose_expr: Other Builtins. (line 168) 51824* __builtin_clrsb: Other Builtins. (line 542) 51825* __builtin_clrsbl: Other Builtins. (line 564) 51826* __builtin_clrsbll: Other Builtins. (line 587) 51827* __builtin_clz: Other Builtins. (line 534) 51828* __builtin_clzl: Other Builtins. (line 556) 51829* __builtin_clzll: Other Builtins. (line 579) 51830* __builtin_complex: Other Builtins. (line 208) 51831* __builtin_constant_p: Other Builtins. (line 218) 51832* __builtin_cpu_init: x86 Built-in Functions. 51833 (line 63) 51834* __builtin_cpu_is: x86 Built-in Functions. 51835 (line 92) 51836* __builtin_cpu_supports: x86 Built-in Functions. 51837 (line 164) 51838* __builtin_ctz: Other Builtins. (line 538) 51839* __builtin_ctzl: Other Builtins. (line 560) 51840* __builtin_ctzll: Other Builtins. (line 583) 51841* __builtin_expect: Other Builtins. (line 264) 51842* __builtin_extract_return_addr: Return Address. (line 36) 51843* __builtin_ffs: Other Builtins. (line 530) 51844* __builtin_ffsl: Other Builtins. (line 553) 51845* __builtin_ffsll: Other Builtins. (line 575) 51846* __builtin_FILE: Other Builtins. (line 374) 51847* __builtin_fpclassify: Other Builtins. (line 6) 51848* __builtin_frame_address: Return Address. (line 49) 51849* __builtin_frob_return_address: Return Address. (line 45) 51850* __builtin_FUNCTION: Other Builtins. (line 369) 51851* __builtin_huge_val: Other Builtins. (line 432) 51852* __builtin_huge_valf: Other Builtins. (line 437) 51853* __builtin_huge_vall: Other Builtins. (line 440) 51854* __builtin_huge_valq: x86 Built-in Functions. 51855 (line 57) 51856* __builtin_inf: Other Builtins. (line 455) 51857* __builtin_infd128: Other Builtins. (line 465) 51858* __builtin_infd32: Other Builtins. (line 459) 51859* __builtin_infd64: Other Builtins. (line 462) 51860* __builtin_inff: Other Builtins. (line 469) 51861* __builtin_infl: Other Builtins. (line 474) 51862* __builtin_infq: x86 Built-in Functions. 51863 (line 53) 51864* __builtin_isfinite: Other Builtins. (line 6) 51865* __builtin_isgreater: Other Builtins. (line 6) 51866* __builtin_isgreaterequal: Other Builtins. (line 6) 51867* __builtin_isinf_sign: Other Builtins. (line 6) 51868* __builtin_isless: Other Builtins. (line 6) 51869* __builtin_islessequal: Other Builtins. (line 6) 51870* __builtin_islessgreater: Other Builtins. (line 6) 51871* __builtin_isnormal: Other Builtins. (line 6) 51872* __builtin_isunordered: Other Builtins. (line 6) 51873* __builtin_LINE: Other Builtins. (line 363) 51874* __builtin_mul_overflow: Integer Overflow Builtins. 51875 (line 63) 51876* __builtin_nan: Other Builtins. (line 486) 51877* __builtin_nand128: Other Builtins. (line 508) 51878* __builtin_nand32: Other Builtins. (line 502) 51879* __builtin_nand64: Other Builtins. (line 505) 51880* __builtin_nanf: Other Builtins. (line 512) 51881* __builtin_nanl: Other Builtins. (line 515) 51882* __builtin_nans: Other Builtins. (line 519) 51883* __builtin_nansf: Other Builtins. (line 523) 51884* __builtin_nansl: Other Builtins. (line 526) 51885* __builtin_nds32_isb: NDS32 Built-in Functions. 51886 (line 13) 51887* __builtin_nds32_isync: NDS32 Built-in Functions. 51888 (line 9) 51889* __builtin_nds32_mfsr: NDS32 Built-in Functions. 51890 (line 16) 51891* __builtin_nds32_mfusr: NDS32 Built-in Functions. 51892 (line 19) 51893* __builtin_nds32_mtsr: NDS32 Built-in Functions. 51894 (line 22) 51895* __builtin_nds32_mtusr: NDS32 Built-in Functions. 51896 (line 25) 51897* __builtin_nds32_setgie_dis: NDS32 Built-in Functions. 51898 (line 31) 51899* __builtin_nds32_setgie_en: NDS32 Built-in Functions. 51900 (line 28) 51901* __builtin_non_tx_store: S/390 System z Built-in Functions. 51902 (line 104) 51903* __builtin_object_size: Object Size Checking. 51904 (line 6) 51905* __builtin_offsetof: Offsetof. (line 6) 51906* __builtin_parity: Other Builtins. (line 550) 51907* __builtin_parityl: Other Builtins. (line 571) 51908* __builtin_parityll: Other Builtins. (line 595) 51909* __builtin_popcount: Other Builtins. (line 547) 51910* __builtin_popcountl: Other Builtins. (line 567) 51911* __builtin_popcountll: Other Builtins. (line 591) 51912* __builtin_powi: Other Builtins. (line 6) 51913* __builtin_powif: Other Builtins. (line 6) 51914* __builtin_powil: Other Builtins. (line 6) 51915* __builtin_prefetch: Other Builtins. (line 393) 51916* __builtin_return: Constructing Calls. (line 48) 51917* __builtin_return_address: Return Address. (line 11) 51918* __builtin_rx_brk: RX Built-in Functions. 51919 (line 11) 51920* __builtin_rx_clrpsw: RX Built-in Functions. 51921 (line 14) 51922* __builtin_rx_int: RX Built-in Functions. 51923 (line 18) 51924* __builtin_rx_machi: RX Built-in Functions. 51925 (line 22) 51926* __builtin_rx_maclo: RX Built-in Functions. 51927 (line 27) 51928* __builtin_rx_mulhi: RX Built-in Functions. 51929 (line 32) 51930* __builtin_rx_mullo: RX Built-in Functions. 51931 (line 37) 51932* __builtin_rx_mvfachi: RX Built-in Functions. 51933 (line 42) 51934* __builtin_rx_mvfacmi: RX Built-in Functions. 51935 (line 46) 51936* __builtin_rx_mvfc: RX Built-in Functions. 51937 (line 50) 51938* __builtin_rx_mvtachi: RX Built-in Functions. 51939 (line 54) 51940* __builtin_rx_mvtaclo: RX Built-in Functions. 51941 (line 58) 51942* __builtin_rx_mvtc: RX Built-in Functions. 51943 (line 62) 51944* __builtin_rx_mvtipl: RX Built-in Functions. 51945 (line 66) 51946* __builtin_rx_racw: RX Built-in Functions. 51947 (line 70) 51948* __builtin_rx_revw: RX Built-in Functions. 51949 (line 74) 51950* __builtin_rx_rmpa: RX Built-in Functions. 51951 (line 79) 51952* __builtin_rx_round: RX Built-in Functions. 51953 (line 83) 51954* __builtin_rx_sat: RX Built-in Functions. 51955 (line 88) 51956* __builtin_rx_setpsw: RX Built-in Functions. 51957 (line 92) 51958* __builtin_rx_wait: RX Built-in Functions. 51959 (line 96) 51960* __builtin_sadd_overflow: Integer Overflow Builtins. 51961 (line 13) 51962* __builtin_saddl_overflow: Integer Overflow Builtins. 51963 (line 15) 51964* __builtin_saddll_overflow: Integer Overflow Builtins. 51965 (line 17) 51966* __builtin_set_thread_pointer: SH Built-in Functions. 51967 (line 10) 51968* __builtin_sh_get_fpscr: SH Built-in Functions. 51969 (line 36) 51970* __builtin_sh_set_fpscr: SH Built-in Functions. 51971 (line 39) 51972* __builtin_smul_overflow: Integer Overflow Builtins. 51973 (line 65) 51974* __builtin_smull_overflow: Integer Overflow Builtins. 51975 (line 67) 51976* __builtin_smulll_overflow: Integer Overflow Builtins. 51977 (line 69) 51978* __builtin_ssub_overflow: Integer Overflow Builtins. 51979 (line 45) 51980* __builtin_ssubl_overflow: Integer Overflow Builtins. 51981 (line 47) 51982* __builtin_ssubll_overflow: Integer Overflow Builtins. 51983 (line 49) 51984* __builtin_sub_overflow: Integer Overflow Builtins. 51985 (line 43) 51986* __builtin_tabort: S/390 System z Built-in Functions. 51987 (line 87) 51988* __builtin_tbegin: S/390 System z Built-in Functions. 51989 (line 7) 51990* __builtin_tbegin_nofloat: S/390 System z Built-in Functions. 51991 (line 59) 51992* __builtin_tbegin_retry: S/390 System z Built-in Functions. 51993 (line 65) 51994* __builtin_tbegin_retry_nofloat: S/390 System z Built-in Functions. 51995 (line 72) 51996* __builtin_tbeginc: S/390 System z Built-in Functions. 51997 (line 78) 51998* __builtin_tend: S/390 System z Built-in Functions. 51999 (line 82) 52000* __builtin_thread_pointer: SH Built-in Functions. 52001 (line 20) 52002* __builtin_trap: Other Builtins. (line 288) 52003* __builtin_tx_assist: S/390 System z Built-in Functions. 52004 (line 92) 52005* __builtin_tx_nesting_depth: S/390 System z Built-in Functions. 52006 (line 98) 52007* __builtin_types_compatible_p: Other Builtins. (line 111) 52008* __builtin_uadd_overflow: Integer Overflow Builtins. 52009 (line 19) 52010* __builtin_uaddl_overflow: Integer Overflow Builtins. 52011 (line 21) 52012* __builtin_uaddll_overflow: Integer Overflow Builtins. 52013 (line 23) 52014* __builtin_umul_overflow: Integer Overflow Builtins. 52015 (line 71) 52016* __builtin_umull_overflow: Integer Overflow Builtins. 52017 (line 73) 52018* __builtin_umulll_overflow: Integer Overflow Builtins. 52019 (line 75) 52020* __builtin_unreachable: Other Builtins. (line 295) 52021* __builtin_usub_overflow: Integer Overflow Builtins. 52022 (line 51) 52023* __builtin_usubl_overflow: Integer Overflow Builtins. 52024 (line 53) 52025* __builtin_usubll_overflow: Integer Overflow Builtins. 52026 (line 55) 52027* __builtin_va_arg_pack: Constructing Calls. (line 53) 52028* __builtin_va_arg_pack_len: Constructing Calls. (line 76) 52029* __complex__ keyword: Complex. (line 6) 52030* __declspec(dllexport): Function Attributes. 52031 (line 285) 52032* __declspec(dllimport): Function Attributes. 52033 (line 319) 52034* __ea SPU Named Address Spaces: Named Address Spaces. 52035 (line 155) 52036* __extension__: Alternate Keywords. (line 30) 52037* __far M32C Named Address Spaces: Named Address Spaces. 52038 (line 139) 52039* __far RL78 Named Address Spaces: Named Address Spaces. 52040 (line 147) 52041* __flash AVR Named Address Spaces: Named Address Spaces. 52042 (line 31) 52043* __flash1 AVR Named Address Spaces: Named Address Spaces. 52044 (line 40) 52045* __flash2 AVR Named Address Spaces: Named Address Spaces. 52046 (line 40) 52047* __flash3 AVR Named Address Spaces: Named Address Spaces. 52048 (line 40) 52049* __flash4 AVR Named Address Spaces: Named Address Spaces. 52050 (line 40) 52051* __flash5 AVR Named Address Spaces: Named Address Spaces. 52052 (line 40) 52053* __float128 data type: Floating Types. (line 6) 52054* __float80 data type: Floating Types. (line 6) 52055* __fp16 data type: Half-Precision. (line 6) 52056* __func__ identifier: Function Names. (line 6) 52057* __FUNCTION__ identifier: Function Names. (line 6) 52058* __imag__ keyword: Complex. (line 27) 52059* __int128 data types: __int128. (line 6) 52060* __memx AVR Named Address Spaces: Named Address Spaces. 52061 (line 46) 52062* __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 52063* __real__ keyword: Complex. (line 27) 52064* __STDC_HOSTED__: Standards. (line 13) 52065* __sync_add_and_fetch: __sync Builtins. (line 60) 52066* __sync_and_and_fetch: __sync Builtins. (line 60) 52067* __sync_bool_compare_and_swap: __sync Builtins. (line 71) 52068* __sync_fetch_and_add: __sync Builtins. (line 44) 52069* __sync_fetch_and_and: __sync Builtins. (line 44) 52070* __sync_fetch_and_nand: __sync Builtins. (line 44) 52071* __sync_fetch_and_or: __sync Builtins. (line 44) 52072* __sync_fetch_and_sub: __sync Builtins. (line 44) 52073* __sync_fetch_and_xor: __sync Builtins. (line 44) 52074* __sync_lock_release: __sync Builtins. (line 101) 52075* __sync_lock_test_and_set: __sync Builtins. (line 83) 52076* __sync_nand_and_fetch: __sync Builtins. (line 60) 52077* __sync_or_and_fetch: __sync Builtins. (line 60) 52078* __sync_sub_and_fetch: __sync Builtins. (line 60) 52079* __sync_synchronize: __sync Builtins. (line 80) 52080* __sync_val_compare_and_swap: __sync Builtins. (line 71) 52081* __sync_xor_and_fetch: __sync Builtins. (line 60) 52082* __thread: Thread-Local. (line 6) 52083* _Accum data type: Fixed-Point. (line 6) 52084* _Complex keyword: Complex. (line 6) 52085* _Decimal128 data type: Decimal Float. (line 6) 52086* _Decimal32 data type: Decimal Float. (line 6) 52087* _Decimal64 data type: Decimal Float. (line 6) 52088* _exit: Other Builtins. (line 6) 52089* _Exit: Other Builtins. (line 6) 52090* _Fract data type: Fixed-Point. (line 6) 52091* _HTM_FIRST_USER_ABORT_CODE: S/390 System z Built-in Functions. 52092 (line 48) 52093* _Sat data type: Fixed-Point. (line 6) 52094* _xabort: x86 transactional memory intrinsics. 52095 (line 64) 52096* _xbegin: x86 transactional memory intrinsics. 52097 (line 20) 52098* _xend: x86 transactional memory intrinsics. 52099 (line 55) 52100* _xtest: x86 transactional memory intrinsics. 52101 (line 60) 52102* AArch64 Options: AArch64 Options. (line 6) 52103* ABI: Compatibility. (line 6) 52104* abi_tag function attribute: C++ Attributes. (line 9) 52105* abi_tag type attribute: C++ Attributes. (line 9) 52106* abi_tag variable attribute: C++ Attributes. (line 9) 52107* abort: Other Builtins. (line 6) 52108* abs: Other Builtins. (line 6) 52109* accessing volatiles <1>: C++ Volatiles. (line 6) 52110* accessing volatiles: Volatiles. (line 6) 52111* acos: Other Builtins. (line 6) 52112* acosf: Other Builtins. (line 6) 52113* acosh: Other Builtins. (line 6) 52114* acoshf: Other Builtins. (line 6) 52115* acoshl: Other Builtins. (line 6) 52116* acosl: Other Builtins. (line 6) 52117* Ada: G++ and GCC. (line 6) 52118* additional floating types: Floating Types. (line 6) 52119* address constraints: Simple Constraints. (line 154) 52120* address of a label: Labels as Values. (line 6) 52121* address variable attribute, AVR: Variable Attributes. 52122 (line 375) 52123* address_operand: Simple Constraints. (line 158) 52124* alias function attribute: Function Attributes. 52125 (line 40) 52126* aligned function attribute: Function Attributes. 52127 (line 53) 52128* aligned type attribute: Type Attributes. (line 32) 52129* aligned variable attribute: Variable Attributes. 52130 (line 24) 52131* alignment: Alignment. (line 6) 52132* alloc_align function attribute: Function Attributes. 52133 (line 94) 52134* alloc_size function attribute: Function Attributes. 52135 (line 73) 52136* alloca: Other Builtins. (line 6) 52137* alloca vs variable-length arrays: Variable Length. (line 35) 52138* Allow nesting in an interrupt handler on the Blackfin processor: Function Attributes. 52139 (line 1056) 52140* Altera Nios II options: Nios II Options. (line 6) 52141* alternate keywords: Alternate Keywords. (line 6) 52142* altivec type attribute, PowerPC: Type Attributes. (line 363) 52143* altivec variable attribute, PowerPC: Variable Attributes. 52144 (line 518) 52145* always_inline function attribute: Function Attributes. 52146 (line 126) 52147* AMD1: Standards. (line 13) 52148* ANSI C: Standards. (line 13) 52149* ANSI C standard: Standards. (line 13) 52150* ANSI C89: Standards. (line 13) 52151* ANSI support: C Dialect Options. (line 10) 52152* ANSI X3.159-1989: Standards. (line 13) 52153* apostrophes: Incompatibilities. (line 116) 52154* application binary interface: Compatibility. (line 6) 52155* ARC options: ARC Options. (line 6) 52156* ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 52157 (line 6) 52158* ARM options: ARM Options. (line 6) 52159* arrays of length zero: Zero Length. (line 6) 52160* arrays of variable length: Variable Length. (line 6) 52161* arrays, non-lvalue: Subscripting. (line 6) 52162* artificial function attribute: Function Attributes. 52163 (line 174) 52164* asin: Other Builtins. (line 6) 52165* asinf: Other Builtins. (line 6) 52166* asinh: Other Builtins. (line 6) 52167* asinhf: Other Builtins. (line 6) 52168* asinhl: Other Builtins. (line 6) 52169* asinl: Other Builtins. (line 6) 52170* asm assembler template: Extended Asm. (line 219) 52171* asm clobbers: Extended Asm. (line 578) 52172* asm constraints: Constraints. (line 6) 52173* asm expressions: Extended Asm. (line 482) 52174* asm goto labels: Extended Asm. (line 648) 52175* asm input operands: Extended Asm. (line 482) 52176* asm keyword: Using Assembly Language with C. 52177 (line 6) 52178* asm output operands: Extended Asm. (line 322) 52179* asm volatile: Extended Asm. (line 109) 52180* assembler names for identifiers: Asm Labels. (line 6) 52181* assembly code, invalid: Bug Criteria. (line 12) 52182* assembly language in C: Using Assembly Language with C. 52183 (line 6) 52184* assembly language in C, basic: Basic Asm. (line 6) 52185* assembly language in C, extended: Extended Asm. (line 6) 52186* assume_aligned function attribute: Function Attributes. 52187 (line 111) 52188* atan: Other Builtins. (line 6) 52189* atan2: Other Builtins. (line 6) 52190* atan2f: Other Builtins. (line 6) 52191* atan2l: Other Builtins. (line 6) 52192* atanf: Other Builtins. (line 6) 52193* atanh: Other Builtins. (line 6) 52194* atanhf: Other Builtins. (line 6) 52195* atanhl: Other Builtins. (line 6) 52196* atanl: Other Builtins. (line 6) 52197* attribute of types: Type Attributes. (line 6) 52198* attribute of variables: Variable Attributes. 52199 (line 6) 52200* attribute syntax: Attribute Syntax. (line 6) 52201* autoincrement/decrement addressing: Simple Constraints. (line 30) 52202* automatic inline for C++ member fns: Inline. (line 71) 52203* AVR Options: AVR Options. (line 6) 52204* Backwards Compatibility: Backwards Compatibility. 52205 (line 6) 52206* bank_switch function attribute, M32C: Function Attributes. 52207 (line 181) 52208* base class members: Name lookup. (line 6) 52209* based type attribute, MeP: Type Attributes. (line 349) 52210* based variable attribute, MeP: Variable Attributes. 52211 (line 470) 52212* basic asm: Basic Asm. (line 6) 52213* bcmp: Other Builtins. (line 6) 52214* below100 variable attribute, Xstormy16: Variable Attributes. 52215 (line 656) 52216* binary compatibility: Compatibility. (line 6) 52217* Binary constants using the 0b prefix: Binary constants. (line 6) 52218* Blackfin Options: Blackfin Options. (line 6) 52219* bnd_instrument function attribute: Function Attributes. 52220 (line 1327) 52221* bnd_legacy function attribute: Function Attributes. 52222 (line 1322) 52223* bnd_variable_size type attribute: Type Attributes. (line 295) 52224* bound pointer to member function: Bound member functions. 52225 (line 6) 52226* break handler functions: Function Attributes. 52227 (line 1416) 52228* break_handler function attribute, MicroBlaze: Function Attributes. 52229 (line 1416) 52230* brk_interrupt function attribute, RL78: Function Attributes. 52231 (line 798) 52232* bug criteria: Bug Criteria. (line 6) 52233* bugs: Bugs. (line 6) 52234* bugs, known: Trouble. (line 6) 52235* built-in functions <1>: Other Builtins. (line 6) 52236* built-in functions: C Dialect Options. (line 213) 52237* bzero: Other Builtins. (line 6) 52238* C compilation options: Invoking GCC. (line 17) 52239* C intermediate output, nonexistent: G++ and GCC. (line 35) 52240* C language extensions: C Extensions. (line 6) 52241* C language, traditional: C Dialect Options. (line 344) 52242* C standard: Standards. (line 13) 52243* C standards: Standards. (line 13) 52244* c++: Invoking G++. (line 14) 52245* C++: G++ and GCC. (line 30) 52246* C++ comments: C++ Comments. (line 6) 52247* C++ compilation options: Invoking GCC. (line 23) 52248* C++ interface and implementation headers: C++ Interface. (line 6) 52249* C++ language extensions: C++ Extensions. (line 6) 52250* C++ member fns, automatically inline: Inline. (line 71) 52251* C++ misunderstandings: C++ Misunderstandings. 52252 (line 6) 52253* C++ options, command-line: C++ Dialect Options. 52254 (line 6) 52255* C++ pragmas, effect on inlining: C++ Interface. (line 57) 52256* C++ source file suffixes: Invoking G++. (line 6) 52257* C++ static data, declaring and defining: Static Definitions. 52258 (line 6) 52259* C11: Standards. (line 13) 52260* C1X: Standards. (line 13) 52261* C6X Options: C6X Options. (line 6) 52262* C89: Standards. (line 13) 52263* C90: Standards. (line 13) 52264* C94: Standards. (line 13) 52265* C95: Standards. (line 13) 52266* C99: Standards. (line 13) 52267* C9X: Standards. (line 13) 52268* C_INCLUDE_PATH: Environment Variables. 52269 (line 130) 52270* cabs: Other Builtins. (line 6) 52271* cabsf: Other Builtins. (line 6) 52272* cabsl: Other Builtins. (line 6) 52273* cacos: Other Builtins. (line 6) 52274* cacosf: Other Builtins. (line 6) 52275* cacosh: Other Builtins. (line 6) 52276* cacoshf: Other Builtins. (line 6) 52277* cacoshl: Other Builtins. (line 6) 52278* cacosl: Other Builtins. (line 6) 52279* callee_pop_aggregate_return function attribute, x86: Function Attributes. 52280 (line 1011) 52281* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes. 52282 (line 537) 52283* calloc: Other Builtins. (line 6) 52284* caret: Multi-Alternative. (line 38) 52285* caret GCC_COLORS capability: Language Independent Options. 52286 (line 78) 52287* carg: Other Builtins. (line 6) 52288* cargf: Other Builtins. (line 6) 52289* cargl: Other Builtins. (line 6) 52290* case labels in initializers: Designated Inits. (line 6) 52291* case ranges: Case Ranges. (line 6) 52292* casin: Other Builtins. (line 6) 52293* casinf: Other Builtins. (line 6) 52294* casinh: Other Builtins. (line 6) 52295* casinhf: Other Builtins. (line 6) 52296* casinhl: Other Builtins. (line 6) 52297* casinl: Other Builtins. (line 6) 52298* cast to a union: Cast to Union. (line 6) 52299* catan: Other Builtins. (line 6) 52300* catanf: Other Builtins. (line 6) 52301* catanh: Other Builtins. (line 6) 52302* catanhf: Other Builtins. (line 6) 52303* catanhl: Other Builtins. (line 6) 52304* catanl: Other Builtins. (line 6) 52305* cb variable attribute, MeP: Variable Attributes. 52306 (line 502) 52307* cbrt: Other Builtins. (line 6) 52308* cbrtf: Other Builtins. (line 6) 52309* cbrtl: Other Builtins. (line 6) 52310* ccos: Other Builtins. (line 6) 52311* ccosf: Other Builtins. (line 6) 52312* ccosh: Other Builtins. (line 6) 52313* ccoshf: Other Builtins. (line 6) 52314* ccoshl: Other Builtins. (line 6) 52315* ccosl: Other Builtins. (line 6) 52316* cdecl function attribute, x86-32: Function Attributes. 52317 (line 217) 52318* ceil: Other Builtins. (line 6) 52319* ceilf: Other Builtins. (line 6) 52320* ceill: Other Builtins. (line 6) 52321* cexp: Other Builtins. (line 6) 52322* cexpf: Other Builtins. (line 6) 52323* cexpl: Other Builtins. (line 6) 52324* character set, execution: Preprocessor Options. 52325 (line 553) 52326* character set, input: Preprocessor Options. 52327 (line 566) 52328* character set, input normalization: Warning Options. (line 1481) 52329* character set, wide execution: Preprocessor Options. 52330 (line 558) 52331* cimag: Other Builtins. (line 6) 52332* cimagf: Other Builtins. (line 6) 52333* cimagl: Other Builtins. (line 6) 52334* cleanup variable attribute: Variable Attributes. 52335 (line 90) 52336* clog: Other Builtins. (line 6) 52337* clogf: Other Builtins. (line 6) 52338* clogl: Other Builtins. (line 6) 52339* COBOL: G++ and GCC. (line 23) 52340* code generation conventions: Code Gen Options. (line 6) 52341* code, mixed with declarations: Mixed Declarations. (line 6) 52342* cold function attribute: Function Attributes. 52343 (line 1286) 52344* cold label attribute: Label Attributes. (line 43) 52345* command options: Invoking GCC. (line 6) 52346* comments, C++ style: C++ Comments. (line 6) 52347* common variable attribute: Variable Attributes. 52348 (line 106) 52349* comparison of signed and unsigned values, warning: Warning Options. 52350 (line 1299) 52351* compiler bugs, reporting: Bug Reporting. (line 6) 52352* compiler compared to C++ preprocessor: G++ and GCC. (line 35) 52353* compiler options, C++: C++ Dialect Options. 52354 (line 6) 52355* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 52356 (line 6) 52357* compiler version, specifying: Target Options. (line 6) 52358* COMPILER_PATH: Environment Variables. 52359 (line 91) 52360* complex conjugation: Complex. (line 34) 52361* complex numbers: Complex. (line 6) 52362* compound literals: Compound Literals. (line 6) 52363* computed gotos: Labels as Values. (line 6) 52364* conditional expressions, extensions: Conditionals. (line 6) 52365* conflicting types: Disappointments. (line 21) 52366* conj: Other Builtins. (line 6) 52367* conjf: Other Builtins. (line 6) 52368* conjl: Other Builtins. (line 6) 52369* const applied to function: Function Attributes. 52370 (line 6) 52371* const function attribute: Function Attributes. 52372 (line 223) 52373* const qualifier: Pointers to Arrays. (line 6) 52374* constants in constraints: Simple Constraints. (line 70) 52375* constraint modifier characters: Modifiers. (line 6) 52376* constraint, matching: Simple Constraints. (line 139) 52377* constraints, asm: Constraints. (line 6) 52378* constraints, machine specific: Machine Constraints. 52379 (line 6) 52380* constructing calls: Constructing Calls. (line 6) 52381* constructor expressions: Compound Literals. (line 6) 52382* constructor function attribute: Function Attributes. 52383 (line 238) 52384* contributors: Contributors. (line 6) 52385* copysign: Other Builtins. (line 6) 52386* copysignf: Other Builtins. (line 6) 52387* copysignl: Other Builtins. (line 6) 52388* core dump: Bug Criteria. (line 9) 52389* cos: Other Builtins. (line 6) 52390* cosf: Other Builtins. (line 6) 52391* cosh: Other Builtins. (line 6) 52392* coshf: Other Builtins. (line 6) 52393* coshl: Other Builtins. (line 6) 52394* cosl: Other Builtins. (line 6) 52395* CPATH: Environment Variables. 52396 (line 129) 52397* CPLUS_INCLUDE_PATH: Environment Variables. 52398 (line 131) 52399* cpow: Other Builtins. (line 6) 52400* cpowf: Other Builtins. (line 6) 52401* cpowl: Other Builtins. (line 6) 52402* cproj: Other Builtins. (line 6) 52403* cprojf: Other Builtins. (line 6) 52404* cprojl: Other Builtins. (line 6) 52405* CR16 Options: CR16 Options. (line 6) 52406* creal: Other Builtins. (line 6) 52407* crealf: Other Builtins. (line 6) 52408* creall: Other Builtins. (line 6) 52409* CRIS Options: CRIS Options. (line 6) 52410* critical function attribute, MSP430: Function Attributes. 52411 (line 691) 52412* cross compiling: Target Options. (line 6) 52413* csin: Other Builtins. (line 6) 52414* csinf: Other Builtins. (line 6) 52415* csinh: Other Builtins. (line 6) 52416* csinhf: Other Builtins. (line 6) 52417* csinhl: Other Builtins. (line 6) 52418* csinl: Other Builtins. (line 6) 52419* csqrt: Other Builtins. (line 6) 52420* csqrtf: Other Builtins. (line 6) 52421* csqrtl: Other Builtins. (line 6) 52422* ctan: Other Builtins. (line 6) 52423* ctanf: Other Builtins. (line 6) 52424* ctanh: Other Builtins. (line 6) 52425* ctanhf: Other Builtins. (line 6) 52426* ctanhl: Other Builtins. (line 6) 52427* ctanl: Other Builtins. (line 6) 52428* Darwin options: Darwin Options. (line 6) 52429* dcgettext: Other Builtins. (line 6) 52430* DD integer suffix: Decimal Float. (line 6) 52431* dd integer suffix: Decimal Float. (line 6) 52432* deallocating variable length arrays: Variable Length. (line 22) 52433* debugging information options: Debugging Options. (line 6) 52434* decimal floating types: Decimal Float. (line 6) 52435* declaration scope: Incompatibilities. (line 80) 52436* declarations inside expressions: Statement Exprs. (line 6) 52437* declarations, mixed with code: Mixed Declarations. (line 6) 52438* declaring attributes of functions: Function Attributes. 52439 (line 6) 52440* declaring static data in C++: Static Definitions. (line 6) 52441* defining static data in C++: Static Definitions. (line 6) 52442* dependencies for make as output: Environment Variables. 52443 (line 157) 52444* dependencies, make: Preprocessor Options. 52445 (line 185) 52446* DEPENDENCIES_OUTPUT: Environment Variables. 52447 (line 156) 52448* dependent name lookup: Name lookup. (line 6) 52449* deprecated function attribute: Function Attributes. 52450 (line 260) 52451* deprecated type attribute: Type Attributes. (line 205) 52452* deprecated variable attribute: Variable Attributes. 52453 (line 115) 52454* designated initializers: Designated Inits. (line 6) 52455* designated_init type attribute: Type Attributes. (line 283) 52456* designator lists: Designated Inits. (line 97) 52457* designators: Designated Inits. (line 64) 52458* destructor function attribute: Function Attributes. 52459 (line 238) 52460* DF integer suffix: Decimal Float. (line 6) 52461* df integer suffix: Decimal Float. (line 6) 52462* dgettext: Other Builtins. (line 6) 52463* diagnostic messages: Language Independent Options. 52464 (line 6) 52465* dialect options: C Dialect Options. (line 6) 52466* digits in constraint: Simple Constraints. (line 127) 52467* directory options: Directory Options. (line 6) 52468* disinterrupt function attribute, Epiphany: Function Attributes. 52469 (line 280) 52470* disinterrupt function attribute, MeP: Function Attributes. 52471 (line 280) 52472* DL integer suffix: Decimal Float. (line 6) 52473* dl integer suffix: Decimal Float. (line 6) 52474* dllexport function attribute: Function Attributes. 52475 (line 285) 52476* dllexport variable attribute: Variable Attributes. 52477 (line 311) 52478* dllimport function attribute: Function Attributes. 52479 (line 319) 52480* dllimport variable attribute: Variable Attributes. 52481 (line 307) 52482* dollar sign: Multi-Alternative. (line 42) 52483* dollar signs in identifier names: Dollar Signs. (line 6) 52484* double-word arithmetic: Long Long. (line 6) 52485* downward funargs: Nested Functions. (line 6) 52486* drem: Other Builtins. (line 6) 52487* dremf: Other Builtins. (line 6) 52488* dreml: Other Builtins. (line 6) 52489* E in constraint: Simple Constraints. (line 89) 52490* earlyclobber operand: Modifiers. (line 25) 52491* eight-bit data on the H8/300, H8/300H, and H8S: Variable Attributes. 52492 (line 408) 52493* eightbit_data variable attribute, H8/300: Variable Attributes. 52494 (line 408) 52495* EIND: AVR Options. (line 242) 52496* empty structures: Empty Structures. (line 6) 52497* Enable Cilk Plus: C Dialect Options. (line 288) 52498* environment variables: Environment Variables. 52499 (line 6) 52500* erf: Other Builtins. (line 6) 52501* erfc: Other Builtins. (line 6) 52502* erfcf: Other Builtins. (line 6) 52503* erfcl: Other Builtins. (line 6) 52504* erff: Other Builtins. (line 6) 52505* erfl: Other Builtins. (line 6) 52506* error function attribute: Function Attributes. 52507 (line 193) 52508* error GCC_COLORS capability: Language Independent Options. 52509 (line 69) 52510* error messages: Warnings and Errors. 52511 (line 6) 52512* escaped newlines: Escaped Newlines. (line 6) 52513* exception function attribute: Function Attributes. 52514 (line 371) 52515* exception handler functions, Blackfin: Function Attributes. 52516 (line 376) 52517* exception handler functions, NDS32: Function Attributes. 52518 (line 371) 52519* exception_handler function attribute: Function Attributes. 52520 (line 376) 52521* exclamation point: Multi-Alternative. (line 33) 52522* exit: Other Builtins. (line 6) 52523* exp: Other Builtins. (line 6) 52524* exp10: Other Builtins. (line 6) 52525* exp10f: Other Builtins. (line 6) 52526* exp10l: Other Builtins. (line 6) 52527* exp2: Other Builtins. (line 6) 52528* exp2f: Other Builtins. (line 6) 52529* exp2l: Other Builtins. (line 6) 52530* expf: Other Builtins. (line 6) 52531* expl: Other Builtins. (line 6) 52532* explicit register variables: Explicit Reg Vars. (line 6) 52533* expm1: Other Builtins. (line 6) 52534* expm1f: Other Builtins. (line 6) 52535* expm1l: Other Builtins. (line 6) 52536* expressions containing statements: Statement Exprs. (line 6) 52537* expressions, constructor: Compound Literals. (line 6) 52538* extended asm: Extended Asm. (line 6) 52539* extensible constraints: Simple Constraints. (line 163) 52540* extensions, ?:: Conditionals. (line 6) 52541* extensions, C language: C Extensions. (line 6) 52542* extensions, C++ language: C++ Extensions. (line 6) 52543* external declaration scope: Incompatibilities. (line 80) 52544* externally_visible function attribute: Function Attributes. 52545 (line 382) 52546* F in constraint: Simple Constraints. (line 94) 52547* fabs: Other Builtins. (line 6) 52548* fabsf: Other Builtins. (line 6) 52549* fabsl: Other Builtins. (line 6) 52550* far function attribute: Function Attributes. 52551 (line 395) 52552* far function attribute, MIPS: Function Attributes. 52553 (line 924) 52554* far type attribute, MeP: Type Attributes. (line 349) 52555* far variable attribute, MeP: Variable Attributes. 52556 (line 485) 52557* fast_interrupt function attribute, M32C: Function Attributes. 52558 (line 400) 52559* fast_interrupt function attribute, RX: Function Attributes. 52560 (line 400) 52561* fastcall function attribute, x86-32: Function Attributes. 52562 (line 406) 52563* fatal signal: Bug Criteria. (line 9) 52564* fdim: Other Builtins. (line 6) 52565* fdimf: Other Builtins. (line 6) 52566* fdiml: Other Builtins. (line 6) 52567* FDL, GNU Free Documentation License: GNU Free Documentation License. 52568 (line 6) 52569* ffs: Other Builtins. (line 6) 52570* file name suffix: Overall Options. (line 14) 52571* file names: Link Options. (line 10) 52572* fixed-point types: Fixed-Point. (line 6) 52573* flatten function attribute: Function Attributes. 52574 (line 186) 52575* flexible array members: Zero Length. (line 6) 52576* float as function value type: Incompatibilities. (line 141) 52577* floating point precision: Disappointments. (line 68) 52578* floating-point precision: Optimize Options. (line 2043) 52579* floor: Other Builtins. (line 6) 52580* floorf: Other Builtins. (line 6) 52581* floorl: Other Builtins. (line 6) 52582* fma: Other Builtins. (line 6) 52583* fmaf: Other Builtins. (line 6) 52584* fmal: Other Builtins. (line 6) 52585* fmax: Other Builtins. (line 6) 52586* fmaxf: Other Builtins. (line 6) 52587* fmaxl: Other Builtins. (line 6) 52588* fmin: Other Builtins. (line 6) 52589* fminf: Other Builtins. (line 6) 52590* fminl: Other Builtins. (line 6) 52591* fmod: Other Builtins. (line 6) 52592* fmodf: Other Builtins. (line 6) 52593* fmodl: Other Builtins. (line 6) 52594* force_align_arg_pointer function attribute, x86: Function Attributes. 52595 (line 1368) 52596* format function attribute: Function Attributes. 52597 (line 424) 52598* format_arg function attribute: Function Attributes. 52599 (line 490) 52600* Fortran: G++ and GCC. (line 6) 52601* forwarder_section function attribute, Epiphany: Function Attributes. 52602 (line 729) 52603* forwarding calls: Constructing Calls. (line 6) 52604* fprintf: Other Builtins. (line 6) 52605* fprintf_unlocked: Other Builtins. (line 6) 52606* fputs: Other Builtins. (line 6) 52607* fputs_unlocked: Other Builtins. (line 6) 52608* FR30 Options: FR30 Options. (line 6) 52609* freestanding environment: Standards. (line 13) 52610* freestanding implementation: Standards. (line 13) 52611* frexp: Other Builtins. (line 6) 52612* frexpf: Other Builtins. (line 6) 52613* frexpl: Other Builtins. (line 6) 52614* FRV Options: FRV Options. (line 6) 52615* fscanf: Other Builtins. (line 6) 52616* fscanf, and constant strings: Incompatibilities. (line 17) 52617* function addressability on the M32R/D: Function Attributes. 52618 (line 978) 52619* function attributes: Function Attributes. 52620 (line 6) 52621* function pointers, arithmetic: Pointer Arith. (line 6) 52622* function prototype declarations: Function Prototypes. 52623 (line 6) 52624* function versions: Function Multiversioning. 52625 (line 6) 52626* function without prologue/epilogue code: Function Attributes. 52627 (line 1040) 52628* function, size of pointer to: Pointer Arith. (line 6) 52629* function_vector function attribute, H8/300: Function Attributes. 52630 (line 537) 52631* function_vector function attribute, M16C/M32C: Function Attributes. 52632 (line 537) 52633* function_vector function attribute, SH: Function Attributes. 52634 (line 537) 52635* functions in arbitrary sections: Function Attributes. 52636 (line 6) 52637* functions that are dynamically resolved: Function Attributes. 52638 (line 6) 52639* functions that are passed arguments in registers on x86-32: Function Attributes. 52640 (line 6) 52641* functions that behave like malloc: Function Attributes. 52642 (line 6) 52643* functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 52644 (line 1051) 52645* functions that do not pop the argument stack on x86-32: Function Attributes. 52646 (line 6) 52647* functions that do pop the argument stack on x86-32: Function Attributes. 52648 (line 217) 52649* functions that have different compilation options on x86-32: Function Attributes. 52650 (line 6) 52651* functions that have different optimization options: Function Attributes. 52652 (line 6) 52653* functions that have no side effects: Function Attributes. 52654 (line 6) 52655* functions that never return: Function Attributes. 52656 (line 6) 52657* functions that pop the argument stack on x86-32: Function Attributes. 52658 (line 6) 52659* functions that return more than once: Function Attributes. 52660 (line 6) 52661* functions with non-null pointer arguments: Function Attributes. 52662 (line 6) 52663* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 52664 (line 6) 52665* g in constraint: Simple Constraints. (line 120) 52666* G in constraint: Simple Constraints. (line 98) 52667* g++: Invoking G++. (line 14) 52668* G++: G++ and GCC. (line 30) 52669* gamma: Other Builtins. (line 6) 52670* gamma_r: Other Builtins. (line 6) 52671* gammaf: Other Builtins. (line 6) 52672* gammaf_r: Other Builtins. (line 6) 52673* gammal: Other Builtins. (line 6) 52674* gammal_r: Other Builtins. (line 6) 52675* GCC: G++ and GCC. (line 6) 52676* GCC command options: Invoking GCC. (line 6) 52677* GCC_COLORS environment variable: Language Independent Options. 52678 (line 35) 52679* GCC_COMPARE_DEBUG: Environment Variables. 52680 (line 52) 52681* GCC_EXEC_PREFIX: Environment Variables. 52682 (line 57) 52683* gcc_struct type attribute, PowerPC: Type Attributes. (line 360) 52684* gcc_struct type attribute, x86: Type Attributes. (line 392) 52685* gcc_struct variable attribute, PowerPC: Variable Attributes. 52686 (line 515) 52687* gcc_struct variable attribute, x86: Variable Attributes. 52688 (line 536) 52689* gcov: Debugging Options. (line 723) 52690* gettext: Other Builtins. (line 6) 52691* global offset table: Code Gen Options. (line 280) 52692* global register after longjmp: Global Reg Vars. (line 65) 52693* global register variables: Global Reg Vars. (line 6) 52694* GNAT: G++ and GCC. (line 30) 52695* GNU C Compiler: G++ and GCC. (line 6) 52696* GNU Compiler Collection: G++ and GCC. (line 6) 52697* gnu_inline function attribute: Function Attributes. 52698 (line 136) 52699* Go: G++ and GCC. (line 6) 52700* goto with computed label: Labels as Values. (line 6) 52701* gprof: Debugging Options. (line 645) 52702* grouping options: Invoking GCC. (line 26) 52703* H in constraint: Simple Constraints. (line 98) 52704* half-precision floating point: Half-Precision. (line 6) 52705* hardware models and configurations, specifying: Submodel Options. 52706 (line 6) 52707* hex floats: Hex Floats. (line 6) 52708* highlight, color, colour: Language Independent Options. 52709 (line 35) 52710* HK fixed-suffix: Fixed-Point. (line 6) 52711* hk fixed-suffix: Fixed-Point. (line 6) 52712* hosted environment <1>: C Dialect Options. (line 247) 52713* hosted environment: Standards. (line 13) 52714* hosted implementation: Standards. (line 13) 52715* hot function attribute: Function Attributes. 52716 (line 1276) 52717* hot label attribute: Label Attributes. (line 36) 52718* hotpatch function attribute, S/390: Function Attributes. 52719 (line 1028) 52720* HPPA Options: HPPA Options. (line 6) 52721* HR fixed-suffix: Fixed-Point. (line 6) 52722* hr fixed-suffix: Fixed-Point. (line 6) 52723* hypot: Other Builtins. (line 6) 52724* hypotf: Other Builtins. (line 6) 52725* hypotl: Other Builtins. (line 6) 52726* I in constraint: Simple Constraints. (line 81) 52727* i in constraint: Simple Constraints. (line 70) 52728* IA-64 Options: IA-64 Options. (line 6) 52729* IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 52730 (line 6) 52731* identifier names, dollar signs in: Dollar Signs. (line 6) 52732* identifiers, names in assembler code: Asm Labels. (line 6) 52733* ifunc function attribute: Function Attributes. 52734 (line 598) 52735* ilogb: Other Builtins. (line 6) 52736* ilogbf: Other Builtins. (line 6) 52737* ilogbl: Other Builtins. (line 6) 52738* imaxabs: Other Builtins. (line 6) 52739* implementation-defined behavior, C language: C Implementation. 52740 (line 6) 52741* implementation-defined behavior, C++ language: C++ Implementation. 52742 (line 6) 52743* implied #pragma implementation: C++ Interface. (line 43) 52744* incompatibilities of GCC: Incompatibilities. (line 6) 52745* increment operators: Bug Criteria. (line 17) 52746* index: Other Builtins. (line 6) 52747* indirect calls, ARC: Function Attributes. 52748 (line 886) 52749* indirect calls, ARM: Function Attributes. 52750 (line 886) 52751* indirect calls, Blackfin: Function Attributes. 52752 (line 910) 52753* indirect calls, Epiphany: Function Attributes. 52754 (line 886) 52755* indirect calls, MIPS: Function Attributes. 52756 (line 924) 52757* indirect calls, PowerPC: Function Attributes. 52758 (line 910) 52759* init_priority variable attribute: C++ Attributes. (line 50) 52760* initializations in expressions: Compound Literals. (line 6) 52761* initializers with labeled elements: Designated Inits. (line 6) 52762* initializers, non-constant: Initializers. (line 6) 52763* inline assembly language: Using Assembly Language with C. 52764 (line 6) 52765* inline automatic for C++ member fns: Inline. (line 71) 52766* inline functions: Inline. (line 6) 52767* inline functions, omission of: Inline. (line 51) 52768* inlining and C++ pragmas: C++ Interface. (line 57) 52769* installation trouble: Trouble. (line 6) 52770* integrating function code: Inline. (line 6) 52771* interface and implementation headers, C++: C++ Interface. (line 6) 52772* intermediate C version, nonexistent: G++ and GCC. (line 35) 52773* interrupt function attribute, ARC: Function Attributes. 52774 (line 638) 52775* interrupt function attribute, ARM: Function Attributes. 52776 (line 638) 52777* interrupt function attribute, AVR: Function Attributes. 52778 (line 638) 52779* interrupt function attribute, CR16: Function Attributes. 52780 (line 638) 52781* interrupt function attribute, Epiphany: Function Attributes. 52782 (line 638) 52783* interrupt function attribute, M32C: Function Attributes. 52784 (line 638) 52785* interrupt function attribute, M32R/D: Function Attributes. 52786 (line 638) 52787* interrupt function attribute, m68k: Function Attributes. 52788 (line 638) 52789* interrupt function attribute, MeP: Function Attributes. 52790 (line 638) 52791* interrupt function attribute, MIPS: Function Attributes. 52792 (line 638) 52793* interrupt function attribute, MSP430: Function Attributes. 52794 (line 638) 52795* interrupt function attribute, NDS32: Function Attributes. 52796 (line 638) 52797* interrupt function attribute, RL78: Function Attributes. 52798 (line 638) 52799* interrupt function attribute, RX: Function Attributes. 52800 (line 638) 52801* interrupt function attribute, Visium: Function Attributes. 52802 (line 638) 52803* interrupt function attribute, Xstormy16: Function Attributes. 52804 (line 638) 52805* interrupt_handler function attribute, Blackfin: Function Attributes. 52806 (line 821) 52807* interrupt_handler function attribute, H8/300: Function Attributes. 52808 (line 821) 52809* interrupt_handler function attribute, m68k: Function Attributes. 52810 (line 821) 52811* interrupt_handler function attribute, SH: Function Attributes. 52812 (line 821) 52813* interrupt_thread function attribute, fido: Function Attributes. 52814 (line 828) 52815* introduction: Top. (line 6) 52816* invalid assembly code: Bug Criteria. (line 12) 52817* invalid input: Bug Criteria. (line 42) 52818* invoking g++: Invoking G++. (line 22) 52819* io variable attribute, AVR: Variable Attributes. 52820 (line 351) 52821* io variable attribute, MeP: Variable Attributes. 52822 (line 491) 52823* io_low variable attribute, AVR: Variable Attributes. 52824 (line 369) 52825* isalnum: Other Builtins. (line 6) 52826* isalpha: Other Builtins. (line 6) 52827* isascii: Other Builtins. (line 6) 52828* isblank: Other Builtins. (line 6) 52829* iscntrl: Other Builtins. (line 6) 52830* isdigit: Other Builtins. (line 6) 52831* isgraph: Other Builtins. (line 6) 52832* islower: Other Builtins. (line 6) 52833* ISO 9899: Standards. (line 13) 52834* ISO C: Standards. (line 13) 52835* ISO C standard: Standards. (line 13) 52836* ISO C11: Standards. (line 13) 52837* ISO C1X: Standards. (line 13) 52838* ISO C90: Standards. (line 13) 52839* ISO C94: Standards. (line 13) 52840* ISO C95: Standards. (line 13) 52841* ISO C99: Standards. (line 13) 52842* ISO C9X: Standards. (line 13) 52843* ISO support: C Dialect Options. (line 10) 52844* ISO/IEC 9899: Standards. (line 13) 52845* isprint: Other Builtins. (line 6) 52846* ispunct: Other Builtins. (line 6) 52847* isr function attribute, ARM: Function Attributes. 52848 (line 836) 52849* isspace: Other Builtins. (line 6) 52850* isupper: Other Builtins. (line 6) 52851* iswalnum: Other Builtins. (line 6) 52852* iswalpha: Other Builtins. (line 6) 52853* iswblank: Other Builtins. (line 6) 52854* iswcntrl: Other Builtins. (line 6) 52855* iswdigit: Other Builtins. (line 6) 52856* iswgraph: Other Builtins. (line 6) 52857* iswlower: Other Builtins. (line 6) 52858* iswprint: Other Builtins. (line 6) 52859* iswpunct: Other Builtins. (line 6) 52860* iswspace: Other Builtins. (line 6) 52861* iswupper: Other Builtins. (line 6) 52862* iswxdigit: Other Builtins. (line 6) 52863* isxdigit: Other Builtins. (line 6) 52864* j0: Other Builtins. (line 6) 52865* j0f: Other Builtins. (line 6) 52866* j0l: Other Builtins. (line 6) 52867* j1: Other Builtins. (line 6) 52868* j1f: Other Builtins. (line 6) 52869* j1l: Other Builtins. (line 6) 52870* Java: G++ and GCC. (line 6) 52871* java_interface type attribute: C++ Attributes. (line 70) 52872* jn: Other Builtins. (line 6) 52873* jnf: Other Builtins. (line 6) 52874* jnl: Other Builtins. (line 6) 52875* K fixed-suffix: Fixed-Point. (line 6) 52876* k fixed-suffix: Fixed-Point. (line 6) 52877* keep_interrupts_masked function attribute, MIPS: Function Attributes. 52878 (line 751) 52879* keywords, alternate: Alternate Keywords. (line 6) 52880* known causes of trouble: Trouble. (line 6) 52881* kspisusp function attribute, Blackfin: Function Attributes. 52882 (line 840) 52883* l1_data variable attribute, Blackfin: Variable Attributes. 52884 (line 390) 52885* l1_data_A variable attribute, Blackfin: Variable Attributes. 52886 (line 390) 52887* l1_data_B variable attribute, Blackfin: Variable Attributes. 52888 (line 390) 52889* l1_text function attribute, Blackfin: Function Attributes. 52890 (line 845) 52891* l2 function attribute, Blackfin: Function Attributes. 52892 (line 851) 52893* l2 variable attribute, Blackfin: Variable Attributes. 52894 (line 398) 52895* Label Attributes: Label Attributes. (line 6) 52896* labeled elements in initializers: Designated Inits. (line 6) 52897* labels as values: Labels as Values. (line 6) 52898* labs: Other Builtins. (line 6) 52899* LANG: Environment Variables. 52900 (line 21) 52901* language dialect options: C Dialect Options. (line 6) 52902* LC_ALL: Environment Variables. 52903 (line 21) 52904* LC_CTYPE: Environment Variables. 52905 (line 21) 52906* LC_MESSAGES: Environment Variables. 52907 (line 21) 52908* ldexp: Other Builtins. (line 6) 52909* ldexpf: Other Builtins. (line 6) 52910* ldexpl: Other Builtins. (line 6) 52911* leaf function attribute: Function Attributes. 52912 (line 857) 52913* length-zero arrays: Zero Length. (line 6) 52914* lgamma: Other Builtins. (line 6) 52915* lgamma_r: Other Builtins. (line 6) 52916* lgammaf: Other Builtins. (line 6) 52917* lgammaf_r: Other Builtins. (line 6) 52918* lgammal: Other Builtins. (line 6) 52919* lgammal_r: Other Builtins. (line 6) 52920* Libraries: Link Options. (line 30) 52921* LIBRARY_PATH: Environment Variables. 52922 (line 97) 52923* link options: Link Options. (line 6) 52924* linker script: Link Options. (line 242) 52925* LK fixed-suffix: Fixed-Point. (line 6) 52926* lk fixed-suffix: Fixed-Point. (line 6) 52927* LL integer suffix: Long Long. (line 6) 52928* llabs: Other Builtins. (line 6) 52929* LLK fixed-suffix: Fixed-Point. (line 6) 52930* llk fixed-suffix: Fixed-Point. (line 6) 52931* LLR fixed-suffix: Fixed-Point. (line 6) 52932* llr fixed-suffix: Fixed-Point. (line 6) 52933* llrint: Other Builtins. (line 6) 52934* llrintf: Other Builtins. (line 6) 52935* llrintl: Other Builtins. (line 6) 52936* llround: Other Builtins. (line 6) 52937* llroundf: Other Builtins. (line 6) 52938* llroundl: Other Builtins. (line 6) 52939* LM32 options: LM32 Options. (line 6) 52940* load address instruction: Simple Constraints. (line 154) 52941* local labels: Local Labels. (line 6) 52942* local variables in macros: Typeof. (line 46) 52943* local variables, specifying registers: Local Reg Vars. (line 6) 52944* locale: Environment Variables. 52945 (line 21) 52946* locale definition: Environment Variables. 52947 (line 106) 52948* locus GCC_COLORS capability: Language Independent Options. 52949 (line 81) 52950* log: Other Builtins. (line 6) 52951* log10: Other Builtins. (line 6) 52952* log10f: Other Builtins. (line 6) 52953* log10l: Other Builtins. (line 6) 52954* log1p: Other Builtins. (line 6) 52955* log1pf: Other Builtins. (line 6) 52956* log1pl: Other Builtins. (line 6) 52957* log2: Other Builtins. (line 6) 52958* log2f: Other Builtins. (line 6) 52959* log2l: Other Builtins. (line 6) 52960* logb: Other Builtins. (line 6) 52961* logbf: Other Builtins. (line 6) 52962* logbl: Other Builtins. (line 6) 52963* logf: Other Builtins. (line 6) 52964* logl: Other Builtins. (line 6) 52965* long long data types: Long Long. (line 6) 52966* long_call function attribute, ARC: Function Attributes. 52967 (line 886) 52968* long_call function attribute, ARM: Function Attributes. 52969 (line 886) 52970* long_call function attribute, Epiphany: Function Attributes. 52971 (line 886) 52972* long_call function attribute, MIPS: Function Attributes. 52973 (line 924) 52974* longcall function attribute, Blackfin: Function Attributes. 52975 (line 910) 52976* longcall function attribute, PowerPC: Function Attributes. 52977 (line 910) 52978* longjmp: Global Reg Vars. (line 65) 52979* longjmp incompatibilities: Incompatibilities. (line 39) 52980* longjmp warnings: Warning Options. (line 712) 52981* LR fixed-suffix: Fixed-Point. (line 6) 52982* lr fixed-suffix: Fixed-Point. (line 6) 52983* lrint: Other Builtins. (line 6) 52984* lrintf: Other Builtins. (line 6) 52985* lrintl: Other Builtins. (line 6) 52986* lround: Other Builtins. (line 6) 52987* lroundf: Other Builtins. (line 6) 52988* lroundl: Other Builtins. (line 6) 52989* m in constraint: Simple Constraints. (line 17) 52990* M32C options: M32C Options. (line 6) 52991* M32R/D options: M32R/D Options. (line 6) 52992* M680x0 options: M680x0 Options. (line 6) 52993* machine dependent options: Submodel Options. (line 6) 52994* machine specific constraints: Machine Constraints. 52995 (line 6) 52996* macro with variable arguments: Variadic Macros. (line 6) 52997* macros, inline alternative: Inline. (line 6) 52998* macros, local labels: Local Labels. (line 6) 52999* macros, local variables in: Typeof. (line 46) 53000* macros, statements in expressions: Statement Exprs. (line 6) 53001* macros, types of arguments: Typeof. (line 6) 53002* make: Preprocessor Options. 53003 (line 185) 53004* malloc: Other Builtins. (line 6) 53005* malloc function attribute: Function Attributes. 53006 (line 934) 53007* matching constraint: Simple Constraints. (line 139) 53008* may_alias type attribute: Type Attributes. (line 233) 53009* MCore options: MCore Options. (line 6) 53010* medium_call function attribute, ARC: Function Attributes. 53011 (line 886) 53012* member fns, automatically inline: Inline. (line 71) 53013* memchr: Other Builtins. (line 6) 53014* memcmp: Other Builtins. (line 6) 53015* memcpy: Other Builtins. (line 6) 53016* memory references in constraints: Simple Constraints. (line 17) 53017* mempcpy: Other Builtins. (line 6) 53018* memset: Other Builtins. (line 6) 53019* MeP options: MeP Options. (line 6) 53020* Mercury: G++ and GCC. (line 23) 53021* message formatting: Language Independent Options. 53022 (line 6) 53023* messages, warning: Warning Options. (line 6) 53024* messages, warning and error: Warnings and Errors. 53025 (line 6) 53026* MicroBlaze Options: MicroBlaze Options. (line 6) 53027* micromips function attribute: Function Attributes. 53028 (line 962) 53029* middle-operands, omitted: Conditionals. (line 6) 53030* MIPS options: MIPS Options. (line 6) 53031* mips16 function attribute, MIPS: Function Attributes. 53032 (line 947) 53033* misunderstandings in C++: C++ Misunderstandings. 53034 (line 6) 53035* mixed declarations and code: Mixed Declarations. (line 6) 53036* mixing assembly language and C: Using Assembly Language with C. 53037 (line 6) 53038* mktemp, and constant strings: Incompatibilities. (line 13) 53039* MMIX Options: MMIX Options. (line 6) 53040* MN10300 options: MN10300 Options. (line 6) 53041* mode variable attribute: Variable Attributes. 53042 (line 135) 53043* model function attribute, M32R/D: Function Attributes. 53044 (line 978) 53045* model variable attribute, IA-64: Variable Attributes. 53046 (line 431) 53047* model-name variable attribute, M32R/D: Variable Attributes. 53048 (line 446) 53049* modf: Other Builtins. (line 6) 53050* modff: Other Builtins. (line 6) 53051* modfl: Other Builtins. (line 6) 53052* modifiers in constraints: Modifiers. (line 6) 53053* Moxie Options: Moxie Options. (line 6) 53054* ms_abi function attribute, x86: Function Attributes. 53055 (line 999) 53056* ms_hook_prologue function attribute, x86: Function Attributes. 53057 (line 1022) 53058* ms_struct type attribute, PowerPC: Type Attributes. (line 360) 53059* ms_struct type attribute, x86: Type Attributes. (line 392) 53060* ms_struct variable attribute, PowerPC: Variable Attributes. 53061 (line 515) 53062* ms_struct variable attribute, x86: Variable Attributes. 53063 (line 536) 53064* MSP430 Options: MSP430 Options. (line 6) 53065* multiple alternative constraints: Multi-Alternative. (line 6) 53066* multiprecision arithmetic: Long Long. (line 6) 53067* n in constraint: Simple Constraints. (line 75) 53068* naked function attribute, ARM: Function Attributes. 53069 (line 1040) 53070* naked function attribute, AVR: Function Attributes. 53071 (line 1040) 53072* naked function attribute, MCORE: Function Attributes. 53073 (line 1040) 53074* naked function attribute, MSP430: Function Attributes. 53075 (line 1040) 53076* naked function attribute, NDS32: Function Attributes. 53077 (line 1040) 53078* naked function attribute, RL78: Function Attributes. 53079 (line 1040) 53080* naked function attribute, RX: Function Attributes. 53081 (line 1040) 53082* naked function attribute, SPU: Function Attributes. 53083 (line 1040) 53084* Named Address Spaces: Named Address Spaces. 53085 (line 6) 53086* names used in assembler code: Asm Labels. (line 6) 53087* naming convention, implementation headers: C++ Interface. (line 43) 53088* NDS32 Options: NDS32 Options. (line 6) 53089* near function attribute, MeP: Function Attributes. 53090 (line 1051) 53091* near function attribute, MIPS: Function Attributes. 53092 (line 924) 53093* near type attribute, MeP: Type Attributes. (line 349) 53094* near variable attribute, MeP: Variable Attributes. 53095 (line 479) 53096* nearbyint: Other Builtins. (line 6) 53097* nearbyintf: Other Builtins. (line 6) 53098* nearbyintl: Other Builtins. (line 6) 53099* nested function attribute, NDS32: Function Attributes. 53100 (line 779) 53101* nested functions: Nested Functions. (line 6) 53102* nested_ready function attribute, NDS32: Function Attributes. 53103 (line 785) 53104* nesting function attribute, Blackfin: Function Attributes. 53105 (line 1056) 53106* newlines (escaped): Escaped Newlines. (line 6) 53107* nextafter: Other Builtins. (line 6) 53108* nextafterf: Other Builtins. (line 6) 53109* nextafterl: Other Builtins. (line 6) 53110* nexttoward: Other Builtins. (line 6) 53111* nexttowardf: Other Builtins. (line 6) 53112* nexttowardl: Other Builtins. (line 6) 53113* NFC: Warning Options. (line 1481) 53114* NFKC: Warning Options. (line 1481) 53115* Nios II options: Nios II Options. (line 6) 53116* nmi function attribute, NDS32: Function Attributes. 53117 (line 1354) 53118* NMI handler functions on the Blackfin processor: Function Attributes. 53119 (line 1061) 53120* nmi_handler function attribute, Blackfin: Function Attributes. 53121 (line 1061) 53122* no_icf function attribute: Function Attributes. 53123 (line 1106) 53124* no_instrument_function function attribute: Function Attributes. 53125 (line 1073) 53126* no_reorder function attribute: Function Attributes. 53127 (line 1134) 53128* no_sanitize_address function attribute: Function Attributes. 53129 (line 1303) 53130* no_sanitize_thread function attribute: Function Attributes. 53131 (line 1311) 53132* no_sanitize_undefined function attribute: Function Attributes. 53133 (line 1316) 53134* no_split_stack function attribute: Function Attributes. 53135 (line 1078) 53136* noclone function attribute: Function Attributes. 53137 (line 1100) 53138* nocommon variable attribute: Variable Attributes. 53139 (line 106) 53140* nocompression function attribute, MIPS: Function Attributes. 53141 (line 1067) 53142* noinline function attribute: Function Attributes. 53143 (line 1089) 53144* nomicromips function attribute: Function Attributes. 53145 (line 962) 53146* nomips16 function attribute, MIPS: Function Attributes. 53147 (line 947) 53148* non-constant initializers: Initializers. (line 6) 53149* non-static inline function: Inline. (line 85) 53150* nonnull function attribute: Function Attributes. 53151 (line 1110) 53152* noreturn function attribute: Function Attributes. 53153 (line 1152) 53154* nosave_low_regs function attribute, SH: Function Attributes. 53155 (line 1190) 53156* not_nested function attribute, NDS32: Function Attributes. 53157 (line 782) 53158* note GCC_COLORS capability: Language Independent Options. 53159 (line 75) 53160* nothrow function attribute: Function Attributes. 53161 (line 1183) 53162* notshared type attribute, ARM: Type Attributes. (line 328) 53163* Nvidia PTX options: Nvidia PTX Options. (line 6) 53164* nvptx options: Nvidia PTX Options. (line 6) 53165* o in constraint: Simple Constraints. (line 23) 53166* OBJC_INCLUDE_PATH: Environment Variables. 53167 (line 132) 53168* Objective-C <1>: Standards. (line 163) 53169* Objective-C: G++ and GCC. (line 6) 53170* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options. 53171 (line 6) 53172* Objective-C++ <1>: Standards. (line 163) 53173* Objective-C++: G++ and GCC. (line 6) 53174* offsettable address: Simple Constraints. (line 23) 53175* old-style function definitions: Function Prototypes. 53176 (line 6) 53177* omitted middle-operands: Conditionals. (line 6) 53178* open coding: Inline. (line 6) 53179* OpenACC accelerator programming: C Dialect Options. (line 264) 53180* OpenMP parallel: C Dialect Options. (line 276) 53181* OpenMP SIMD: C Dialect Options. (line 284) 53182* operand constraints, asm: Constraints. (line 6) 53183* optimize function attribute: Function Attributes. 53184 (line 1196) 53185* optimize options: Optimize Options. (line 6) 53186* options to control diagnostics formatting: Language Independent Options. 53187 (line 6) 53188* options to control warnings: Warning Options. (line 6) 53189* options, C++: C++ Dialect Options. 53190 (line 6) 53191* options, code generation: Code Gen Options. (line 6) 53192* options, debugging: Debugging Options. (line 6) 53193* options, dialect: C Dialect Options. (line 6) 53194* options, directory search: Directory Options. (line 6) 53195* options, GCC command: Invoking GCC. (line 6) 53196* options, grouping: Invoking GCC. (line 26) 53197* options, linking: Link Options. (line 6) 53198* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 53199 (line 6) 53200* options, optimization: Optimize Options. (line 6) 53201* options, order: Invoking GCC. (line 30) 53202* options, preprocessor: Preprocessor Options. 53203 (line 6) 53204* order of evaluation, side effects: Non-bugs. (line 196) 53205* order of options: Invoking GCC. (line 30) 53206* OS_main function attribute, AVR: Function Attributes. 53207 (line 1214) 53208* OS_task function attribute, AVR: Function Attributes. 53209 (line 1214) 53210* other register constraints: Simple Constraints. (line 163) 53211* output file option: Overall Options. (line 191) 53212* overloaded virtual function, warning: C++ Dialect Options. 53213 (line 682) 53214* p in constraint: Simple Constraints. (line 154) 53215* packed type attribute: Type Attributes. (line 108) 53216* packed variable attribute: Variable Attributes. 53217 (line 146) 53218* parameter forward declaration: Variable Length. (line 68) 53219* partial_save function attribute, NDS32: Function Attributes. 53220 (line 795) 53221* Pascal: G++ and GCC. (line 23) 53222* pcs function attribute, ARM: Function Attributes. 53223 (line 1239) 53224* PDP-11 Options: PDP-11 Options. (line 6) 53225* PIC: Code Gen Options. (line 280) 53226* picoChip options: picoChip Options. (line 6) 53227* pmf: Bound member functions. 53228 (line 6) 53229* pointer arguments: Function Attributes. 53230 (line 228) 53231* Pointer Bounds Checker attributes <1>: Type Attributes. (line 295) 53232* Pointer Bounds Checker attributes: Function Attributes. 53233 (line 1322) 53234* Pointer Bounds Checker builtins: Pointer Bounds Checker builtins. 53235 (line 6) 53236* Pointer Bounds Checker options: Debugging Options. (line 388) 53237* pointer to member function: Bound member functions. 53238 (line 6) 53239* pointers to arrays: Pointers to Arrays. (line 6) 53240* portions of temporary objects, pointers to: Temporaries. (line 6) 53241* pow: Other Builtins. (line 6) 53242* pow10: Other Builtins. (line 6) 53243* pow10f: Other Builtins. (line 6) 53244* pow10l: Other Builtins. (line 6) 53245* PowerPC options: PowerPC Options. (line 6) 53246* powf: Other Builtins. (line 6) 53247* powl: Other Builtins. (line 6) 53248* pragma GCC ivdep: Loop-Specific Pragmas. 53249 (line 7) 53250* pragma GCC optimize: Function Specific Option Pragmas. 53251 (line 19) 53252* pragma GCC pop_options: Function Specific Option Pragmas. 53253 (line 29) 53254* pragma GCC push_options: Function Specific Option Pragmas. 53255 (line 29) 53256* pragma GCC reset_options: Function Specific Option Pragmas. 53257 (line 36) 53258* pragma GCC target: Function Specific Option Pragmas. 53259 (line 7) 53260* pragma, address: M32C Pragmas. (line 15) 53261* pragma, align: Solaris Pragmas. (line 11) 53262* pragma, call: MeP Pragmas. (line 48) 53263* pragma, coprocessor available: MeP Pragmas. (line 13) 53264* pragma, coprocessor call_saved: MeP Pragmas. (line 20) 53265* pragma, coprocessor subclass: MeP Pragmas. (line 28) 53266* pragma, custom io_volatile: MeP Pragmas. (line 7) 53267* pragma, diagnostic: Diagnostic Pragmas. (line 14) 53268* pragma, disinterrupt: MeP Pragmas. (line 38) 53269* pragma, fini: Solaris Pragmas. (line 19) 53270* pragma, init: Solaris Pragmas. (line 24) 53271* pragma, long_calls: ARM Pragmas. (line 11) 53272* pragma, long_calls_off: ARM Pragmas. (line 17) 53273* pragma, longcall: RS/6000 and PowerPC Pragmas. 53274 (line 14) 53275* pragma, mark: Darwin Pragmas. (line 11) 53276* pragma, memregs: M32C Pragmas. (line 7) 53277* pragma, no_long_calls: ARM Pragmas. (line 14) 53278* pragma, options align: Darwin Pragmas. (line 14) 53279* pragma, pop_macro: Push/Pop Macro Pragmas. 53280 (line 15) 53281* pragma, push_macro: Push/Pop Macro Pragmas. 53282 (line 11) 53283* pragma, reason for not using: Function Attributes. 53284 (line 2049) 53285* pragma, redefine_extname: Symbol-Renaming Pragmas. 53286 (line 13) 53287* pragma, segment: Darwin Pragmas. (line 21) 53288* pragma, unused: Darwin Pragmas. (line 24) 53289* pragma, visibility: Visibility Pragmas. (line 8) 53290* pragma, weak: Weak Pragmas. (line 10) 53291* pragmas: Pragmas. (line 6) 53292* pragmas in C++, effect on inlining: C++ Interface. (line 57) 53293* pragmas, interface and implementation: C++ Interface. (line 6) 53294* pragmas, warning of unknown: Warning Options. (line 729) 53295* precompiled headers: Precompiled Headers. 53296 (line 6) 53297* preprocessing numbers: Incompatibilities. (line 173) 53298* preprocessing tokens: Incompatibilities. (line 173) 53299* preprocessor options: Preprocessor Options. 53300 (line 6) 53301* printf: Other Builtins. (line 6) 53302* printf_unlocked: Other Builtins. (line 6) 53303* prof: Debugging Options. (line 639) 53304* progmem variable attribute, AVR: Variable Attributes. 53305 (line 319) 53306* promotion of formal parameters: Function Prototypes. 53307 (line 6) 53308* pure function attribute: Function Attributes. 53309 (line 1257) 53310* push address instruction: Simple Constraints. (line 154) 53311* putchar: Other Builtins. (line 6) 53312* puts: Other Builtins. (line 6) 53313* Q floating point suffix: Floating Types. (line 6) 53314* q floating point suffix: Floating Types. (line 6) 53315* qsort, and global register variables: Global Reg Vars. (line 41) 53316* question mark: Multi-Alternative. (line 27) 53317* quote GCC_COLORS capability: Language Independent Options. 53318 (line 85) 53319* R fixed-suffix: Fixed-Point. (line 6) 53320* r fixed-suffix: Fixed-Point. (line 6) 53321* r in constraint: Simple Constraints. (line 66) 53322* RAMPD: AVR Options. (line 358) 53323* RAMPX: AVR Options. (line 358) 53324* RAMPY: AVR Options. (line 358) 53325* RAMPZ: AVR Options. (line 358) 53326* ranges in case statements: Case Ranges. (line 6) 53327* read-only strings: Incompatibilities. (line 9) 53328* reentrant function attribute, MSP430: Function Attributes. 53329 (line 697) 53330* register variable after longjmp: Global Reg Vars. (line 65) 53331* registers for local variables: Local Reg Vars. (line 6) 53332* registers in constraints: Simple Constraints. (line 66) 53333* registers, global allocation: Explicit Reg Vars. (line 6) 53334* registers, global variables in: Global Reg Vars. (line 6) 53335* regparm function attribute, x86: Function Attributes. 53336 (line 1332) 53337* relocation truncated to fit (ColdFire): M680x0 Options. (line 329) 53338* relocation truncated to fit (MIPS): MIPS Options. (line 239) 53339* remainder: Other Builtins. (line 6) 53340* remainderf: Other Builtins. (line 6) 53341* remainderl: Other Builtins. (line 6) 53342* remquo: Other Builtins. (line 6) 53343* remquof: Other Builtins. (line 6) 53344* remquol: Other Builtins. (line 6) 53345* renesas function attribute, SH: Function Attributes. 53346 (line 1376) 53347* reordering, warning: C++ Dialect Options. 53348 (line 598) 53349* reporting bugs: Bugs. (line 6) 53350* resbank function attribute, SH: Function Attributes. 53351 (line 1380) 53352* reset function attribute, NDS32: Function Attributes. 53353 (line 1349) 53354* reset handler functions: Function Attributes. 53355 (line 1349) 53356* rest argument (in macro): Variadic Macros. (line 6) 53357* restricted pointers: Restricted Pointers. 53358 (line 6) 53359* restricted references: Restricted Pointers. 53360 (line 6) 53361* restricted this pointer: Restricted Pointers. 53362 (line 6) 53363* returns_nonnull function attribute: Function Attributes. 53364 (line 1142) 53365* returns_twice function attribute: Function Attributes. 53366 (line 1394) 53367* rindex: Other Builtins. (line 6) 53368* rint: Other Builtins. (line 6) 53369* rintf: Other Builtins. (line 6) 53370* rintl: Other Builtins. (line 6) 53371* RL78 Options: RL78 Options. (line 6) 53372* round: Other Builtins. (line 6) 53373* roundf: Other Builtins. (line 6) 53374* roundl: Other Builtins. (line 6) 53375* RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 53376 (line 6) 53377* RTTI: Vague Linkage. (line 42) 53378* run-time options: Code Gen Options. (line 6) 53379* RX Options: RX Options. (line 6) 53380* s in constraint: Simple Constraints. (line 102) 53381* S/390 and zSeries Options: S/390 and zSeries Options. 53382 (line 6) 53383* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 53384 (line 1403) 53385* save_all function attribute, NDS32: Function Attributes. 53386 (line 791) 53387* save_volatiles function attribute, MicroBlaze: Function Attributes. 53388 (line 1408) 53389* saveall function attribute, Blackfin: Function Attributes. 53390 (line 1403) 53391* saveall function attribute, H8/300: Function Attributes. 53392 (line 1403) 53393* scalb: Other Builtins. (line 6) 53394* scalbf: Other Builtins. (line 6) 53395* scalbl: Other Builtins. (line 6) 53396* scalbln: Other Builtins. (line 6) 53397* scalblnf: Other Builtins. (line 6) 53398* scalbn: Other Builtins. (line 6) 53399* scalbnf: Other Builtins. (line 6) 53400* scanf, and constant strings: Incompatibilities. (line 17) 53401* scanfnl: Other Builtins. (line 6) 53402* scope of a variable length array: Variable Length. (line 22) 53403* scope of declaration: Disappointments. (line 21) 53404* scope of external declarations: Incompatibilities. (line 80) 53405* Score Options: Score Options. (line 6) 53406* search path: Directory Options. (line 6) 53407* section function attribute: Function Attributes. 53408 (line 1425) 53409* section variable attribute: Variable Attributes. 53410 (line 167) 53411* selectany variable attribute: Variable Attributes. 53412 (line 283) 53413* sentinel function attribute: Function Attributes. 53414 (line 1441) 53415* setjmp: Global Reg Vars. (line 65) 53416* setjmp incompatibilities: Incompatibilities. (line 39) 53417* shared strings: Incompatibilities. (line 9) 53418* shared variable attribute: Variable Attributes. 53419 (line 212) 53420* short_call function attribute, ARC: Function Attributes. 53421 (line 886) 53422* short_call function attribute, ARM: Function Attributes. 53423 (line 886) 53424* short_call function attribute, Epiphany: Function Attributes. 53425 (line 886) 53426* shortcall function attribute, Blackfin: Function Attributes. 53427 (line 910) 53428* shortcall function attribute, PowerPC: Function Attributes. 53429 (line 910) 53430* side effect in ?:: Conditionals. (line 20) 53431* side effects, macro argument: Statement Exprs. (line 35) 53432* side effects, order of evaluation: Non-bugs. (line 196) 53433* signal function attribute, AVR: Function Attributes. 53434 (line 1472) 53435* signbit: Other Builtins. (line 6) 53436* signbitd128: Other Builtins. (line 6) 53437* signbitd32: Other Builtins. (line 6) 53438* signbitd64: Other Builtins. (line 6) 53439* signbitf: Other Builtins. (line 6) 53440* signbitl: Other Builtins. (line 6) 53441* signed and unsigned values, comparison warning: Warning Options. 53442 (line 1299) 53443* significand: Other Builtins. (line 6) 53444* significandf: Other Builtins. (line 6) 53445* significandl: Other Builtins. (line 6) 53446* SIMD: C Dialect Options. (line 284) 53447* simple constraints: Simple Constraints. (line 6) 53448* sin: Other Builtins. (line 6) 53449* sincos: Other Builtins. (line 6) 53450* sincosf: Other Builtins. (line 6) 53451* sincosl: Other Builtins. (line 6) 53452* sinf: Other Builtins. (line 6) 53453* sinh: Other Builtins. (line 6) 53454* sinhf: Other Builtins. (line 6) 53455* sinhl: Other Builtins. (line 6) 53456* sinl: Other Builtins. (line 6) 53457* sizeof: Typeof. (line 6) 53458* smaller data references <1>: Nios II Options. (line 9) 53459* smaller data references: M32R/D Options. (line 57) 53460* smaller data references (PowerPC): RS/6000 and PowerPC Options. 53461 (line 770) 53462* snprintf: Other Builtins. (line 6) 53463* Solaris 2 options: Solaris 2 Options. (line 6) 53464* sp_switch function attribute, SH: Function Attributes. 53465 (line 1490) 53466* SPARC options: SPARC Options. (line 6) 53467* Spec Files: Spec Files. (line 6) 53468* specified registers: Explicit Reg Vars. (line 6) 53469* specifying compiler version and target machine: Target Options. 53470 (line 6) 53471* specifying hardware config: Submodel Options. (line 6) 53472* specifying machine version: Target Options. (line 6) 53473* specifying registers for local variables: Local Reg Vars. (line 6) 53474* speed of compilation: Precompiled Headers. 53475 (line 6) 53476* sprintf: Other Builtins. (line 6) 53477* SPU options: SPU Options. (line 6) 53478* spu_vector type attribute, SPU: Type Attributes. (line 379) 53479* spu_vector variable attribute, SPU: Variable Attributes. 53480 (line 524) 53481* sqrt: Other Builtins. (line 6) 53482* sqrtf: Other Builtins. (line 6) 53483* sqrtl: Other Builtins. (line 6) 53484* sscanf: Other Builtins. (line 6) 53485* sscanf, and constant strings: Incompatibilities. (line 17) 53486* sseregparm function attribute, x86: Function Attributes. 53487 (line 1361) 53488* stack_protect function attribute: Function Attributes. 53489 (line 1084) 53490* statements inside expressions: Statement Exprs. (line 6) 53491* static data in C++, declaring and defining: Static Definitions. 53492 (line 6) 53493* stdcall function attribute, x86-32: Function Attributes. 53494 (line 1500) 53495* stpcpy: Other Builtins. (line 6) 53496* stpncpy: Other Builtins. (line 6) 53497* strcasecmp: Other Builtins. (line 6) 53498* strcat: Other Builtins. (line 6) 53499* strchr: Other Builtins. (line 6) 53500* strcmp: Other Builtins. (line 6) 53501* strcpy: Other Builtins. (line 6) 53502* strcspn: Other Builtins. (line 6) 53503* strdup: Other Builtins. (line 6) 53504* strfmon: Other Builtins. (line 6) 53505* strftime: Other Builtins. (line 6) 53506* string constants: Incompatibilities. (line 9) 53507* strlen: Other Builtins. (line 6) 53508* strncasecmp: Other Builtins. (line 6) 53509* strncat: Other Builtins. (line 6) 53510* strncmp: Other Builtins. (line 6) 53511* strncpy: Other Builtins. (line 6) 53512* strndup: Other Builtins. (line 6) 53513* strpbrk: Other Builtins. (line 6) 53514* strrchr: Other Builtins. (line 6) 53515* strspn: Other Builtins. (line 6) 53516* strstr: Other Builtins. (line 6) 53517* struct: Unnamed Fields. (line 6) 53518* struct __htm_tdb: S/390 System z Built-in Functions. 53519 (line 54) 53520* structures: Incompatibilities. (line 146) 53521* structures, constructor expression: Compound Literals. (line 6) 53522* submodel options: Submodel Options. (line 6) 53523* subscripting: Subscripting. (line 6) 53524* subscripting and function values: Subscripting. (line 6) 53525* suffixes for C++ source: Invoking G++. (line 6) 53526* SUNPRO_DEPENDENCIES: Environment Variables. 53527 (line 172) 53528* suppressing warnings: Warning Options. (line 6) 53529* surprises in C++: C++ Misunderstandings. 53530 (line 6) 53531* syntax checking: Warning Options. (line 13) 53532* syscall_linkage function attribute, IA-64: Function Attributes. 53533 (line 1505) 53534* system headers, warnings from: Warning Options. (line 949) 53535* sysv_abi function attribute, x86: Function Attributes. 53536 (line 999) 53537* tan: Other Builtins. (line 6) 53538* tanf: Other Builtins. (line 6) 53539* tanh: Other Builtins. (line 6) 53540* tanhf: Other Builtins. (line 6) 53541* tanhl: Other Builtins. (line 6) 53542* tanl: Other Builtins. (line 6) 53543* target function attribute: Function Attributes. 53544 (line 1512) 53545* target machine, specifying: Target Options. (line 6) 53546* target options: Target Options. (line 6) 53547* target("abm") function attribute, x86: Function Attributes. 53548 (line 1545) 53549* target("aes") function attribute, x86: Function Attributes. 53550 (line 1550) 53551* target("align-stringops") function attribute, x86: Function Attributes. 53552 (line 1644) 53553* target("altivec") function attribute, PowerPC: Function Attributes. 53554 (line 1670) 53555* target("arch=ARCH") function attribute, x86: Function Attributes. 53556 (line 1653) 53557* target("avoid-indexed-addresses") function attribute, PowerPC: Function Attributes. 53558 (line 1791) 53559* target("cld") function attribute, x86: Function Attributes. 53560 (line 1615) 53561* target("cmpb") function attribute, PowerPC: Function Attributes. 53562 (line 1676) 53563* target("cpu=CPU") function attribute, PowerPC: Function Attributes. 53564 (line 1806) 53565* target("custom-fpu-cfg=NAME") function attribute, Nios II: Function Attributes. 53566 (line 1832) 53567* target("custom-INSN=N") function attribute, Nios II: Function Attributes. 53568 (line 1823) 53569* target("default") function attribute, x86: Function Attributes. 53570 (line 1553) 53571* target("dlmzb") function attribute, PowerPC: Function Attributes. 53572 (line 1682) 53573* target("fancy-math-387") function attribute, x86: Function Attributes. 53574 (line 1619) 53575* target("fma4") function attribute, x86: Function Attributes. 53576 (line 1599) 53577* target("fpmath=FPMATH") function attribute, x86: Function Attributes. 53578 (line 1661) 53579* target("fprnd") function attribute, PowerPC: Function Attributes. 53580 (line 1689) 53581* target("friz") function attribute, PowerPC: Function Attributes. 53582 (line 1782) 53583* target("fused-madd") function attribute, x86: Function Attributes. 53584 (line 1624) 53585* target("hard-dfp") function attribute, PowerPC: Function Attributes. 53586 (line 1695) 53587* target("ieee-fp") function attribute, x86: Function Attributes. 53588 (line 1629) 53589* target("inline-all-stringops") function attribute, x86: Function Attributes. 53590 (line 1634) 53591* target("inline-stringops-dynamically") function attribute, x86: Function Attributes. 53592 (line 1638) 53593* target("isel") function attribute, PowerPC: Function Attributes. 53594 (line 1701) 53595* target("longcall") function attribute, PowerPC: Function Attributes. 53596 (line 1801) 53597* target("lwp") function attribute, x86: Function Attributes. 53598 (line 1607) 53599* target("mfcrf") function attribute, PowerPC: Function Attributes. 53600 (line 1705) 53601* target("mfpgpr") function attribute, PowerPC: Function Attributes. 53602 (line 1712) 53603* target("mmx") function attribute, x86: Function Attributes. 53604 (line 1558) 53605* target("mulhw") function attribute, PowerPC: Function Attributes. 53606 (line 1719) 53607* target("multiple") function attribute, PowerPC: Function Attributes. 53608 (line 1726) 53609* target("no-custom-INSN") function attribute, Nios II: Function Attributes. 53610 (line 1823) 53611* target("paired") function attribute, PowerPC: Function Attributes. 53612 (line 1796) 53613* target("pclmul") function attribute, x86: Function Attributes. 53614 (line 1562) 53615* target("popcnt") function attribute, x86: Function Attributes. 53616 (line 1566) 53617* target("popcntb") function attribute, PowerPC: Function Attributes. 53618 (line 1737) 53619* target("popcntd") function attribute, PowerPC: Function Attributes. 53620 (line 1744) 53621* target("powerpc-gfxopt") function attribute, PowerPC: Function Attributes. 53622 (line 1750) 53623* target("powerpc-gpopt") function attribute, PowerPC: Function Attributes. 53624 (line 1756) 53625* target("recip") function attribute, x86: Function Attributes. 53626 (line 1648) 53627* target("recip-precision") function attribute, PowerPC: Function Attributes. 53628 (line 1762) 53629* target("sse") function attribute, x86: Function Attributes. 53630 (line 1570) 53631* target("sse2") function attribute, x86: Function Attributes. 53632 (line 1574) 53633* target("sse3") function attribute, x86: Function Attributes. 53634 (line 1578) 53635* target("sse4") function attribute, x86: Function Attributes. 53636 (line 1582) 53637* target("sse4.1") function attribute, x86: Function Attributes. 53638 (line 1587) 53639* target("sse4.2") function attribute, x86: Function Attributes. 53640 (line 1591) 53641* target("sse4a") function attribute, x86: Function Attributes. 53642 (line 1595) 53643* target("ssse3") function attribute, x86: Function Attributes. 53644 (line 1611) 53645* target("string") function attribute, PowerPC: Function Attributes. 53646 (line 1768) 53647* target("tune=TUNE") function attribute, PowerPC: Function Attributes. 53648 (line 1813) 53649* target("tune=TUNE") function attribute, x86: Function Attributes. 53650 (line 1657) 53651* target("update") function attribute, PowerPC: Function Attributes. 53652 (line 1731) 53653* target("vsx") function attribute, PowerPC: Function Attributes. 53654 (line 1774) 53655* target("xop") function attribute, x86: Function Attributes. 53656 (line 1603) 53657* TC1: Standards. (line 13) 53658* TC2: Standards. (line 13) 53659* TC3: Standards. (line 13) 53660* Technical Corrigenda: Standards. (line 13) 53661* Technical Corrigendum 1: Standards. (line 13) 53662* Technical Corrigendum 2: Standards. (line 13) 53663* Technical Corrigendum 3: Standards. (line 13) 53664* template instantiation: Template Instantiation. 53665 (line 6) 53666* temporaries, lifetime of: Temporaries. (line 6) 53667* tgamma: Other Builtins. (line 6) 53668* tgammaf: Other Builtins. (line 6) 53669* tgammal: Other Builtins. (line 6) 53670* thiscall function attribute, x86-32: Function Attributes. 53671 (line 414) 53672* Thread-Local Storage: Thread-Local. (line 6) 53673* thunks: Nested Functions. (line 6) 53674* TILE-Gx options: TILE-Gx Options. (line 6) 53675* TILEPro options: TILEPro Options. (line 6) 53676* tiny data section on the H8/300H and H8S: Variable Attributes. 53677 (line 418) 53678* tiny type attribute, MeP: Type Attributes. (line 349) 53679* tiny variable attribute, MeP: Variable Attributes. 53680 (line 475) 53681* tiny_data variable attribute, H8/300: Variable Attributes. 53682 (line 418) 53683* TLS: Thread-Local. (line 6) 53684* tls_model variable attribute: Variable Attributes. 53685 (line 236) 53686* TMPDIR: Environment Variables. 53687 (line 45) 53688* toascii: Other Builtins. (line 6) 53689* tolower: Other Builtins. (line 6) 53690* toupper: Other Builtins. (line 6) 53691* towlower: Other Builtins. (line 6) 53692* towupper: Other Builtins. (line 6) 53693* traditional C language: C Dialect Options. (line 344) 53694* transparent_union type attribute: Type Attributes. (line 143) 53695* trap_exit function attribute, SH: Function Attributes. 53696 (line 1844) 53697* trapa_handler function attribute, SH: Function Attributes. 53698 (line 1849) 53699* trunc: Other Builtins. (line 6) 53700* truncf: Other Builtins. (line 6) 53701* truncl: Other Builtins. (line 6) 53702* two-stage name lookup: Name lookup. (line 6) 53703* type alignment: Alignment. (line 6) 53704* type attributes: Type Attributes. (line 6) 53705* type_info: Vague Linkage. (line 42) 53706* typedef names as function parameters: Incompatibilities. (line 97) 53707* typeof: Typeof. (line 6) 53708* UHK fixed-suffix: Fixed-Point. (line 6) 53709* uhk fixed-suffix: Fixed-Point. (line 6) 53710* UHR fixed-suffix: Fixed-Point. (line 6) 53711* uhr fixed-suffix: Fixed-Point. (line 6) 53712* UK fixed-suffix: Fixed-Point. (line 6) 53713* uk fixed-suffix: Fixed-Point. (line 6) 53714* ULK fixed-suffix: Fixed-Point. (line 6) 53715* ulk fixed-suffix: Fixed-Point. (line 6) 53716* ULL integer suffix: Long Long. (line 6) 53717* ULLK fixed-suffix: Fixed-Point. (line 6) 53718* ullk fixed-suffix: Fixed-Point. (line 6) 53719* ULLR fixed-suffix: Fixed-Point. (line 6) 53720* ullr fixed-suffix: Fixed-Point. (line 6) 53721* ULR fixed-suffix: Fixed-Point. (line 6) 53722* ulr fixed-suffix: Fixed-Point. (line 6) 53723* undefined behavior: Bug Criteria. (line 17) 53724* undefined function value: Bug Criteria. (line 17) 53725* underscores in variables in macros: Typeof. (line 46) 53726* union: Unnamed Fields. (line 6) 53727* union, casting to a: Cast to Union. (line 6) 53728* unions: Incompatibilities. (line 146) 53729* unknown pragmas, warning: Warning Options. (line 729) 53730* unresolved references and -nodefaultlibs: Link Options. (line 91) 53731* unresolved references and -nostdlib: Link Options. (line 91) 53732* unused function attribute: Function Attributes. 53733 (line 1853) 53734* unused label attribute: Label Attributes. (line 29) 53735* unused type attribute: Type Attributes. (line 195) 53736* unused variable attribute: Variable Attributes. 53737 (line 245) 53738* UR fixed-suffix: Fixed-Point. (line 6) 53739* ur fixed-suffix: Fixed-Point. (line 6) 53740* use_debug_exception_return function attribute, MIPS: Function Attributes. 53741 (line 756) 53742* use_shadow_register_set function attribute, MIPS: Function Attributes. 53743 (line 747) 53744* used function attribute: Function Attributes. 53745 (line 1858) 53746* used variable attribute: Variable Attributes. 53747 (line 250) 53748* User stack pointer in interrupts on the Blackfin: Function Attributes. 53749 (line 840) 53750* V in constraint: Simple Constraints. (line 43) 53751* V850 Options: V850 Options. (line 6) 53752* vague linkage: Vague Linkage. (line 6) 53753* value after longjmp: Global Reg Vars. (line 65) 53754* variable addressability on the M32R/D: Variable Attributes. 53755 (line 446) 53756* variable alignment: Alignment. (line 6) 53757* variable attributes: Variable Attributes. 53758 (line 6) 53759* variable number of arguments: Variadic Macros. (line 6) 53760* variable-length array in a structure: Variable Length. (line 26) 53761* variable-length array scope: Variable Length. (line 22) 53762* variable-length arrays: Variable Length. (line 6) 53763* variables in specified registers: Explicit Reg Vars. (line 6) 53764* variables, local, in macros: Typeof. (line 46) 53765* variadic macros: Variadic Macros. (line 6) 53766* VAX options: VAX Options. (line 6) 53767* vector function attribute, RX: Function Attributes. 53768 (line 1868) 53769* vector_size variable attribute: Variable Attributes. 53770 (line 259) 53771* version_id function attribute, IA-64: Function Attributes. 53772 (line 1875) 53773* vfprintf: Other Builtins. (line 6) 53774* vfscanf: Other Builtins. (line 6) 53775* visibility function attribute: Function Attributes. 53776 (line 1885) 53777* visibility type attribute: Type Attributes. (line 269) 53778* Visium options: Visium Options. (line 6) 53779* VLAs: Variable Length. (line 6) 53780* vliw function attribute, MeP: Function Attributes. 53781 (line 1982) 53782* void pointers, arithmetic: Pointer Arith. (line 6) 53783* void, size of pointer to: Pointer Arith. (line 6) 53784* volatile access <1>: C++ Volatiles. (line 6) 53785* volatile access: Volatiles. (line 6) 53786* volatile applied to function: Function Attributes. 53787 (line 6) 53788* volatile asm: Extended Asm. (line 109) 53789* volatile read <1>: C++ Volatiles. (line 6) 53790* volatile read: Volatiles. (line 6) 53791* volatile write <1>: C++ Volatiles. (line 6) 53792* volatile write: Volatiles. (line 6) 53793* vprintf: Other Builtins. (line 6) 53794* vscanf: Other Builtins. (line 6) 53795* vsnprintf: Other Builtins. (line 6) 53796* vsprintf: Other Builtins. (line 6) 53797* vsscanf: Other Builtins. (line 6) 53798* vtable: Vague Linkage. (line 27) 53799* VxWorks Options: VxWorks Options. (line 6) 53800* W floating point suffix: Floating Types. (line 6) 53801* w floating point suffix: Floating Types. (line 6) 53802* wakeup function attribute, MSP430: Function Attributes. 53803 (line 703) 53804* warm function attribute, NDS32: Function Attributes. 53805 (line 1357) 53806* warn_unused type attribute: C++ Attributes. (line 77) 53807* warn_unused_result function attribute: Function Attributes. 53808 (line 1988) 53809* warning for comparison of signed and unsigned values: Warning Options. 53810 (line 1299) 53811* warning for overloaded virtual function: C++ Dialect Options. 53812 (line 682) 53813* warning for reordering of member initializers: C++ Dialect Options. 53814 (line 598) 53815* warning for unknown pragmas: Warning Options. (line 729) 53816* warning function attribute: Function Attributes. 53817 (line 206) 53818* warning GCC_COLORS capability: Language Independent Options. 53819 (line 72) 53820* warning messages: Warning Options. (line 6) 53821* warnings from system headers: Warning Options. (line 949) 53822* warnings vs errors: Warnings and Errors. 53823 (line 6) 53824* weak function attribute: Function Attributes. 53825 (line 2005) 53826* weak variable attribute: Variable Attributes. 53827 (line 304) 53828* weakref function attribute: Function Attributes. 53829 (line 2014) 53830* whitespace: Incompatibilities. (line 112) 53831* Windows Options for x86: x86 Windows Options. 53832 (line 6) 53833* X in constraint: Simple Constraints. (line 124) 53834* X3.159-1989: Standards. (line 13) 53835* x86 Options: x86 Options. (line 6) 53836* x86 Windows Options: x86 Windows Options. 53837 (line 6) 53838* Xstormy16 Options: Xstormy16 Options. (line 6) 53839* Xtensa Options: Xtensa Options. (line 6) 53840* y0: Other Builtins. (line 6) 53841* y0f: Other Builtins. (line 6) 53842* y0l: Other Builtins. (line 6) 53843* y1: Other Builtins. (line 6) 53844* y1f: Other Builtins. (line 6) 53845* y1l: Other Builtins. (line 6) 53846* yn: Other Builtins. (line 6) 53847* ynf: Other Builtins. (line 6) 53848* ynl: Other Builtins. (line 6) 53849* zero-length arrays: Zero Length. (line 6) 53850* zero-size structures: Empty Structures. (line 6) 53851* zSeries options: zSeries Options. (line 6) 53852 53853 53854 53855Tag Table: 53856Node: Top2022 53857Node: G++ and GCC3849 53858Node: Standards5918 53859Node: Invoking GCC18008 53860Node: Option Summary21753 53861Node: Overall Options66091 53862Node: Invoking G++80329 53863Node: C Dialect Options81852 53864Node: C++ Dialect Options99118 53865Node: Objective-C and Objective-C++ Dialect Options131104 53866Node: Language Independent Options142340 53867Node: Warning Options147158 53868Node: Debugging Options225591 53869Node: Optimize Options297069 53870Ref: Type-punning360332 53871Node: Preprocessor Options449123 53872Ref: Wtrigraphs453905 53873Ref: dashMF458653 53874Ref: fdollars-in-identifiers469517 53875Node: Assembler Options479760 53876Node: Link Options480452 53877Ref: Link Options-Footnote-1493980 53878Node: Directory Options494314 53879Node: Spec Files500876 53880Node: Target Options522747 53881Node: Submodel Options523146 53882Node: AArch64 Options524911 53883Node: Adapteva Epiphany Options530651 53884Node: ARC Options536602 53885Node: ARM Options549041 53886Node: AVR Options566728 53887Node: Blackfin Options588022 53888Node: C6X Options596037 53889Node: CRIS Options597580 53890Node: CR16 Options601324 53891Node: Darwin Options602231 53892Node: DEC Alpha Options609672 53893Node: FR30 Options621260 53894Node: FRV Options621825 53895Node: GNU/Linux Options628544 53896Node: H8/300 Options629805 53897Node: HPPA Options631255 53898Node: IA-64 Options640444 53899Node: LM32 Options648489 53900Node: M32C Options649013 53901Node: M32R/D Options650287 53902Node: M680x0 Options653833 53903Node: MCore Options667879 53904Node: MeP Options669382 53905Node: MicroBlaze Options673342 53906Node: MIPS Options676138 53907Node: MMIX Options709659 53908Node: MN10300 Options712141 53909Node: Moxie Options714684 53910Node: MSP430 Options715172 53911Node: NDS32 Options718676 53912Node: Nios II Options720570 53913Node: Nvidia PTX Options730747 53914Node: PDP-11 Options731139 53915Node: picoChip Options732836 53916Node: PowerPC Options734977 53917Node: RL78 Options735198 53918Node: RS/6000 and PowerPC Options736046 53919Node: RX Options776374 53920Node: S/390 and zSeries Options783724 53921Node: Score Options792282 53922Node: SH Options793124 53923Node: Solaris 2 Options814018 53924Node: SPARC Options815546 53925Node: SPU Options828815 53926Node: System V Options833752 53927Node: TILE-Gx Options834578 53928Node: TILEPro Options835596 53929Node: V850 Options836100 53930Node: VAX Options842792 53931Node: Visium Options843330 53932Node: VMS Options845638 53933Node: VxWorks Options846452 53934Node: x86 Options847604 53935Node: x86 Windows Options891188 53936Node: Xstormy16 Options893988 53937Node: Xtensa Options894282 53938Node: zSeries Options898607 53939Node: Code Gen Options898803 53940Node: Environment Variables929627 53941Node: Precompiled Headers937628 53942Node: C Implementation943636 53943Node: Translation implementation945325 53944Node: Environment implementation945917 53945Node: Identifiers implementation946472 53946Node: Characters implementation947559 53947Node: Integers implementation951210 53948Node: Floating point implementation953096 53949Node: Arrays and pointers implementation956161 53950Ref: Arrays and pointers implementation-Footnote-1957620 53951Node: Hints implementation957744 53952Node: Structures unions enumerations and bit-fields implementation959231 53953Node: Qualifiers implementation961456 53954Node: Declarators implementation963236 53955Node: Statements implementation963578 53956Node: Preprocessing directives implementation963905 53957Node: Library functions implementation966227 53958Node: Architecture implementation966877 53959Node: Locale-specific behavior implementation968519 53960Node: C++ Implementation968824 53961Node: Conditionally-supported behavior970106 53962Node: Exception handling970724 53963Node: C Extensions971133 53964Node: Statement Exprs976291 53965Node: Local Labels980767 53966Node: Labels as Values983740 53967Ref: Labels as Values-Footnote-1986265 53968Node: Nested Functions986448 53969Node: Constructing Calls990406 53970Node: Typeof995124 53971Node: Conditionals999052 53972Node: __int128999942 53973Node: Long Long1000466 53974Node: Complex1001942 53975Node: Floating Types1004531 53976Node: Half-Precision1005651 53977Node: Decimal Float1007833 53978Node: Hex Floats1009688 53979Node: Fixed-Point1010724 53980Node: Named Address Spaces1014006 53981Ref: AVR Named Address Spaces1014687 53982Node: Zero Length1019893 53983Node: Empty Structures1022932 53984Node: Variable Length1023338 53985Node: Variadic Macros1026194 53986Node: Escaped Newlines1028572 53987Node: Subscripting1029433 53988Node: Pointer Arith1030159 53989Node: Pointers to Arrays1030733 53990Node: Initializers1031477 53991Node: Compound Literals1031978 53992Node: Designated Inits1035325 53993Node: Case Ranges1039063 53994Node: Cast to Union1039744 53995Node: Mixed Declarations1040835 53996Node: Function Attributes1041345 53997Node: Label Attributes1135193 53998Node: Attribute Syntax1137037 53999Node: Function Prototypes1147251 54000Node: C++ Comments1149032 54001Node: Dollar Signs1149551 54002Node: Character Escapes1150016 54003Node: Variable Attributes1150310 54004Ref: AVR Variable Attributes1164031 54005Ref: MeP Variable Attributes1169396 54006Ref: x86 Variable Attributes1171966 54007Node: Type Attributes1177005 54008Ref: MeP Type Attributes1192254 54009Ref: PowerPC Type Attributes1192528 54010Ref: SPU Type Attributes1193389 54011Ref: x86 Type Attributes1193680 54012Node: Alignment1194368 54013Node: Inline1195738 54014Node: Volatiles1200713 54015Node: Using Assembly Language with C1203613 54016Node: Basic Asm1204817 54017Node: Extended Asm1208951 54018Ref: Volatile1212748 54019Ref: AssemblerTemplate1216820 54020Ref: OutputOperands1221045 54021Ref: InputOperands1227947 54022Ref: Clobbers1232172 54023Ref: GotoLabels1235468 54024Ref: x86Operandmodifiers1237601 54025Ref: x86floatingpointasmoperands1239845 54026Node: Constraints1243175 54027Node: Simple Constraints1244281 54028Node: Multi-Alternative1251606 54029Node: Modifiers1253613 54030Node: Machine Constraints1257117 54031Node: Asm Labels1313569 54032Node: Explicit Reg Vars1315267 54033Node: Global Reg Vars1316888 54034Node: Local Reg Vars1321388 54035Node: Size of an asm1324508 54036Node: Alternate Keywords1325753 54037Node: Incomplete Enums1327252 54038Node: Function Names1328008 54039Node: Return Address1329611 54040Node: Vector Extensions1333118 54041Node: Offsetof1340403 54042Node: __sync Builtins1341244 54043Node: __atomic Builtins1346720 54044Node: Integer Overflow Builtins1358324 54045Node: x86 specific memory model extensions for transactional memory1362454 54046Node: Object Size Checking1363723 54047Node: Pointer Bounds Checker builtins1369229 54048Node: Cilk Plus Builtins1375235 54049Node: Other Builtins1376151 54050Node: Target Builtins1405795 54051Node: AArch64 Built-in Functions1407287 54052Node: Alpha Built-in Functions1407742 54053Node: Altera Nios II Built-in Functions1410790 54054Node: ARC Built-in Functions1414775 54055Node: ARC SIMD Built-in Functions1419986 54056Node: ARM iWMMXt Built-in Functions1428882 54057Node: ARM C Language Extensions (ACLE)1435878 54058Node: ARM Floating Point Status and Control Intrinsics1437155 54059Node: AVR Built-in Functions1437631 54060Node: Blackfin Built-in Functions1440730 54061Node: FR-V Built-in Functions1441349 54062Node: Argument Types1442215 54063Node: Directly-mapped Integer Functions1443969 54064Node: Directly-mapped Media Functions1445053 54065Node: Raw read/write Functions1452087 54066Node: Other Built-in Functions1453001 54067Node: MIPS DSP Built-in Functions1454187 54068Node: MIPS Paired-Single Support1466685 54069Node: MIPS Loongson Built-in Functions1468184 54070Node: Paired-Single Arithmetic1474704 54071Node: Paired-Single Built-in Functions1475652 54072Node: MIPS-3D Built-in Functions1478319 54073Node: Other MIPS Built-in Functions1483696 54074Node: MSP430 Built-in Functions1484701 54075Node: NDS32 Built-in Functions1486102 54076Node: picoChip Built-in Functions1487395 54077Node: PowerPC Built-in Functions1488739 54078Node: PowerPC AltiVec/VSX Built-in Functions1492446 54079Node: PowerPC Hardware Transactional Memory Built-in Functions1632237 54080Node: RX Built-in Functions1640728 54081Node: S/390 System z Built-in Functions1644761 54082Node: SH Built-in Functions1649998 54083Node: SPARC VIS Built-in Functions1651726 54084Node: SPU Built-in Functions1657330 54085Node: TI C6X Built-in Functions1659146 54086Node: TILE-Gx Built-in Functions1660170 54087Node: TILEPro Built-in Functions1661287 54088Node: x86 Built-in Functions1662385 54089Node: x86 transactional memory intrinsics1721920 54090Node: Target Format Checks1725140 54091Node: Solaris Format Checks1725572 54092Node: Darwin Format Checks1725998 54093Node: Pragmas1726816 54094Node: ARM Pragmas1727552 54095Node: M32C Pragmas1728155 54096Node: MeP Pragmas1729229 54097Node: RS/6000 and PowerPC Pragmas1731298 54098Node: Darwin Pragmas1732039 54099Node: Solaris Pragmas1733106 54100Node: Symbol-Renaming Pragmas1734267 54101Node: Structure-Packing Pragmas1735881 54102Node: Weak Pragmas1737530 54103Node: Diagnostic Pragmas1738264 54104Node: Visibility Pragmas1741371 54105Node: Push/Pop Macro Pragmas1742056 54106Node: Function Specific Option Pragmas1743028 54107Node: Loop-Specific Pragmas1744873 54108Node: Unnamed Fields1745963 54109Node: Thread-Local1748161 54110Node: C99 Thread-Local Edits1750266 54111Node: C++98 Thread-Local Edits1752278 54112Node: Binary constants1755722 54113Node: C++ Extensions1756393 54114Node: C++ Volatiles1758104 54115Node: Restricted Pointers1760452 54116Node: Vague Linkage1762043 54117Node: C++ Interface1765667 54118Ref: C++ Interface-Footnote-11769460 54119Node: Template Instantiation1769596 54120Node: Bound member functions1776182 54121Node: C++ Attributes1777714 54122Node: Function Multiversioning1782151 54123Node: Namespace Association1783966 54124Node: Type Traits1785346 54125Node: Java Exceptions1791834 54126Node: Deprecated Features1793224 54127Node: Backwards Compatibility1796189 54128Node: Objective-C1797541 54129Node: GNU Objective-C runtime API1798150 54130Node: Modern GNU Objective-C runtime API1799157 54131Node: Traditional GNU Objective-C runtime API1801594 54132Node: Executing code before main1802322 54133Node: What you can and what you cannot do in +load1805064 54134Node: Type encoding1807436 54135Node: Legacy type encoding1812512 54136Node: @encode1813603 54137Node: Method signatures1814148 54138Node: Garbage Collection1816143 54139Node: Constant string objects1818832 54140Node: compatibility_alias1821340 54141Node: Exceptions1822066 54142Node: Synchronization1824777 54143Node: Fast enumeration1825961 54144Node: Using fast enumeration1826273 54145Node: c99-like fast enumeration syntax1827484 54146Node: Fast enumeration details1828187 54147Node: Fast enumeration protocol1830528 54148Node: Messaging with the GNU Objective-C runtime1833680 54149Node: Dynamically registering methods1835051 54150Node: Forwarding hook1836742 54151Node: Compatibility1839782 54152Node: Gcov1846349 54153Node: Gcov Intro1846884 54154Node: Invoking Gcov1849602 54155Node: Gcov and Optimization1863848 54156Node: Gcov Data Files1866848 54157Node: Cross-profiling1868243 54158Node: Gcov-tool1870094 54159Node: Gcov-tool Intro1870517 54160Node: Invoking Gcov-tool1872478 54161Node: Trouble1875026 54162Node: Actual Bugs1876443 54163Node: Interoperation1876890 54164Node: Incompatibilities1883782 54165Node: Fixed Headers1891933 54166Node: Standard Libraries1893596 54167Node: Disappointments1894968 54168Node: C++ Misunderstandings1899326 54169Node: Static Definitions1900137 54170Node: Name lookup1901190 54171Ref: Name lookup-Footnote-11905968 54172Node: Temporaries1906155 54173Node: Copy Assignment1908131 54174Node: Non-bugs1909938 54175Node: Warnings and Errors1920445 54176Node: Bugs1922207 54177Node: Bug Criteria1922674 54178Node: Bug Reporting1924884 54179Node: Service1925105 54180Node: Contributing1925924 54181Node: Funding1926664 54182Node: GNU Project1929153 54183Node: Copying1929799 54184Node: GNU Free Documentation License1967327 54185Node: Contributors1992464 54186Node: Option Index2031232 54187Node: Keyword Index2251989 54188 54189End Tag Table 54190