1This is doc/gcc.info, produced by makeinfo version 4.8 from 2/usr/src8/tools/gcc/../../external/gpl3/gcc/dist/gcc/doc/gcc.texi. 3 4 Copyright (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 (NetBSD nb1 20160606) version 5.4.0. The internals of 63the GNU compilers, 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 -cxx-isystem DIR 779 -imultilib DIR -isysroot DIR 780 -M -MM -MF -MG -MP -MQ -MT -nostdinc 781 -P -fdebug-cpp -ftrack-macro-expansion -fworking-directory 782 -remap -trigraphs -undef -UMACRO 783 -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp 784 785_Assembler Option_ 786 *Note Passing Options to the Assembler: Assembler Options. 787 -Wa,OPTION -Xassembler OPTION 788 789_Linker Options_ 790 *Note Options for Linking: Link Options. 791 OBJECT-FILE-NAME -fuse-ld=LINKER -lLIBRARY 792 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 793 -s -static -static-libgcc -static-libstdc++ 794 -static-libasan -static-libtsan -static-liblsan -static-libubsan 795 -static-libmpx -static-libmpxwrappers 796 -shared -shared-libgcc -symbolic 797 -T SCRIPT -Wl,OPTION -Xlinker OPTION 798 -u SYMBOL -z KEYWORD 799 800_Directory Options_ 801 *Note Options for Directory Search: Directory Options. 802 -BPREFIX -IDIR -iquoteDIR 803 -iremapSRC:DST -LDIR 804 -specs=FILE -I- --sysroot=DIR 805 806_Target Options_ 807 *Note Target Options::. 808 -V VERSION -b MACHINE 809 810 -BPREFIX -IDIR -iplugindir=DIR 811 -iquoteDIR -LDIR -specs=FILE -I- 812 --sysroot=DIR --no-sysroot-suffix 813 814_Machine Dependent Options_ 815 *Note Hardware Models and Configurations: Submodel Options. 816 817 _AArch64 Options_ 818 -mabi=NAME -mbig-endian -mlittle-endian 819 -mgeneral-regs-only 820 -mcmodel=tiny -mcmodel=small -mcmodel=large 821 -mstrict-align 822 -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 823 -mtls-dialect=desc -mtls-dialect=traditional 824 -mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 825 -mfix-cortex-a53-843419 -mno-fix-cortex-a53-843419 826 -march=NAME -mcpu=NAME -mtune=NAME 827 828 _Adapteva Epiphany Options_ 829 -mhalf-reg-file -mprefer-short-insn-regs 830 -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf 831 -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM 832 -mround-nearest -mlong-calls -mshort-calls -msmall16 833 -mfp-mode=MODE -mvect-double -max-vect-align=NUM 834 -msplit-vecmove-early -m1reg-REG 835 836 _ARC Options_ 837 -mbarrel-shifter 838 -mcpu=CPU -mA6 -mARC600 -mA7 -mARC700 839 -mdpfp -mdpfp-compact -mdpfp-fast -mno-dpfp-lrsr 840 -mea -mno-mpy -mmul32x16 -mmul64 841 -mnorm -mspfp -mspfp-compact -mspfp-fast -msimd -msoft-float -mswap 842 -mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape 843 -mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof 844 -mepilogue-cfi -mlong-calls -mmedium-calls -msdata 845 -mucb-mcount -mvolatile-cache 846 -malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc 847 -mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi 848 -mexpand-adddi -mindexed-loads -mlra -mlra-priority-none 849 -mlra-priority-compact mlra-priority-noncompact -mno-millicode 850 -mmixed-code -mq-class -mRcq -mRcw -msize-level=LEVEL 851 -mtune=CPU -mmultcost=NUM -munalign-prob-threshold=PROBABILITY 852 853 _ARM Options_ 854 -mapcs-frame -mno-apcs-frame 855 -mabi=NAME 856 -mapcs-stack-check -mno-apcs-stack-check 857 -mapcs-float -mno-apcs-float 858 -mapcs-reentrant -mno-apcs-reentrant 859 -msched-prolog -mno-sched-prolog 860 -mlittle-endian -mbig-endian 861 -mfloat-abi=NAME 862 -mfp16-format=NAME 863 -mthumb-interwork -mno-thumb-interwork 864 -mcpu=NAME -march=NAME -mfpu=NAME 865 -mtune=NAME -mprint-tune-info 866 -mstructure-size-boundary=N 867 -mabort-on-noreturn 868 -mlong-calls -mno-long-calls 869 -msingle-pic-base -mno-single-pic-base 870 -mpic-register=REG 871 -mnop-fun-dllimport 872 -mpoke-function-name 873 -mthumb -marm 874 -mtpcs-frame -mtpcs-leaf-frame 875 -mcaller-super-interworking -mcallee-super-interworking 876 -mtp=NAME -mtls-dialect=DIALECT 877 -mword-relocations 878 -mfix-cortex-m3-ldrd 879 -munaligned-access 880 -mneon-for-64bits 881 -mslow-flash-data 882 -masm-syntax-unified 883 -mrestrict-it 884 885 _AVR Options_ 886 -mmcu=MCU -maccumulate-args -mbranch-cost=COST 887 -mcall-prologues -mint8 -mn_flash=SIZE -mno-interrupts 888 -mrelax -mrmw -mstrict-X -mtiny-stack -nodevicelib -Waddr-space-convert 889 890 _Blackfin Options_ 891 -mcpu=CPU[-SIREVISION] 892 -msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 893 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 894 -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library 895 -mno-id-shared-library -mshared-library-id=N 896 -mleaf-id-shared-library -mno-leaf-id-shared-library 897 -msep-data -mno-sep-data -mlong-calls -mno-long-calls 898 -mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram 899 -micplb 900 901 _C6X Options_ 902 -mbig-endian -mlittle-endian -march=CPU 903 -msim -msdata=SDATA-TYPE 904 905 _CRIS Options_ 906 -mcpu=CPU -march=CPU -mtune=CPU 907 -mmax-stack-frame=N -melinux-stacksize=N 908 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 909 -mstack-align -mdata-align -mconst-align 910 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 911 -melf -maout -melinux -mlinux -sim -sim2 912 -mmul-bug-workaround -mno-mul-bug-workaround 913 914 _CR16 Options_ 915 -mmac 916 -mcr16cplus -mcr16c 917 -msim -mint32 -mbit-ops 918 -mdata-model=MODEL 919 920 _Darwin Options_ 921 -all_load -allowable_client -arch -arch_errors_fatal 922 -arch_only -bind_at_load -bundle -bundle_loader 923 -client_name -compatibility_version -current_version 924 -dead_strip 925 -dependency-file -dylib_file -dylinker_install_name 926 -dynamic -dynamiclib -exported_symbols_list 927 -filelist -flat_namespace -force_cpusubtype_ALL 928 -force_flat_namespace -headerpad_max_install_names 929 -iframework 930 -image_base -init -install_name -keep_private_externs 931 -multi_module -multiply_defined -multiply_defined_unused 932 -noall_load -no_dead_strip_inits_and_terms 933 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 934 -pagezero_size -prebind -prebind_all_twolevel_modules 935 -private_bundle -read_only_relocs -sectalign 936 -sectobjectsymbols -whyload -seg1addr 937 -sectcreate -sectobjectsymbols -sectorder 938 -segaddr -segs_read_only_addr -segs_read_write_addr 939 -seg_addr_table -seg_addr_table_filename -seglinkedit 940 -segprot -segs_read_only_addr -segs_read_write_addr 941 -single_module -static -sub_library -sub_umbrella 942 -twolevel_namespace -umbrella -undefined 943 -unexported_symbols_list -weak_reference_mismatches 944 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 945 -mkernel -mone-byte-bool 946 947 _DEC Alpha Options_ 948 -mno-fp-regs -msoft-float 949 -mieee -mieee-with-inexact -mieee-conformant 950 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 951 -mtrap-precision=MODE -mbuild-constants 952 -mcpu=CPU-TYPE -mtune=CPU-TYPE 953 -mbwx -mmax -mfix -mcix 954 -mfloat-vax -mfloat-ieee 955 -mexplicit-relocs -msmall-data -mlarge-data 956 -msmall-text -mlarge-text 957 -mmemory-latency=TIME 958 959 _FR30 Options_ 960 -msmall-model -mno-lsim 961 962 _FRV Options_ 963 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 964 -mhard-float -msoft-float 965 -malloc-cc -mfixed-cc -mdword -mno-dword 966 -mdouble -mno-double 967 -mmedia -mno-media -mmuladd -mno-muladd 968 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 969 -mlinked-fp -mlong-calls -malign-labels 970 -mlibrary-pic -macc-4 -macc-8 971 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 972 -moptimize-membar -mno-optimize-membar 973 -mscc -mno-scc -mcond-exec -mno-cond-exec 974 -mvliw-branch -mno-vliw-branch 975 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 976 -mno-nested-cond-exec -mtomcat-stats 977 -mTLS -mtls 978 -mcpu=CPU 979 980 _GNU/Linux Options_ 981 -mglibc -muclibc -mbionic -mandroid 982 -tno-android-cc -tno-android-ld 983 984 _H8/300 Options_ 985 -mrelax -mh -ms -mn -mexr -mno-exr -mint32 -malign-300 986 987 _HPPA Options_ 988 -march=ARCHITECTURE-TYPE 989 -mdisable-fpregs -mdisable-indexing 990 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 991 -mfixed-range=REGISTER-RANGE 992 -mjump-in-delay -mlinker-opt -mlong-calls 993 -mlong-load-store -mno-disable-fpregs 994 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 995 -mno-jump-in-delay -mno-long-load-store 996 -mno-portable-runtime -mno-soft-float 997 -mno-space-regs -msoft-float -mpa-risc-1-0 998 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 999 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 1000 -munix=UNIX-STD -nolibdld -static -threads 1001 1002 _IA-64 Options_ 1003 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 1004 -mvolatile-asm-stop -mregister-names -msdata -mno-sdata 1005 -mconstant-gp -mauto-pic -mfused-madd 1006 -minline-float-divide-min-latency 1007 -minline-float-divide-max-throughput 1008 -mno-inline-float-divide 1009 -minline-int-divide-min-latency 1010 -minline-int-divide-max-throughput 1011 -mno-inline-int-divide 1012 -minline-sqrt-min-latency -minline-sqrt-max-throughput 1013 -mno-inline-sqrt 1014 -mdwarf2-asm -mearly-stop-bits 1015 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 1016 -mtune=CPU-TYPE -milp32 -mlp64 1017 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec 1018 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 1019 -msched-spec-ldc -msched-spec-control-ldc 1020 -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns 1021 -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path 1022 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost 1023 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS 1024 1025 _LM32 Options_ 1026 -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled 1027 -msign-extend-enabled -muser-enabled 1028 1029 _M32R/D Options_ 1030 -m32r2 -m32rx -m32r 1031 -mdebug 1032 -malign-loops -mno-align-loops 1033 -missue-rate=NUMBER 1034 -mbranch-cost=NUMBER 1035 -mmodel=CODE-SIZE-MODEL-TYPE 1036 -msdata=SDATA-TYPE 1037 -mno-flush-func -mflush-func=NAME 1038 -mno-flush-trap -mflush-trap=NUMBER 1039 -G NUM 1040 1041 _M32C Options_ 1042 -mcpu=CPU -msim -memregs=NUMBER 1043 1044 _M680x0 Options_ 1045 -march=ARCH -mcpu=CPU -mtune=TUNE 1046 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 1047 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 1048 -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 1049 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort 1050 -mno-short -mhard-float -m68881 -msoft-float -mpcrel 1051 -malign-int -mstrict-align -msep-data -mno-sep-data 1052 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 1053 -mxgot -mno-xgot 1054 1055 _MCore Options_ 1056 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 1057 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 1058 -m4byte-functions -mno-4byte-functions -mcallgraph-data 1059 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 1060 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 1061 1062 _MeP Options_ 1063 -mabsdiff -mall-opts -maverage -mbased=N -mbitops 1064 -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2 1065 -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax 1066 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf 1067 -mtiny=N 1068 1069 _MicroBlaze Options_ 1070 -msoft-float -mhard-float -msmall-divides -mcpu=CPU 1071 -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift 1072 -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss 1073 -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt 1074 -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL 1075 1076 _MIPS Options_ 1077 -EL -EB -march=ARCH -mtune=ARCH 1078 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips32r3 -mips32r5 1079 -mips32r6 -mips64 -mips64r2 -mips64r3 -mips64r5 -mips64r6 1080 -mips16 -mno-mips16 -mflip-mips16 1081 -minterlink-compressed -mno-interlink-compressed 1082 -minterlink-mips16 -mno-interlink-mips16 1083 -mabi=ABI -mabicalls -mno-abicalls 1084 -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot 1085 -mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-float -msoft-float 1086 -mno-float -msingle-float -mdouble-float 1087 -modd-spreg -mno-odd-spreg 1088 -mabs=MODE -mnan=ENCODING 1089 -mdsp -mno-dsp -mdspr2 -mno-dspr2 1090 -mmcu -mmno-mcu 1091 -meva -mno-eva 1092 -mvirt -mno-virt 1093 -mxpa -mno-xpa 1094 -mmicromips -mno-micromips 1095 -mfpu=FPU-TYPE 1096 -msmartmips -mno-smartmips 1097 -mpaired-single -mno-paired-single -mdmx -mno-mdmx 1098 -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc 1099 -mlong64 -mlong32 -msym32 -mno-sym32 1100 -GNUM -mlocal-sdata -mno-local-sdata 1101 -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt 1102 -membedded-data -mno-embedded-data 1103 -muninit-const-in-rodata -mno-uninit-const-in-rodata 1104 -mcode-readable=SETTING 1105 -msplit-addresses -mno-split-addresses 1106 -mexplicit-relocs -mno-explicit-relocs 1107 -mcheck-zero-division -mno-check-zero-division 1108 -mdivide-traps -mdivide-breaks 1109 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 1110 -mmad -mno-mad -mimadd -mno-imadd -mfused-madd -mno-fused-madd -nocpp 1111 -mfix-24k -mno-fix-24k 1112 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 1113 -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000 1114 -mfix-vr4120 -mno-fix-vr4120 1115 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 1116 -mflush-func=FUNC -mno-flush-func 1117 -mbranch-cost=NUM -mbranch-likely -mno-branch-likely 1118 -mfp-exceptions -mno-fp-exceptions 1119 -mvr4130-align -mno-vr4130-align -msynci -mno-synci 1120 -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address 1121 1122 _MMIX Options_ 1123 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 1124 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 1125 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 1126 -mno-base-addresses -msingle-exit -mno-single-exit 1127 1128 _MN10300 Options_ 1129 -mmult-bug -mno-mult-bug 1130 -mno-am33 -mam33 -mam33-2 -mam34 1131 -mtune=CPU-TYPE 1132 -mreturn-pointer-on-d0 1133 -mno-crt0 -mrelax -mliw -msetlb 1134 1135 _Moxie Options_ 1136 -meb -mel -mmul.x -mno-crt0 1137 1138 _MSP430 Options_ 1139 -msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax 1140 -mhwmult= -minrt 1141 1142 _NDS32 Options_ 1143 -mbig-endian -mlittle-endian 1144 -mreduced-regs -mfull-regs 1145 -mcmov -mno-cmov 1146 -mperf-ext -mno-perf-ext 1147 -mv3push -mno-v3push 1148 -m16bit -mno-16bit 1149 -misr-vector-size=NUM 1150 -mcache-block-size=NUM 1151 -march=ARCH 1152 -mcmodel=CODE-MODEL 1153 -mctor-dtor -mrelax 1154 1155 _Nios II Options_ 1156 -G NUM -mgpopt=OPTION -mgpopt -mno-gpopt 1157 -mel -meb 1158 -mno-bypass-cache -mbypass-cache 1159 -mno-cache-volatile -mcache-volatile 1160 -mno-fast-sw-div -mfast-sw-div 1161 -mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div 1162 -mcustom-INSN=N -mno-custom-INSN 1163 -mcustom-fpu-cfg=NAME 1164 -mhal -msmallc -msys-crt0=NAME -msys-lib=NAME 1165 1166 _Nvidia PTX Options_ 1167 -m32 -m64 -mmainkernel 1168 1169 _PDP-11 Options_ 1170 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 1171 -mbcopy -mbcopy-builtin -mint32 -mno-int16 1172 -mint16 -mno-int32 -mfloat32 -mno-float64 1173 -mfloat64 -mno-float32 -mabshi -mno-abshi 1174 -mbranch-expensive -mbranch-cheap 1175 -munix-asm -mdec-asm 1176 1177 _picoChip Options_ 1178 -mae=AE_TYPE -mvliw-lookahead=N 1179 -msymbol-as-address -mno-inefficient-warnings 1180 1181 _PowerPC Options_ See RS/6000 and PowerPC Options. 1182 1183 _RL78 Options_ 1184 -msim -mmul=none -mmul=g13 -mmul=rl78 1185 -m64bit-doubles -m32bit-doubles 1186 1187 _RS/6000 and PowerPC Options_ 1188 -mcpu=CPU-TYPE 1189 -mtune=CPU-TYPE 1190 -mcmodel=CODE-MODEL 1191 -mpowerpc64 1192 -maltivec -mno-altivec 1193 -mpowerpc-gpopt -mno-powerpc-gpopt 1194 -mpowerpc-gfxopt -mno-powerpc-gfxopt 1195 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd 1196 -mfprnd -mno-fprnd 1197 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp 1198 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 1199 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 1200 -malign-power -malign-natural 1201 -msoft-float -mhard-float -mmultiple -mno-multiple 1202 -msingle-float -mdouble-float -msimple-fpu 1203 -mstring -mno-string -mupdate -mno-update 1204 -mavoid-indexed-addresses -mno-avoid-indexed-addresses 1205 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 1206 -mstrict-align -mno-strict-align -mrelocatable 1207 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 1208 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 1209 -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base 1210 -mprioritize-restricted-insns=PRIORITY 1211 -msched-costly-dep=DEPENDENCE_TYPE 1212 -minsert-sched-nops=SCHEME 1213 -mcall-sysv -mcall-netbsd 1214 -maix-struct-return -msvr4-struct-return 1215 -mabi=ABI-TYPE -msecure-plt -mbss-plt 1216 -mblock-move-inline-limit=NUM 1217 -misel -mno-isel 1218 -misel=yes -misel=no 1219 -mspe -mno-spe 1220 -mspe=yes -mspe=no 1221 -mpaired 1222 -mgen-cell-microcode -mwarn-cell-microcode 1223 -mvrsave -mno-vrsave 1224 -mmulhw -mno-mulhw 1225 -mdlmzb -mno-dlmzb 1226 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 1227 -mprototype -mno-prototype 1228 -msim -mmvme -mads -myellowknife -memb -msdata 1229 -msdata=OPT -mvxworks -G NUM -pthread 1230 -mrecip -mrecip=OPT -mno-recip -mrecip-precision 1231 -mno-recip-precision 1232 -mveclibabi=TYPE -mfriz -mno-friz 1233 -mpointers-to-nested-functions -mno-pointers-to-nested-functions 1234 -msave-toc-indirect -mno-save-toc-indirect 1235 -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector 1236 -mcrypto -mno-crypto -mdirect-move -mno-direct-move 1237 -mquad-memory -mno-quad-memory 1238 -mquad-memory-atomic -mno-quad-memory-atomic 1239 -mcompat-align-parm -mno-compat-align-parm 1240 -mupper-regs-df -mno-upper-regs-df -mupper-regs-sf -mno-upper-regs-sf 1241 -mupper-regs -mno-upper-regs 1242 1243 _RX Options_ 1244 -m64bit-doubles -m32bit-doubles -fpu -nofpu 1245 -mcpu= 1246 -mbig-endian-data -mlittle-endian-data 1247 -msmall-data 1248 -msim -mno-sim 1249 -mas100-syntax -mno-as100-syntax 1250 -mrelax 1251 -mmax-constant-size= 1252 -mint-register= 1253 -mpid 1254 -mno-warn-multiple-fast-interrupts 1255 -msave-acc-in-interrupts 1256 1257 _S/390 and zSeries Options_ 1258 -mtune=CPU-TYPE -march=CPU-TYPE 1259 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp 1260 -mlong-double-64 -mlong-double-128 1261 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 1262 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 1263 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 1264 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 1265 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 1266 -mhotpatch=HALFWORDS,HALFWORDS 1267 1268 _Score Options_ 1269 -meb -mel 1270 -mnhwloop 1271 -muls 1272 -mmac 1273 -mscore5 -mscore5u -mscore7 -mscore7d 1274 1275 _SH Options_ 1276 -m1 -m2 -m2e 1277 -m2a-nofpu -m2a-single-only -m2a-single -m2a 1278 -m3 -m3e 1279 -m4-nofpu -m4-single-only -m4-single -m4 1280 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 1281 -m5-64media -m5-64media-nofpu 1282 -m5-32media -m5-32media-nofpu 1283 -m5-compact -m5-compact-nofpu 1284 -mb -ml -mdalign -mrelax 1285 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 1286 -mieee -mno-ieee -mbitops -misize -minline-ic_invalidate -mpadstruct 1287 -mspace -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 1288 -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE 1289 -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 1290 -maccumulate-outgoing-args -minvalid-symbols 1291 -matomic-model=ATOMIC-MODEL 1292 -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch 1293 -mcbranch-force-delay-slot 1294 -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra 1295 -mpretend-cmove -mtas 1296 1297 _Solaris 2 Options_ 1298 -mclear-hwcap -mno-clear-hwcap -mimpure-text -mno-impure-text 1299 -pthreads -pthread 1300 1301 _SPARC Options_ 1302 -mcpu=CPU-TYPE 1303 -mtune=CPU-TYPE 1304 -mcmodel=CODE-MODEL 1305 -mmemory-model=MEM-MODEL 1306 -m32 -m64 -mapp-regs -mno-app-regs 1307 -mfaster-structs -mno-faster-structs -mflat -mno-flat 1308 -mfpu -mno-fpu -mhard-float -msoft-float 1309 -mhard-quad-float -msoft-quad-float 1310 -mstack-bias -mno-stack-bias 1311 -munaligned-doubles -mno-unaligned-doubles 1312 -muser-mode -mno-user-mode 1313 -mv8plus -mno-v8plus -mvis -mno-vis 1314 -mvis2 -mno-vis2 -mvis3 -mno-vis3 1315 -mcbcond -mno-cbcond 1316 -mfmaf -mno-fmaf -mpopc -mno-popc 1317 -mfix-at697f -mfix-ut699 1318 1319 _SPU Options_ 1320 -mwarn-reloc -merror-reloc 1321 -msafe-dma -munsafe-dma 1322 -mbranch-hints 1323 -msmall-mem -mlarge-mem -mstdmain 1324 -mfixed-range=REGISTER-RANGE 1325 -mea32 -mea64 1326 -maddress-space-conversion -mno-address-space-conversion 1327 -mcache-size=CACHE-SIZE 1328 -matomic-updates -mno-atomic-updates 1329 1330 _System V Options_ 1331 -Qy -Qn -YP,PATHS -Ym,DIR 1332 1333 _TILE-Gx Options_ 1334 -mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian 1335 -mcmodel=CODE-MODEL 1336 1337 _TILEPro Options_ 1338 -mcpu=CPU -m32 1339 1340 _V850 Options_ 1341 -mlong-calls -mno-long-calls -mep -mno-ep 1342 -mprolog-function -mno-prolog-function -mspace 1343 -mtda=N -msda=N -mzda=N 1344 -mapp-regs -mno-app-regs 1345 -mdisable-callt -mno-disable-callt 1346 -mv850e2v3 -mv850e2 -mv850e1 -mv850es 1347 -mv850e -mv850 -mv850e3v5 1348 -mloop 1349 -mrelax 1350 -mlong-jumps 1351 -msoft-float 1352 -mhard-float 1353 -mgcc-abi 1354 -mrh850-abi 1355 -mbig-switch 1356 1357 _VAX Options_ 1358 -mg -mgnu -munix 1359 1360 _Visium Options_ 1361 -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float 1362 -mcpu=CPU-TYPE -mtune=CPU-TYPE -msv-mode -muser-mode 1363 1364 _VMS Options_ 1365 -mvms-return-codes -mdebug-main=PREFIX -mmalloc64 1366 -mpointer-size=SIZE 1367 1368 _VxWorks Options_ 1369 -mrtp -non-static -Bstatic -Bdynamic 1370 -Xbind-lazy -Xbind-now 1371 1372 _x86 Options_ 1373 -mtune=CPU-TYPE -march=CPU-TYPE 1374 -mtune-ctrl=FEATURE-LIST -mdump-tune-features -mno-default 1375 -mfpmath=UNIT 1376 -masm=DIALECT -mno-fancy-math-387 1377 -mno-fp-ret-in-387 -msoft-float 1378 -mno-wide-multiply -mrtd -malign-double 1379 -mpreferred-stack-boundary=NUM 1380 -mincoming-stack-boundary=NUM 1381 -mcld -mcx16 -msahf -mmovbe -mcrc32 1382 -mrecip -mrecip=OPT 1383 -mvzeroupper -mprefer-avx128 1384 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx 1385 -mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -msha 1386 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1 1387 -mclflushopt -mxsavec -mxsaves 1388 -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt 1389 -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mthreads 1390 -mno-align-stringops -minline-all-stringops 1391 -minline-stringops-dynamically -mstringop-strategy=ALG 1392 -mmemcpy-strategy=STRATEGY -mmemset-strategy=STRATEGY 1393 -mpush-args -maccumulate-outgoing-args -m128bit-long-double 1394 -m96bit-long-double -mlong-double-64 -mlong-double-80 -mlong-double-128 1395 -mregparm=NUM -msseregparm 1396 -mveclibabi=TYPE -mvect8-ret-in-mem 1397 -mpc32 -mpc64 -mpc80 -mstackrealign 1398 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 1399 -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE 1400 -m32 -m64 -mx32 -m16 -mlarge-data-threshold=NUM 1401 -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv 1402 -mavx256-split-unaligned-load -mavx256-split-unaligned-store 1403 -malign-data=TYPE -mstack-protector-guard=GUARD 1404 1405 _x86 Windows Options_ 1406 -mconsole -mcygwin -mno-cygwin -mdll 1407 -mnop-fun-dllimport -mthread 1408 -municode -mwin32 -mwindows -fno-set-stack-executable 1409 1410 _Xstormy16 Options_ 1411 -msim 1412 1413 _Xtensa Options_ 1414 -mconst16 -mno-const16 1415 -mfused-madd -mno-fused-madd 1416 -mforce-no-pic 1417 -mserialize-volatile -mno-serialize-volatile 1418 -mtext-section-literals -mno-text-section-literals 1419 -mtarget-align -mno-target-align 1420 -mlongcalls -mno-longcalls 1421 1422 _zSeries Options_ See S/390 and zSeries Options. 1423 1424_Code Generation Options_ 1425 *Note Options for Code Generation Conventions: Code Gen Options. 1426 -fcall-saved-REG -fcall-used-REG 1427 -ffixed-REG -fexceptions 1428 -fnon-call-exceptions -fdelete-dead-exceptions -funwind-tables 1429 -fasynchronous-unwind-tables 1430 -fno-gnu-unique 1431 -finhibit-size-directive -finstrument-functions 1432 -finstrument-functions-exclude-function-list=SYM,SYM,... 1433 -finstrument-functions-exclude-file-list=FILE,FILE,... 1434 -fno-common -fno-ident 1435 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 1436 -fno-jump-tables 1437 -frecord-gcc-switches 1438 -freg-struct-return -fshort-enums 1439 -fshort-double -fshort-wchar 1440 -fverbose-asm -fpack-struct[=N] -fstack-check 1441 -fstack-limit-register=REG -fstack-limit-symbol=SYM 1442 -fno-stack-limit -fsplit-stack 1443 -fleading-underscore -ftls-model=MODEL 1444 -fstack-reuse=REUSE_LEVEL 1445 -ftrapv -fwrapv -fbounds-check 1446 -fvisibility=[default|internal|hidden|protected] 1447 -fstrict-volatile-bitfields -fsync-libcalls 1448 1449 1450 1451File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1452 14533.2 Options Controlling the Kind of Output 1454========================================== 1455 1456Compilation can involve up to four stages: preprocessing, compilation 1457proper, assembly and linking, always in that order. GCC is capable of 1458preprocessing and compiling several files either into several assembler 1459input files, or into one assembler input file; then each assembler 1460input file produces an object file, and linking combines all the object 1461files (those newly compiled, and those specified as input) into an 1462executable file. 1463 1464 For any given input file, the file name suffix determines what kind of 1465compilation is done: 1466 1467`FILE.c' 1468 C source code that must be preprocessed. 1469 1470`FILE.i' 1471 C source code that should not be preprocessed. 1472 1473`FILE.ii' 1474 C++ source code that should not be preprocessed. 1475 1476`FILE.m' 1477 Objective-C source code. Note that you must link with the 1478 `libobjc' library to make an Objective-C program work. 1479 1480`FILE.mi' 1481 Objective-C source code that should not be preprocessed. 1482 1483`FILE.mm' 1484`FILE.M' 1485 Objective-C++ source code. Note that you must link with the 1486 `libobjc' library to make an Objective-C++ program work. Note 1487 that `.M' refers to a literal capital M. 1488 1489`FILE.mii' 1490 Objective-C++ source code that should not be preprocessed. 1491 1492`FILE.h' 1493 C, C++, Objective-C or Objective-C++ header file to be turned into 1494 a precompiled header (default), or C, C++ header file to be turned 1495 into an Ada spec (via the `-fdump-ada-spec' switch). 1496 1497`FILE.cc' 1498`FILE.cp' 1499`FILE.cxx' 1500`FILE.cpp' 1501`FILE.CPP' 1502`FILE.c++' 1503`FILE.C' 1504 C++ source code that must be preprocessed. Note that in `.cxx', 1505 the last two letters must both be literally `x'. Likewise, `.C' 1506 refers to a literal capital C. 1507 1508`FILE.mm' 1509`FILE.M' 1510 Objective-C++ source code that must be preprocessed. 1511 1512`FILE.mii' 1513 Objective-C++ source code that should not be preprocessed. 1514 1515`FILE.hh' 1516`FILE.H' 1517`FILE.hp' 1518`FILE.hxx' 1519`FILE.hpp' 1520`FILE.HPP' 1521`FILE.h++' 1522`FILE.tcc' 1523 C++ header file to be turned into a precompiled header or Ada spec. 1524 1525`FILE.f' 1526`FILE.for' 1527`FILE.ftn' 1528 Fixed form Fortran source code that should not be preprocessed. 1529 1530`FILE.F' 1531`FILE.FOR' 1532`FILE.fpp' 1533`FILE.FPP' 1534`FILE.FTN' 1535 Fixed form Fortran source code that must be preprocessed (with the 1536 traditional preprocessor). 1537 1538`FILE.f90' 1539`FILE.f95' 1540`FILE.f03' 1541`FILE.f08' 1542 Free form Fortran source code that should not be preprocessed. 1543 1544`FILE.F90' 1545`FILE.F95' 1546`FILE.F03' 1547`FILE.F08' 1548 Free form Fortran source code that must be preprocessed (with the 1549 traditional preprocessor). 1550 1551`FILE.go' 1552 Go source code. 1553 1554`FILE.ads' 1555 Ada source code file that contains a library unit declaration (a 1556 declaration of a package, subprogram, or generic, or a generic 1557 instantiation), or a library unit renaming declaration (a package, 1558 generic, or subprogram renaming declaration). Such files are also 1559 called "specs". 1560 1561`FILE.adb' 1562 Ada source code file containing a library unit body (a subprogram 1563 or package body). Such files are also called "bodies". 1564 1565`FILE.s' 1566 Assembler code. 1567 1568`FILE.S' 1569`FILE.sx' 1570 Assembler code that must be preprocessed. 1571 1572`OTHER' 1573 An object file to be fed straight into linking. Any file name 1574 with no recognized suffix is treated this way. 1575 1576 You can specify the input language explicitly with the `-x' option: 1577 1578`-x LANGUAGE' 1579 Specify explicitly the LANGUAGE for the following input files 1580 (rather than letting the compiler choose a default based on the 1581 file name suffix). This option applies to all following input 1582 files until the next `-x' option. Possible values for LANGUAGE 1583 are: 1584 c c-header cpp-output 1585 c++ c++-header c++-cpp-output 1586 objective-c objective-c-header objective-c-cpp-output 1587 objective-c++ objective-c++-header objective-c++-cpp-output 1588 assembler assembler-with-cpp 1589 ada 1590 f77 f77-cpp-input f95 f95-cpp-input 1591 go 1592 java 1593 1594`-x none' 1595 Turn off any specification of a language, so that subsequent files 1596 are handled according to their file name suffixes (as they are if 1597 `-x' has not been used at all). 1598 1599`-pass-exit-codes' 1600 Normally the `gcc' program exits with the code of 1 if any phase 1601 of the compiler returns a non-success return code. If you specify 1602 `-pass-exit-codes', the `gcc' program instead returns with the 1603 numerically highest error produced by any phase returning an error 1604 indication. The C, C++, and Fortran front ends return 4 if an 1605 internal compiler error is encountered. 1606 1607 If you only want some of the stages of compilation, you can use `-x' 1608(or filename suffixes) to tell `gcc' where to start, and one of the 1609options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that 1610some combinations (for example, `-x cpp-output -E') instruct `gcc' to 1611do nothing at all. 1612 1613`-c' 1614 Compile or assemble the source files, but do not link. The linking 1615 stage simply is not done. The ultimate output is in the form of an 1616 object file for each source file. 1617 1618 By default, the object file name for a source file is made by 1619 replacing the suffix `.c', `.i', `.s', etc., with `.o'. 1620 1621 Unrecognized input files, not requiring compilation or assembly, 1622 are ignored. 1623 1624`-S' 1625 Stop after the stage of compilation proper; do not assemble. The 1626 output is in the form of an assembler code file for each 1627 non-assembler input file specified. 1628 1629 By default, the assembler file name for a source file is made by 1630 replacing the suffix `.c', `.i', etc., with `.s'. 1631 1632 Input files that don't require compilation are ignored. 1633 1634`-E' 1635 Stop after the preprocessing stage; do not run the compiler 1636 proper. The output is in the form of preprocessed source code, 1637 which is sent to the standard output. 1638 1639 Input files that don't require preprocessing are ignored. 1640 1641`-o FILE' 1642 Place output in file FILE. This applies to whatever sort of 1643 output is being produced, whether it be an executable file, an 1644 object file, an assembler file or preprocessed C code. 1645 1646 If `-o' is not specified, the default is to put an executable file 1647 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its 1648 assembler file in `SOURCE.s', a precompiled header file in 1649 `SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1650 output. 1651 1652`-v' 1653 Print (on standard error output) the commands executed to run the 1654 stages of compilation. Also print the version number of the 1655 compiler driver program and of the preprocessor and the compiler 1656 proper. 1657 1658`-###' 1659 Like `-v' except the commands are not executed and arguments are 1660 quoted unless they contain only alphanumeric characters or `./-_'. 1661 This is useful for shell scripts to capture the driver-generated 1662 command lines. 1663 1664`-pipe' 1665 Use pipes rather than temporary files for communication between the 1666 various stages of compilation. This fails to work on some systems 1667 where the assembler is unable to read from a pipe; but the GNU 1668 assembler has no trouble. 1669 1670`--help' 1671 Print (on the standard output) a description of the command-line 1672 options understood by `gcc'. If the `-v' option is also specified 1673 then `--help' is also passed on to the various processes invoked 1674 by `gcc', so that they can display the command-line options they 1675 accept. If the `-Wextra' option has also been specified (prior to 1676 the `--help' option), then command-line options that have no 1677 documentation associated with them are also displayed. 1678 1679`--target-help' 1680 Print (on the standard output) a description of target-specific 1681 command-line options for each tool. For some targets extra 1682 target-specific information may also be printed. 1683 1684`--help={CLASS|[^]QUALIFIER}[,...]' 1685 Print (on the standard output) a description of the command-line 1686 options understood by the compiler that fit into all specified 1687 classes and qualifiers. These are the supported classes: 1688 1689 `optimizers' 1690 Display all of the optimization options supported by the 1691 compiler. 1692 1693 `warnings' 1694 Display all of the options controlling warning messages 1695 produced by the compiler. 1696 1697 `target' 1698 Display target-specific options. Unlike the `--target-help' 1699 option however, target-specific options of the linker and 1700 assembler are not displayed. This is because those tools do 1701 not currently support the extended `--help=' syntax. 1702 1703 `params' 1704 Display the values recognized by the `--param' option. 1705 1706 LANGUAGE 1707 Display the options supported for LANGUAGE, where LANGUAGE is 1708 the name of one of the languages supported in this version of 1709 GCC. 1710 1711 `common' 1712 Display the options that are common to all languages. 1713 1714 These are the supported qualifiers: 1715 1716 `undocumented' 1717 Display only those options that are undocumented. 1718 1719 `joined' 1720 Display options taking an argument that appears after an equal 1721 sign in the same continuous piece of text, such as: 1722 `--help=target'. 1723 1724 `separate' 1725 Display options taking an argument that appears as a separate 1726 word following the original option, such as: `-o output-file'. 1727 1728 Thus for example to display all the undocumented target-specific 1729 switches supported by the compiler, use: 1730 1731 --help=target,undocumented 1732 1733 The sense of a qualifier can be inverted by prefixing it with the 1734 `^' character, so for example to display all binary warning 1735 options (i.e., ones that are either on or off and that do not take 1736 an argument) that have a description, use: 1737 1738 --help=warnings,^joined,^undocumented 1739 1740 The argument to `--help=' should not consist solely of inverted 1741 qualifiers. 1742 1743 Combining several classes is possible, although this usually 1744 restricts the output so much that there is nothing to display. One 1745 case where it does work, however, is when one of the classes is 1746 TARGET. For example, to display all the target-specific 1747 optimization options, use: 1748 1749 --help=target,optimizers 1750 1751 The `--help=' option can be repeated on the command line. Each 1752 successive use displays its requested class of options, skipping 1753 those that have already been displayed. 1754 1755 If the `-Q' option appears on the command line before the 1756 `--help=' option, then the descriptive text displayed by `--help=' 1757 is changed. Instead of describing the displayed options, an 1758 indication is given as to whether the option is enabled, disabled 1759 or set to a specific value (assuming that the compiler knows this 1760 at the point where the `--help=' option is used). 1761 1762 Here is a truncated example from the ARM port of `gcc': 1763 1764 % gcc -Q -mabi=2 --help=target -c 1765 The following options are target specific: 1766 -mabi= 2 1767 -mabort-on-noreturn [disabled] 1768 -mapcs [disabled] 1769 1770 The output is sensitive to the effects of previous command-line 1771 options, so for example it is possible to find out which 1772 optimizations are enabled at `-O2' by using: 1773 1774 -Q -O2 --help=optimizers 1775 1776 Alternatively you can discover which binary optimizations are 1777 enabled by `-O3' by using: 1778 1779 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 1780 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 1781 diff /tmp/O2-opts /tmp/O3-opts | grep enabled 1782 1783`-no-canonical-prefixes' 1784 Do not expand any symbolic links, resolve references to `/../' or 1785 `/./', or make the path absolute when generating a relative prefix. 1786 1787`--version' 1788 Display the version number and copyrights of the invoked GCC. 1789 1790`-wrapper' 1791 Invoke all subcommands under a wrapper program. The name of the 1792 wrapper program and its parameters are passed as a comma separated 1793 list. 1794 1795 gcc -c t.c -wrapper gdb,--args 1796 1797 This invokes all subprograms of `gcc' under `gdb --args', thus the 1798 invocation of `cc1' is `gdb --args cc1 ...'. 1799 1800`-fplugin=NAME.so' 1801 Load the plugin code in file NAME.so, assumed to be a shared 1802 object to be dlopen'd by the compiler. The base name of the 1803 shared object file is used to identify the plugin for the purposes 1804 of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below). 1805 Each plugin should define the callback functions specified in the 1806 Plugins API. 1807 1808`-fplugin-arg-NAME-KEY=VALUE' 1809 Define an argument called KEY with a value of VALUE for the plugin 1810 called NAME. 1811 1812`-fdump-ada-spec[-slim]' 1813 For C and C++ source and include files, generate corresponding Ada 1814 specs. *Note Generating Ada Bindings for C and C++ headers: 1815 (gnat_ugn)Generating Ada Bindings for C and C++ headers, which 1816 provides detailed documentation on this feature. 1817 1818`-fada-spec-parent=UNIT' 1819 In conjunction with `-fdump-ada-spec[-slim]' above, generate Ada 1820 specs as child units of parent UNIT. 1821 1822`-fdump-go-spec=FILE' 1823 For input files in any language, generate corresponding Go 1824 declarations in FILE. This generates Go `const', `type', `var', 1825 and `func' declarations which may be a useful way to start writing 1826 a Go interface to code written in some other language. 1827 1828`@FILE' 1829 Read command-line options from FILE. The options read are 1830 inserted in place of the original @FILE option. If FILE does not 1831 exist, or cannot be read, then the option will be treated 1832 literally, and not removed. 1833 1834 Options in FILE are separated by whitespace. A whitespace 1835 character may be included in an option by surrounding the entire 1836 option in either single or double quotes. Any character 1837 (including a backslash) may be included by prefixing the character 1838 to be included with a backslash. The FILE may itself contain 1839 additional @FILE options; any such options will be processed 1840 recursively. 1841 1842 1843File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1844 18453.3 Compiling C++ Programs 1846========================== 1847 1848C++ source files conventionally use one of the suffixes `.C', `.cc', 1849`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use 1850`.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and 1851preprocessed C++ files use the suffix `.ii'. GCC recognizes files with 1852these names and compiles them as C++ programs even if you call the 1853compiler the same way as for compiling C programs (usually with the 1854name `gcc'). 1855 1856 However, the use of `gcc' does not add the C++ library. `g++' is a 1857program that calls GCC and automatically specifies linking against the 1858C++ library. It treats `.c', `.h' and `.i' files as C++ source files 1859instead of C source files unless `-x' is used. This program is also 1860useful when precompiling a C header file with a `.h' extension for use 1861in C++ compilations. On many systems, `g++' is also installed with the 1862name `c++'. 1863 1864 When you compile C++ programs, you may specify many of the same 1865command-line options that you use for compiling programs in any 1866language; or command-line options meaningful for C and related 1867languages; or options that are meaningful only for C++ programs. *Note 1868Options Controlling C Dialect: C Dialect Options, for explanations of 1869options for languages related to C. *Note Options Controlling C++ 1870Dialect: C++ Dialect Options, for explanations of options that are 1871meaningful only for C++ programs. 1872 1873 1874File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1875 18763.4 Options Controlling C Dialect 1877================================= 1878 1879The following options control the dialect of C (or languages derived 1880from C, such as C++, Objective-C and Objective-C++) that the compiler 1881accepts: 1882 1883`-ansi' 1884 In C mode, this is equivalent to `-std=c90'. In C++ mode, it is 1885 equivalent to `-std=c++98'. 1886 1887 This turns off certain features of GCC that are incompatible with 1888 ISO C90 (when compiling C code), or of standard C++ (when 1889 compiling C++ code), such as the `asm' and `typeof' keywords, and 1890 predefined macros such as `unix' and `vax' that identify the type 1891 of system you are using. It also enables the undesirable and 1892 rarely used ISO trigraph feature. For the C compiler, it disables 1893 recognition of C++ style `//' comments as well as the `inline' 1894 keyword. 1895 1896 The alternate keywords `__asm__', `__extension__', `__inline__' 1897 and `__typeof__' continue to work despite `-ansi'. You would not 1898 want to use them in an ISO C program, of course, but it is useful 1899 to put them in header files that might be included in compilations 1900 done with `-ansi'. Alternate predefined macros such as `__unix__' 1901 and `__vax__' are also available, with or without `-ansi'. 1902 1903 The `-ansi' option does not cause non-ISO programs to be rejected 1904 gratuitously. For that, `-Wpedantic' is required in addition to 1905 `-ansi'. *Note Warning Options::. 1906 1907 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option 1908 is used. Some header files may notice this macro and refrain from 1909 declaring certain functions or defining certain macros that the 1910 ISO standard doesn't call for; this is to avoid interfering with 1911 any programs that might use these names for other things. 1912 1913 Functions that are normally built in but do not have semantics 1914 defined by ISO C (such as `alloca' and `ffs') are not built-in 1915 functions when `-ansi' is used. *Note Other built-in functions 1916 provided by GCC: Other Builtins, for details of the functions 1917 affected. 1918 1919`-std=' 1920 Determine the language standard. *Note Language Standards 1921 Supported by GCC: Standards, for details of these standard 1922 versions. This option is currently only supported when compiling 1923 C or C++. 1924 1925 The compiler can accept several base standards, such as `c90' or 1926 `c++98', and GNU dialects of those standards, such as `gnu90' or 1927 `gnu++98'. When a base standard is specified, the compiler 1928 accepts all programs following that standard plus those using GNU 1929 extensions that do not contradict it. For example, `-std=c90' 1930 turns off certain features of GCC that are incompatible with ISO 1931 C90, such as the `asm' and `typeof' keywords, but not other GNU 1932 extensions that do not have a meaning in ISO C90, such as omitting 1933 the middle term of a `?:' expression. On the other hand, when a 1934 GNU dialect of a standard is specified, all features supported by 1935 the compiler are enabled, even when those features change the 1936 meaning of the base standard. As a result, some strict-conforming 1937 programs may be rejected. The particular standard is used by 1938 `-Wpedantic' to identify which features are GNU extensions given 1939 that version of the standard. For example `-std=gnu90 -Wpedantic' 1940 warns about C++ style `//' comments, while `-std=gnu99 -Wpedantic' 1941 does not. 1942 1943 A value for this option must be provided; possible values are 1944 1945 `c90' 1946 `c89' 1947 `iso9899:1990' 1948 Support all ISO C90 programs (certain GNU extensions that 1949 conflict with ISO C90 are disabled). Same as `-ansi' for C 1950 code. 1951 1952 `iso9899:199409' 1953 ISO C90 as modified in amendment 1. 1954 1955 `c99' 1956 `c9x' 1957 `iso9899:1999' 1958 `iso9899:199x' 1959 ISO C99. This standard is substantially completely 1960 supported, modulo bugs and floating-point issues (mainly but 1961 not entirely relating to optional C99 features from Annexes F 1962 and G). See `http://gcc.gnu.org/c99status.html' for more 1963 information. The names `c9x' and `iso9899:199x' are 1964 deprecated. 1965 1966 `c11' 1967 `c1x' 1968 `iso9899:2011' 1969 ISO C11, the 2011 revision of the ISO C standard. This 1970 standard is substantially completely supported, modulo bugs, 1971 floating-point issues (mainly but not entirely relating to 1972 optional C11 features from Annexes F and G) and the optional 1973 Annexes K (Bounds-checking interfaces) and L (Analyzability). 1974 The name `c1x' is deprecated. 1975 1976 `gnu90' 1977 `gnu89' 1978 GNU dialect of ISO C90 (including some C99 features). 1979 1980 `gnu99' 1981 `gnu9x' 1982 GNU dialect of ISO C99. The name `gnu9x' is deprecated. 1983 1984 `gnu11' 1985 `gnu1x' 1986 GNU dialect of ISO C11. This is the default for C code. The 1987 name `gnu1x' is deprecated. 1988 1989 `c++98' 1990 `c++03' 1991 The 1998 ISO C++ standard plus the 2003 technical corrigendum 1992 and some additional defect reports. Same as `-ansi' for C++ 1993 code. 1994 1995 `gnu++98' 1996 `gnu++03' 1997 GNU dialect of `-std=c++98'. This is the default for C++ 1998 code. 1999 2000 `c++11' 2001 `c++0x' 2002 The 2011 ISO C++ standard plus amendments. The name `c++0x' 2003 is deprecated. 2004 2005 `gnu++11' 2006 `gnu++0x' 2007 GNU dialect of `-std=c++11'. The name `gnu++0x' is 2008 deprecated. 2009 2010 `c++14' 2011 `c++1y' 2012 The 2014 ISO C++ standard plus amendments. The name `c++1y' 2013 is deprecated. 2014 2015 `gnu++14' 2016 `gnu++1y' 2017 GNU dialect of `-std=c++14'. The name `gnu++1y' is 2018 deprecated. 2019 2020 `c++1z' 2021 The next revision of the ISO C++ standard, tentatively 2022 planned for 2017. Support is highly experimental, and will 2023 almost certainly change in incompatible ways in future 2024 releases. 2025 2026 `gnu++1z' 2027 GNU dialect of `-std=c++1z'. Support is highly experimental, 2028 and will almost certainly change in incompatible ways in 2029 future releases. 2030 2031`-fgnu89-inline' 2032 The option `-fgnu89-inline' tells GCC to use the traditional GNU 2033 semantics for `inline' functions when in C99 mode. *Note An 2034 Inline Function is As Fast As a Macro: Inline. Using this option 2035 is roughly equivalent to adding the `gnu_inline' function 2036 attribute to all inline functions (*note Function Attributes::). 2037 2038 The option `-fno-gnu89-inline' explicitly tells GCC to use the C99 2039 semantics for `inline' when in C99 or gnu99 mode (i.e., it 2040 specifies the default behavior). This option is not supported in 2041 `-std=c90' or `-std=gnu90' mode. 2042 2043 The preprocessor macros `__GNUC_GNU_INLINE__' and 2044 `__GNUC_STDC_INLINE__' may be used to check which semantics are in 2045 effect for `inline' functions. *Note Common Predefined Macros: 2046 (cpp)Common Predefined Macros. 2047 2048`-aux-info FILENAME' 2049 Output to the given filename prototyped declarations for all 2050 functions declared and/or defined in a translation unit, including 2051 those in header files. This option is silently ignored in any 2052 language other than C. 2053 2054 Besides declarations, the file indicates, in comments, the origin 2055 of each declaration (source file and line), whether the 2056 declaration was implicit, prototyped or unprototyped (`I', `N' for 2057 new or `O' for old, respectively, in the first character after the 2058 line number and the colon), and whether it came from a declaration 2059 or a definition (`C' or `F', respectively, in the following 2060 character). In the case of function definitions, a K&R-style list 2061 of arguments followed by their declarations is also provided, 2062 inside comments, after the declaration. 2063 2064`-fallow-parameterless-variadic-functions' 2065 Accept variadic functions without named parameters. 2066 2067 Although it is possible to define such a function, this is not very 2068 useful as it is not possible to read the arguments. This is only 2069 supported for C as this construct is allowed by C++. 2070 2071`-fno-asm' 2072 Do not recognize `asm', `inline' or `typeof' as a keyword, so that 2073 code can use these words as identifiers. You can use the keywords 2074 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies 2075 `-fno-asm'. 2076 2077 In C++, this switch only affects the `typeof' keyword, since `asm' 2078 and `inline' are standard keywords. You may want to use the 2079 `-fno-gnu-keywords' flag instead, which has the same effect. In 2080 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects 2081 the `asm' and `typeof' keywords, since `inline' is a standard 2082 keyword in ISO C99. 2083 2084`-fno-builtin' 2085`-fno-builtin-FUNCTION' 2086 Don't recognize built-in functions that do not begin with 2087 `__builtin_' as prefix. *Note Other built-in functions provided 2088 by GCC: Other Builtins, for details of the functions affected, 2089 including those which are not built-in functions when `-ansi' or 2090 `-std' options for strict ISO C conformance are used because they 2091 do not have an ISO standard meaning. 2092 2093 GCC normally generates special code to handle certain built-in 2094 functions more efficiently; for instance, calls to `alloca' may 2095 become single instructions which adjust the stack directly, and 2096 calls to `memcpy' may become inline copy loops. The resulting 2097 code is often both smaller and faster, but since the function 2098 calls no longer appear as such, you cannot set a breakpoint on 2099 those calls, nor can you change the behavior of the functions by 2100 linking with a different library. In addition, when a function is 2101 recognized as a built-in function, GCC may use information about 2102 that function to warn about problems with calls to that function, 2103 or to generate more efficient code, even if the resulting code 2104 still contains calls to that function. For example, warnings are 2105 given with `-Wformat' for bad calls to `printf' when `printf' is 2106 built in and `strlen' is known not to modify global memory. 2107 2108 With the `-fno-builtin-FUNCTION' option only the built-in function 2109 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'. 2110 If a function is named that is not built-in in this version of 2111 GCC, this option is ignored. There is no corresponding 2112 `-fbuiltin-FUNCTION' option; if you wish to enable built-in 2113 functions selectively when using `-fno-builtin' or 2114 `-ffreestanding', you may define macros such as: 2115 2116 #define abs(n) __builtin_abs ((n)) 2117 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 2118 2119`-fhosted' 2120 Assert that compilation targets a hosted environment. This implies 2121 `-fbuiltin'. A hosted environment is one in which the entire 2122 standard library is available, and in which `main' has a return 2123 type of `int'. Examples are nearly everything except a kernel. 2124 This is equivalent to `-fno-freestanding'. 2125 2126`-ffreestanding' 2127 Assert that compilation targets a freestanding environment. This 2128 implies `-fno-builtin'. A freestanding environment is one in 2129 which the standard library may not exist, and program startup may 2130 not necessarily be at `main'. The most obvious example is an OS 2131 kernel. This is equivalent to `-fno-hosted'. 2132 2133 *Note Language Standards Supported by GCC: Standards, for details 2134 of freestanding and hosted environments. 2135 2136`-fopenacc' 2137 Enable handling of OpenACC directives `#pragma acc' in C/C++ and 2138 `!$acc' in Fortran. When `-fopenacc' is specified, the compiler 2139 generates accelerated code according to the OpenACC Application 2140 Programming Interface v2.0 `http://www.openacc.org/'. This option 2141 implies `-pthread', and thus is only supported on targets that 2142 have support for `-pthread'. 2143 2144 Note that this is an experimental feature, incomplete, and subject 2145 to change in future versions of GCC. See 2146 `https://gcc.gnu.org/wiki/OpenACC' for more information. 2147 2148`-fopenmp' 2149 Enable handling of OpenMP directives `#pragma omp' in C/C++ and 2150 `!$omp' in Fortran. When `-fopenmp' is specified, the compiler 2151 generates parallel code according to the OpenMP Application 2152 Program Interface v4.0 `http://www.openmp.org/'. This option 2153 implies `-pthread', and thus is only supported on targets that 2154 have support for `-pthread'. `-fopenmp' implies `-fopenmp-simd'. 2155 2156`-fopenmp-simd' 2157 Enable handling of OpenMP's SIMD directives with `#pragma omp' in 2158 C/C++ and `!$omp' in Fortran. Other OpenMP directives are ignored. 2159 2160`-fcilkplus' 2161 Enable the usage of Cilk Plus language extension features for 2162 C/C++. When the option `-fcilkplus' is specified, enable the 2163 usage of the Cilk Plus Language extension features for C/C++. The 2164 present implementation follows ABI version 1.2. This is an 2165 experimental feature that is only partially complete, and whose 2166 interface may change in future versions of GCC as the official 2167 specification changes. Currently, all features but `_Cilk_for' 2168 have been implemented. 2169 2170`-fgnu-tm' 2171 When the option `-fgnu-tm' is specified, the compiler generates 2172 code for the Linux variant of Intel's current Transactional Memory 2173 ABI specification document (Revision 1.1, May 6 2009). This is an 2174 experimental feature whose interface may change in future versions 2175 of GCC, as the official specification changes. Please note that 2176 not all architectures are supported for this feature. 2177 2178 For more information on GCC's support for transactional memory, 2179 *Note The GNU Transactional Memory Library: (libitm)Enabling 2180 libitm. 2181 2182 Note that the transactional memory feature is not supported with 2183 non-call exceptions (`-fnon-call-exceptions'). 2184 2185`-fms-extensions' 2186 Accept some non-standard constructs used in Microsoft header files. 2187 2188 In C++ code, this allows member names in structures to be similar 2189 to previous types declarations. 2190 2191 typedef int UOW; 2192 struct ABC { 2193 UOW UOW; 2194 }; 2195 2196 Some cases of unnamed fields in structures and unions are only 2197 accepted with this option. *Note Unnamed struct/union fields 2198 within structs/unions: Unnamed Fields, for details. 2199 2200 Note that this option is off for all targets but x86 targets using 2201 ms-abi. 2202 2203`-fplan9-extensions' 2204 Accept some non-standard constructs used in Plan 9 code. 2205 2206 This enables `-fms-extensions', permits passing pointers to 2207 structures with anonymous fields to functions that expect pointers 2208 to elements of the type of the field, and permits referring to 2209 anonymous fields declared using a typedef. *Note Unnamed 2210 struct/union fields within structs/unions: Unnamed Fields, for 2211 details. This is only supported for C, not C++. 2212 2213`-trigraphs' 2214 Support ISO C trigraphs. The `-ansi' option (and `-std' options 2215 for strict ISO C conformance) implies `-trigraphs'. 2216 2217`-traditional' 2218`-traditional-cpp' 2219 Formerly, these options caused GCC to attempt to emulate a 2220 pre-standard C compiler. They are now only supported with the 2221 `-E' switch. The preprocessor continues to support a pre-standard 2222 mode. See the GNU CPP manual for details. 2223 2224`-fcond-mismatch' 2225 Allow conditional expressions with mismatched types in the second 2226 and third arguments. The value of such an expression is void. 2227 This option is not supported for C++. 2228 2229`-flax-vector-conversions' 2230 Allow implicit conversions between vectors with differing numbers 2231 of elements and/or incompatible element types. This option should 2232 not be used for new code. 2233 2234`-funsigned-char' 2235 Let the type `char' be unsigned, like `unsigned char'. 2236 2237 Each kind of machine has a default for what `char' should be. It 2238 is either like `unsigned char' by default or like `signed char' by 2239 default. 2240 2241 Ideally, a portable program should always use `signed char' or 2242 `unsigned char' when it depends on the signedness of an object. 2243 But many programs have been written to use plain `char' and expect 2244 it to be signed, or expect it to be unsigned, depending on the 2245 machines they were written for. This option, and its inverse, let 2246 you make such a program work with the opposite default. 2247 2248 The type `char' is always a distinct type from each of `signed 2249 char' or `unsigned char', even though its behavior is always just 2250 like one of those two. 2251 2252`-fsigned-char' 2253 Let the type `char' be signed, like `signed char'. 2254 2255 Note that this is equivalent to `-fno-unsigned-char', which is the 2256 negative form of `-funsigned-char'. Likewise, the option 2257 `-fno-signed-char' is equivalent to `-funsigned-char'. 2258 2259`-fsigned-bitfields' 2260`-funsigned-bitfields' 2261`-fno-signed-bitfields' 2262`-fno-unsigned-bitfields' 2263 These options control whether a bit-field is signed or unsigned, 2264 when the declaration does not use either `signed' or `unsigned'. 2265 By default, such a bit-field is signed, because this is 2266 consistent: the basic integer types such as `int' are signed types. 2267 2268 2269File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 2270 22713.5 Options Controlling C++ Dialect 2272=================================== 2273 2274This section describes the command-line options that are only meaningful 2275for C++ programs. You can also use most of the GNU compiler options 2276regardless of what language your program is in. For example, you might 2277compile a file `firstClass.C' like this: 2278 2279 g++ -g -frepo -O -c firstClass.C 2280 2281In this example, only `-frepo' is an option meant only for C++ 2282programs; you can use the other options with any language supported by 2283GCC. 2284 2285 Here is a list of options that are _only_ for compiling C++ programs: 2286 2287`-fabi-version=N' 2288 Use version N of the C++ ABI. The default is version 0. 2289 2290 Version 0 refers to the version conforming most closely to the C++ 2291 ABI specification. Therefore, the ABI obtained using version 0 2292 will change in different versions of G++ as ABI bugs are fixed. 2293 2294 Version 1 is the version of the C++ ABI that first appeared in G++ 2295 3.2. 2296 2297 Version 2 is the version of the C++ ABI that first appeared in G++ 2298 3.4, and was the default through G++ 4.9. 2299 2300 Version 3 corrects an error in mangling a constant address as a 2301 template argument. 2302 2303 Version 4, which first appeared in G++ 4.5, implements a standard 2304 mangling for vector types. 2305 2306 Version 5, which first appeared in G++ 4.6, corrects the mangling 2307 of attribute const/volatile on function pointer types, decltype of 2308 a plain decl, and use of a function parameter in the declaration of 2309 another parameter. 2310 2311 Version 6, which first appeared in G++ 4.7, corrects the promotion 2312 behavior of C++11 scoped enums and the mangling of template 2313 argument packs, const/static_cast, prefix ++ and -, and a class 2314 scope function used as a template argument. 2315 2316 Version 7, which first appeared in G++ 4.8, that treats nullptr_t 2317 as a builtin type and corrects the mangling of lambdas in default 2318 argument scope. 2319 2320 Version 8, which first appeared in G++ 4.9, corrects the 2321 substitution behavior of function types with 2322 function-cv-qualifiers. 2323 2324 Version 9, which first appeared in G++ 5.2, corrects the alignment 2325 of `nullptr_t'. 2326 2327 See also `-Wabi'. 2328 2329`-fabi-compat-version=N' 2330 On targets that support strong aliases, G++ works around mangling 2331 changes by creating an alias with the correct mangled name when 2332 defining a symbol with an incorrect mangled name. This switch 2333 specifies which ABI version to use for the alias. 2334 2335 With `-fabi-version=0' (the default), this defaults to 2. If 2336 another ABI version is explicitly selected, this defaults to 0. 2337 2338 The compatibility version is also set by `-Wabi=N'. 2339 2340`-fno-access-control' 2341 Turn off all access checking. This switch is mainly useful for 2342 working around bugs in the access control code. 2343 2344`-fcheck-new' 2345 Check that the pointer returned by `operator new' is non-null 2346 before attempting to modify the storage allocated. This check is 2347 normally unnecessary because the C++ standard specifies that 2348 `operator new' only returns `0' if it is declared `throw()', in 2349 which case the compiler always checks the return value even 2350 without this option. In all other cases, when `operator new' has 2351 a non-empty exception specification, memory exhaustion is 2352 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'. 2353 2354`-fconstexpr-depth=N' 2355 Set the maximum nested evaluation depth for C++11 constexpr 2356 functions to N. A limit is needed to detect endless recursion 2357 during constant expression evaluation. The minimum specified by 2358 the standard is 512. 2359 2360`-fdeduce-init-list' 2361 Enable deduction of a template type parameter as 2362 `std::initializer_list' from a brace-enclosed initializer list, 2363 i.e. 2364 2365 template <class T> auto forward(T t) -> decltype (realfn (t)) 2366 { 2367 return realfn (t); 2368 } 2369 2370 void f() 2371 { 2372 forward({1,2}); // call forward<std::initializer_list<int>> 2373 } 2374 2375 This deduction was implemented as a possible extension to the 2376 originally proposed semantics for the C++11 standard, but was not 2377 part of the final standard, so it is disabled by default. This 2378 option is deprecated, and may be removed in a future version of 2379 G++. 2380 2381`-ffriend-injection' 2382 Inject friend functions into the enclosing namespace, so that they 2383 are visible outside the scope of the class in which they are 2384 declared. Friend functions were documented to work this way in 2385 the old Annotated C++ Reference Manual. However, in ISO C++ a 2386 friend function that is not declared in an enclosing scope can 2387 only be found using argument dependent lookup. GCC defaults to 2388 the standard behavior. 2389 2390 This option is for compatibility, and may be removed in a future 2391 release of G++. 2392 2393`-fno-elide-constructors' 2394 The C++ standard allows an implementation to omit creating a 2395 temporary that is only used to initialize another object of the 2396 same type. Specifying this option disables that optimization, and 2397 forces G++ to call the copy constructor in all cases. 2398 2399`-fno-enforce-eh-specs' 2400 Don't generate code to check for violation of exception 2401 specifications at run time. This option violates the C++ 2402 standard, but may be useful for reducing code size in production 2403 builds, much like defining `NDEBUG'. This does not give user code 2404 permission to throw exceptions in violation of the exception 2405 specifications; the compiler still optimizes based on the 2406 specifications, so throwing an unexpected exception results in 2407 undefined behavior at run time. 2408 2409`-fextern-tls-init' 2410`-fno-extern-tls-init' 2411 The C++11 and OpenMP standards allow `thread_local' and 2412 `threadprivate' variables to have dynamic (runtime) 2413 initialization. To support this, any use of such a variable goes 2414 through a wrapper function that performs any necessary 2415 initialization. When the use and definition of the variable are 2416 in the same translation unit, this overhead can be optimized away, 2417 but when the use is in a different translation unit there is 2418 significant overhead even if the variable doesn't actually need 2419 dynamic initialization. If the programmer can be sure that no use 2420 of the variable in a non-defining TU needs to trigger dynamic 2421 initialization (either because the variable is statically 2422 initialized, or a use of the variable in the defining TU will be 2423 executed before any uses in another TU), they can avoid this 2424 overhead with the `-fno-extern-tls-init' option. 2425 2426 On targets that support symbol aliases, the default is 2427 `-fextern-tls-init'. On targets that do not support symbol 2428 aliases, the default is `-fno-extern-tls-init'. 2429 2430`-ffor-scope' 2431`-fno-for-scope' 2432 If `-ffor-scope' is specified, the scope of variables declared in 2433 a for-init-statement is limited to the `for' loop itself, as 2434 specified by the C++ standard. If `-fno-for-scope' is specified, 2435 the scope of variables declared in a for-init-statement extends to 2436 the end of the enclosing scope, as was the case in old versions of 2437 G++, and other (traditional) implementations of C++. 2438 2439 If neither flag is given, the default is to follow the standard, 2440 but to allow and give a warning for old-style code that would 2441 otherwise be invalid, or have different behavior. 2442 2443`-fno-gnu-keywords' 2444 Do not recognize `typeof' as a keyword, so that code can use this 2445 word as an identifier. You can use the keyword `__typeof__' 2446 instead. `-ansi' implies `-fno-gnu-keywords'. 2447 2448`-fno-implicit-templates' 2449 Never emit code for non-inline templates that are instantiated 2450 implicitly (i.e. by use); only emit code for explicit 2451 instantiations. *Note Template Instantiation::, for more 2452 information. 2453 2454`-fno-implicit-inline-templates' 2455 Don't emit code for implicit instantiations of inline templates, 2456 either. The default is to handle inlines differently so that 2457 compiles with and without optimization need the same set of 2458 explicit instantiations. 2459 2460`-fno-implement-inlines' 2461 To save space, do not emit out-of-line copies of inline functions 2462 controlled by `#pragma implementation'. This causes linker errors 2463 if these functions are not inlined everywhere they are called. 2464 2465`-fms-extensions' 2466 Disable Wpedantic warnings about constructs used in MFC, such as 2467 implicit int and getting a pointer to member function via 2468 non-standard syntax. 2469 2470`-fno-nonansi-builtins' 2471 Disable built-in declarations of functions that are not mandated by 2472 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index', 2473 `bzero', `conjf', and other related functions. 2474 2475`-fnothrow-opt' 2476 Treat a `throw()' exception specification as if it were a 2477 `noexcept' specification to reduce or eliminate the text size 2478 overhead relative to a function with no exception specification. 2479 If the function has local variables of types with non-trivial 2480 destructors, the exception specification actually makes the 2481 function smaller because the EH cleanups for those variables can be 2482 optimized away. The semantic effect is that an exception thrown 2483 out of a function with such an exception specification results in 2484 a call to `terminate' rather than `unexpected'. 2485 2486`-fno-operator-names' 2487 Do not treat the operator name keywords `and', `bitand', `bitor', 2488 `compl', `not', `or' and `xor' as synonyms as keywords. 2489 2490`-fno-optional-diags' 2491 Disable diagnostics that the standard says a compiler does not 2492 need to issue. Currently, the only such diagnostic issued by G++ 2493 is the one for a name having multiple meanings within a class. 2494 2495`-fpermissive' 2496 Downgrade some diagnostics about nonconformant code from errors to 2497 warnings. Thus, using `-fpermissive' allows some nonconforming 2498 code to compile. 2499 2500`-fno-pretty-templates' 2501 When an error message refers to a specialization of a function 2502 template, the compiler normally prints the signature of the 2503 template followed by the template arguments and any typedefs or 2504 typenames in the signature (e.g. `void f(T) [with T = int]' rather 2505 than `void f(int)') so that it's clear which template is involved. 2506 When an error message refers to a specialization of a class 2507 template, the compiler omits any template arguments that match the 2508 default template arguments for that template. If either of these 2509 behaviors make it harder to understand the error message rather 2510 than easier, you can use `-fno-pretty-templates' to disable them. 2511 2512`-frepo' 2513 Enable automatic template instantiation at link time. This option 2514 also implies `-fno-implicit-templates'. *Note Template 2515 Instantiation::, for more information. 2516 2517`-fno-rtti' 2518 Disable generation of information about every class with virtual 2519 functions for use by the C++ run-time type identification features 2520 (`dynamic_cast' and `typeid'). If you don't use those parts of 2521 the language, you can save some space by using this flag. Note 2522 that exception handling uses the same information, but G++ 2523 generates it as needed. The `dynamic_cast' operator can still be 2524 used for casts that do not require run-time type information, i.e. 2525 casts to `void *' or to unambiguous base classes. 2526 2527`-fsized-deallocation' 2528 Enable the built-in global declarations 2529 void operator delete (void *, std::size_t) noexcept; 2530 void operator delete[] (void *, std::size_t) noexcept; 2531 as introduced in C++14. This is useful for user-defined 2532 replacement deallocation functions that, for example, use the size 2533 of the object to make deallocation faster. Enabled by default 2534 under `-std=c++14' and above. The flag `-Wsized-deallocation' 2535 warns about places that might want to add a definition. 2536 2537`-fstats' 2538 Emit statistics about front-end processing at the end of the 2539 compilation. This information is generally only useful to the G++ 2540 development team. 2541 2542`-fstrict-enums' 2543 Allow the compiler to optimize using the assumption that a value of 2544 enumerated type can only be one of the values of the enumeration 2545 (as defined in the C++ standard; basically, a value that can be 2546 represented in the minimum number of bits needed to represent all 2547 the enumerators). This assumption may not be valid if the program 2548 uses a cast to convert an arbitrary integer value to the 2549 enumerated type. 2550 2551`-ftemplate-backtrace-limit=N' 2552 Set the maximum number of template instantiation notes for a single 2553 warning or error to N. The default value is 10. 2554 2555`-ftemplate-depth=N' 2556 Set the maximum instantiation depth for template classes to N. A 2557 limit on the template instantiation depth is needed to detect 2558 endless recursions during template class instantiation. ANSI/ISO 2559 C++ conforming programs must not rely on a maximum depth greater 2560 than 17 (changed to 1024 in C++11). The default value is 900, as 2561 the compiler can run out of stack space before hitting 1024 in 2562 some situations. 2563 2564`-fno-threadsafe-statics' 2565 Do not emit the extra code to use the routines specified in the C++ 2566 ABI for thread-safe initialization of local statics. You can use 2567 this option to reduce code size slightly in code that doesn't need 2568 to be thread-safe. 2569 2570`-fuse-cxa-atexit' 2571 Register destructors for objects with static storage duration with 2572 the `__cxa_atexit' function rather than the `atexit' function. 2573 This option is required for fully standards-compliant handling of 2574 static destructors, but only works if your C library supports 2575 `__cxa_atexit'. 2576 2577`-fno-use-cxa-get-exception-ptr' 2578 Don't use the `__cxa_get_exception_ptr' runtime routine. This 2579 causes `std::uncaught_exception' to be incorrect, but is necessary 2580 if the runtime routine is not available. 2581 2582`-fvisibility-inlines-hidden' 2583 This switch declares that the user does not attempt to compare 2584 pointers to inline functions or methods where the addresses of the 2585 two functions are taken in different shared objects. 2586 2587 The effect of this is that GCC may, effectively, mark inline 2588 methods with `__attribute__ ((visibility ("hidden")))' so that 2589 they do not appear in the export table of a DSO and do not require 2590 a PLT indirection when used within the DSO. Enabling this option 2591 can have a dramatic effect on load and link times of a DSO as it 2592 massively reduces the size of the dynamic export table when the 2593 library makes heavy use of templates. 2594 2595 The behavior of this switch is not quite the same as marking the 2596 methods as hidden directly, because it does not affect static 2597 variables local to the function or cause the compiler to deduce 2598 that the function is defined in only one shared object. 2599 2600 You may mark a method as having a visibility explicitly to negate 2601 the effect of the switch for that method. For example, if you do 2602 want to compare pointers to a particular inline method, you might 2603 mark it as having default visibility. Marking the enclosing class 2604 with explicit visibility has no effect. 2605 2606 Explicitly instantiated inline methods are unaffected by this 2607 option as their linkage might otherwise cross a shared library 2608 boundary. *Note Template Instantiation::. 2609 2610`-fvisibility-ms-compat' 2611 This flag attempts to use visibility settings to make GCC's C++ 2612 linkage model compatible with that of Microsoft Visual Studio. 2613 2614 The flag makes these changes to GCC's linkage model: 2615 2616 1. It sets the default visibility to `hidden', like 2617 `-fvisibility=hidden'. 2618 2619 2. Types, but not their members, are not hidden by default. 2620 2621 3. The One Definition Rule is relaxed for types without explicit 2622 visibility specifications that are defined in more than one 2623 shared object: those declarations are permitted if they are 2624 permitted when this option is not used. 2625 2626 In new code it is better to use `-fvisibility=hidden' and export 2627 those classes that are intended to be externally visible. 2628 Unfortunately it is possible for code to rely, perhaps 2629 accidentally, on the Visual Studio behavior. 2630 2631 Among the consequences of these changes are that static data 2632 members of the same type with the same name but defined in 2633 different shared objects are different, so changing one does not 2634 change the other; and that pointers to function members defined in 2635 different shared objects may not compare equal. When this flag is 2636 given, it is a violation of the ODR to define types with the same 2637 name differently. 2638 2639`-fvtable-verify=[std|preinit|none]' 2640 Turn on (or off, if using `-fvtable-verify=none') the security 2641 feature that verifies at run time, for every virtual call, that 2642 the vtable pointer through which the call is made is valid for the 2643 type of the object, and has not been corrupted or overwritten. If 2644 an invalid vtable pointer is detected at run time, an error is 2645 reported and execution of the program is immediately halted. 2646 2647 This option causes run-time data structures to be built at program 2648 startup, which are used for verifying the vtable pointers. The 2649 options `std' and `preinit' control the timing of when these data 2650 structures are built. In both cases the data structures are built 2651 before execution reaches `main'. Using `-fvtable-verify=std' 2652 causes the data structures to be built after shared libraries have 2653 been loaded and initialized. `-fvtable-verify=preinit' causes 2654 them to be built before shared libraries have been loaded and 2655 initialized. 2656 2657 If this option appears multiple times in the command line with 2658 different values specified, `none' takes highest priority over 2659 both `std' and `preinit'; `preinit' takes priority over `std'. 2660 2661`-fvtv-debug' 2662 When used in conjunction with `-fvtable-verify=std' or 2663 `-fvtable-verify=preinit', causes debug versions of the runtime 2664 functions for the vtable verification feature to be called. This 2665 flag also causes the compiler to log information about which 2666 vtable pointers it finds for each class. This information is 2667 written to a file named `vtv_set_ptr_data.log' in the directory 2668 named by the environment variable `VTV_LOGS_DIR' if that is 2669 defined or the current working directory otherwise. 2670 2671 Note: This feature _appends_ data to the log file. If you want a 2672 fresh log file, be sure to delete any existing one. 2673 2674`-fvtv-counts' 2675 This is a debugging flag. When used in conjunction with 2676 `-fvtable-verify=std' or `-fvtable-verify=preinit', this causes 2677 the compiler to keep track of the total number of virtual calls it 2678 encounters and the number of verifications it inserts. It also 2679 counts the number of calls to certain run-time library functions 2680 that it inserts and logs this information for each compilation 2681 unit. The compiler writes this information to a file named 2682 `vtv_count_data.log' in the directory named by the environment 2683 variable `VTV_LOGS_DIR' if that is defined or the current working 2684 directory otherwise. It also counts the size of the vtable 2685 pointer sets for each class, and writes this information to 2686 `vtv_class_set_sizes.log' in the same directory. 2687 2688 Note: This feature _appends_ data to the log files. To get fresh 2689 log files, be sure to delete any existing ones. 2690 2691`-fno-weak' 2692 Do not use weak symbol support, even if it is provided by the 2693 linker. By default, G++ uses weak symbols if they are available. 2694 This option exists only for testing, and should not be used by 2695 end-users; it results in inferior code and has no benefits. This 2696 option may be removed in a future release of G++. 2697 2698`-nostdinc++' 2699 Do not search for header files in the standard directories 2700 specific to C++, but do still search the other standard 2701 directories. (This option is used when building the C++ library.) 2702 2703 In addition, these optimization, warning, and code generation options 2704have meanings only for C++ programs: 2705 2706`-Wabi (C, Objective-C, C++ and Objective-C++ only)' 2707 When an explicit `-fabi-version=N' option is used, causes G++ to 2708 warn when it generates code that is probably not compatible with 2709 the vendor-neutral C++ ABI. Since G++ now defaults to 2710 `-fabi-version=0', `-Wabi' has no effect unless either an older 2711 ABI version is selected (with `-fabi-version=N') or an older 2712 compatibility version is selected (with `-Wabi=N' or 2713 `-fabi-compat-version=N'). 2714 2715 Although an effort has been made to warn about all such cases, 2716 there are probably some cases that are not warned about, even 2717 though G++ is generating incompatible code. There may also be 2718 cases where warnings are emitted even though the code that is 2719 generated is compatible. 2720 2721 You should rewrite your code to avoid these warnings if you are 2722 concerned about the fact that code generated by G++ may not be 2723 binary compatible with code generated by other compilers. 2724 2725 `-Wabi' can also be used with an explicit version number to warn 2726 about compatibility with a particular `-fabi-version' level, e.g. 2727 `-Wabi=2' to warn about changes relative to `-fabi-version=2'. 2728 Specifying a version number also sets `-fabi-compat-version=N'. 2729 2730 The known incompatibilities in `-fabi-version=2' (which was the 2731 default from GCC 3.4 to 4.9) include: 2732 2733 * A template with a non-type template parameter of reference 2734 type was mangled incorrectly: 2735 extern int N; 2736 template <int &> struct S {}; 2737 void n (S<N>) {2} 2738 2739 This was fixed in `-fabi-version=3'. 2740 2741 * SIMD vector types declared using `__attribute 2742 ((vector_size))' were mangled in a non-standard way that does 2743 not allow for overloading of functions taking vectors of 2744 different sizes. 2745 2746 The mangling was changed in `-fabi-version=4'. 2747 2748 * `__attribute ((const))' and `noreturn' were mangled as type 2749 qualifiers, and `decltype' of a plain declaration was folded 2750 away. 2751 2752 These mangling issues were fixed in `-fabi-version=5'. 2753 2754 * Scoped enumerators passed as arguments to a variadic function 2755 are promoted like unscoped enumerators, causing `va_arg' to 2756 complain. On most targets this does not actually affect the 2757 parameter passing ABI, as there is no way to pass an argument 2758 smaller than `int'. 2759 2760 Also, the ABI changed the mangling of template argument packs, 2761 `const_cast', `static_cast', prefix increment/decrement, and 2762 a class scope function used as a template argument. 2763 2764 These issues were corrected in `-fabi-version=6'. 2765 2766 * Lambdas in default argument scope were mangled incorrectly, 2767 and the ABI changed the mangling of `nullptr_t'. 2768 2769 These issues were corrected in `-fabi-version=7'. 2770 2771 * When mangling a function type with function-cv-qualifiers, the 2772 un-qualified function type was incorrectly treated as a 2773 substitution candidate. 2774 2775 This was fixed in `-fabi-version=8', the default for GCC 5.1. 2776 2777 * `decltype(nullptr)' incorrectly had an alignment of 1, 2778 leading to unaligned accesses. Note that this did not affect 2779 the ABI of a function with a `nullptr_t' parameter, as 2780 parameters have a minimum alignment. 2781 2782 This was fixed in `-fabi-version=9', the default for GCC 5.2. 2783 2784 It also warns about psABI-related changes. The known psABI 2785 changes at this point include: 2786 2787 * For SysV/x86-64, unions with `long double' members are passed 2788 in memory as specified in psABI. For example: 2789 2790 union U { 2791 long double ld; 2792 int i; 2793 }; 2794 2795 `union U' is always passed in memory. 2796 2797 2798`-Wabi-tag (C++ and Objective-C++ only)' 2799 Warn when a type with an ABI tag is used in a context that does not 2800 have that ABI tag. See *Note C++ Attributes:: for more information 2801 about ABI tags. 2802 2803`-Wctor-dtor-privacy (C++ and Objective-C++ only)' 2804 Warn when a class seems unusable because all the constructors or 2805 destructors in that class are private, and it has neither friends 2806 nor public static member functions. Also warn if there are no 2807 non-private methods, and there's at least one private member 2808 function that isn't a constructor or destructor. 2809 2810`-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)' 2811 Warn when `delete' is used to destroy an instance of a class that 2812 has virtual functions and non-virtual destructor. It is unsafe to 2813 delete an instance of a derived class through a pointer to a base 2814 class if the base class does not have a virtual destructor. This 2815 warning is enabled by `-Wall'. 2816 2817`-Wliteral-suffix (C++ and Objective-C++ only)' 2818 Warn when a string or character literal is followed by a ud-suffix 2819 which does not begin with an underscore. As a conforming 2820 extension, GCC treats such suffixes as separate preprocessing 2821 tokens in order to maintain backwards compatibility with code that 2822 uses formatting macros from `<inttypes.h>'. For example: 2823 2824 #define __STDC_FORMAT_MACROS 2825 #include <inttypes.h> 2826 #include <stdio.h> 2827 2828 int main() { 2829 int64_t i64 = 123; 2830 printf("My int64: %"PRId64"\n", i64); 2831 } 2832 2833 In this case, `PRId64' is treated as a separate preprocessing 2834 token. 2835 2836 This warning is enabled by default. 2837 2838`-Wnarrowing (C++ and Objective-C++ only)' 2839 Warn when a narrowing conversion prohibited by C++11 occurs within 2840 `{ }', e.g. 2841 2842 int i = { 2.2 }; // error: narrowing from double to int 2843 2844 This flag is included in `-Wall' and `-Wc++11-compat'. 2845 2846 With `-std=c++11', `-Wno-narrowing' suppresses the diagnostic 2847 required by the standard. Note that this does not affect the 2848 meaning of well-formed code; narrowing conversions are still 2849 considered ill-formed in SFINAE context. 2850 2851`-Wnoexcept (C++ and Objective-C++ only)' 2852 Warn when a noexcept-expression evaluates to false because of a 2853 call to a function that does not have a non-throwing exception 2854 specification (i.e. `throw()' or `noexcept') but is known by the 2855 compiler to never throw an exception. 2856 2857`-Wnon-virtual-dtor (C++ and Objective-C++ only)' 2858 Warn when a class has virtual functions and an accessible 2859 non-virtual destructor itself or in an accessible polymorphic base 2860 class, in which case it is possible but unsafe to delete an 2861 instance of a derived class through a pointer to the class itself 2862 or base class. This warning is automatically enabled if 2863 `-Weffc++' is specified. 2864 2865`-Wreorder (C++ and Objective-C++ only)' 2866 Warn when the order of member initializers given in the code does 2867 not match the order in which they must be executed. For instance: 2868 2869 struct A { 2870 int i; 2871 int j; 2872 A(): j (0), i (1) { } 2873 }; 2874 2875 The compiler rearranges the member initializers for `i' and `j' to 2876 match the declaration order of the members, emitting a warning to 2877 that effect. This warning is enabled by `-Wall'. 2878 2879`-fext-numeric-literals (C++ and Objective-C++ only)' 2880 Accept imaginary, fixed-point, or machine-defined literal number 2881 suffixes as GNU extensions. When this option is turned off these 2882 suffixes are treated as C++11 user-defined literal numeric 2883 suffixes. This is on by default for all pre-C++11 dialects and 2884 all GNU dialects: `-std=c++98', `-std=gnu++98', `-std=gnu++11', 2885 `-std=gnu++14'. This option is off by default for ISO C++11 2886 onwards (`-std=c++11', ...). 2887 2888 The following `-W...' options are not affected by `-Wall'. 2889 2890`-Weffc++ (C++ and Objective-C++ only)' 2891 Warn about violations of the following style guidelines from Scott 2892 Meyers' `Effective C++' series of books: 2893 2894 * Define a copy constructor and an assignment operator for 2895 classes with dynamically-allocated memory. 2896 2897 * Prefer initialization to assignment in constructors. 2898 2899 * Have `operator=' return a reference to `*this'. 2900 2901 * Don't try to return a reference when you must return an 2902 object. 2903 2904 * Distinguish between prefix and postfix forms of increment and 2905 decrement operators. 2906 2907 * Never overload `&&', `||', or `,'. 2908 2909 2910 This option also enables `-Wnon-virtual-dtor', which is also one 2911 of the effective C++ recommendations. However, the check is 2912 extended to warn about the lack of virtual destructor in accessible 2913 non-polymorphic bases classes too. 2914 2915 When selecting this option, be aware that the standard library 2916 headers do not obey all of these guidelines; use `grep -v' to 2917 filter out those warnings. 2918 2919`-Wstrict-null-sentinel (C++ and Objective-C++ only)' 2920 Warn about the use of an uncasted `NULL' as sentinel. When 2921 compiling only with GCC this is a valid sentinel, as `NULL' is 2922 defined to `__null'. Although it is a null pointer constant 2923 rather than a null pointer, it is guaranteed to be of the same 2924 size as a pointer. But this use is not portable across different 2925 compilers. 2926 2927`-Wno-non-template-friend (C++ and Objective-C++ only)' 2928 Disable warnings when non-templatized friend functions are declared 2929 within a template. Since the advent of explicit template 2930 specification support in G++, if the name of the friend is an 2931 unqualified-id (i.e., `friend foo(int)'), the C++ language 2932 specification demands that the friend declare or define an 2933 ordinary, nontemplate function. (Section 14.5.3). Before G++ 2934 implemented explicit specification, unqualified-ids could be 2935 interpreted as a particular specialization of a templatized 2936 function. Because this non-conforming behavior is no longer the 2937 default behavior for G++, `-Wnon-template-friend' allows the 2938 compiler to check existing code for potential trouble spots and is 2939 on by default. This new compiler behavior can be turned off with 2940 `-Wno-non-template-friend', which keeps the conformant compiler 2941 code but disables the helpful warning. 2942 2943`-Wold-style-cast (C++ and Objective-C++ only)' 2944 Warn if an old-style (C-style) cast to a non-void type is used 2945 within a C++ program. The new-style casts (`dynamic_cast', 2946 `static_cast', `reinterpret_cast', and `const_cast') are less 2947 vulnerable to unintended effects and much easier to search for. 2948 2949`-Woverloaded-virtual (C++ and Objective-C++ only)' 2950 Warn when a function declaration hides virtual functions from a 2951 base class. For example, in: 2952 2953 struct A { 2954 virtual void f(); 2955 }; 2956 2957 struct B: public A { 2958 void f(int); 2959 }; 2960 2961 the `A' class version of `f' is hidden in `B', and code like: 2962 2963 B* b; 2964 b->f(); 2965 2966 fails to compile. 2967 2968`-Wno-pmf-conversions (C++ and Objective-C++ only)' 2969 Disable the diagnostic for converting a bound pointer to member 2970 function to a plain pointer. 2971 2972`-Wsign-promo (C++ and Objective-C++ only)' 2973 Warn when overload resolution chooses a promotion from unsigned or 2974 enumerated type to a signed type, over a conversion to an unsigned 2975 type of the same size. Previous versions of G++ tried to preserve 2976 unsignedness, but the standard mandates the current behavior. 2977 2978 2979File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2980 29813.6 Options Controlling Objective-C and Objective-C++ Dialects 2982============================================================== 2983 2984(NOTE: This manual does not describe the Objective-C and Objective-C++ 2985languages themselves. *Note Language Standards Supported by GCC: 2986Standards, for references.) 2987 2988 This section describes the command-line options that are only 2989meaningful for Objective-C and Objective-C++ programs. You can also 2990use most of the language-independent GNU compiler options. For 2991example, you might compile a file `some_class.m' like this: 2992 2993 gcc -g -fgnu-runtime -O -c some_class.m 2994 2995In this example, `-fgnu-runtime' is an option meant only for 2996Objective-C and Objective-C++ programs; you can use the other options 2997with any language supported by GCC. 2998 2999 Note that since Objective-C is an extension of the C language, 3000Objective-C compilations may also use options specific to the C 3001front-end (e.g., `-Wtraditional'). Similarly, Objective-C++ 3002compilations may use C++-specific options (e.g., `-Wabi'). 3003 3004 Here is a list of options that are _only_ for compiling Objective-C 3005and Objective-C++ programs: 3006 3007`-fconstant-string-class=CLASS-NAME' 3008 Use CLASS-NAME as the name of the class to instantiate for each 3009 literal string specified with the syntax `@"..."'. The default 3010 class name is `NXConstantString' if the GNU runtime is being used, 3011 and `NSConstantString' if the NeXT runtime is being used (see 3012 below). The `-fconstant-cfstrings' option, if also present, 3013 overrides the `-fconstant-string-class' setting and cause `@"..."' 3014 literals to be laid out as constant CoreFoundation strings. 3015 3016`-fgnu-runtime' 3017 Generate object code compatible with the standard GNU Objective-C 3018 runtime. This is the default for most types of systems. 3019 3020`-fnext-runtime' 3021 Generate output compatible with the NeXT runtime. This is the 3022 default for NeXT-based systems, including Darwin and Mac OS X. 3023 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this 3024 option is used. 3025 3026`-fno-nil-receivers' 3027 Assume that all Objective-C message dispatches (`[receiver 3028 message:arg]') in this translation unit ensure that the receiver is 3029 not `nil'. This allows for more efficient entry points in the 3030 runtime to be used. This option is only available in conjunction 3031 with the NeXT runtime and ABI version 0 or 1. 3032 3033`-fobjc-abi-version=N' 3034 Use version N of the Objective-C ABI for the selected runtime. 3035 This option is currently supported only for the NeXT runtime. In 3036 that case, Version 0 is the traditional (32-bit) ABI without 3037 support for properties and other Objective-C 2.0 additions. 3038 Version 1 is the traditional (32-bit) ABI with support for 3039 properties and other Objective-C 2.0 additions. Version 2 is the 3040 modern (64-bit) ABI. If nothing is specified, the default is 3041 Version 0 on 32-bit target machines, and Version 2 on 64-bit 3042 target machines. 3043 3044`-fobjc-call-cxx-cdtors' 3045 For each Objective-C class, check if any of its instance variables 3046 is a C++ object with a non-trivial default constructor. If so, 3047 synthesize a special `- (id) .cxx_construct' instance method which 3048 runs non-trivial default constructors on any such instance 3049 variables, in order, and then return `self'. Similarly, check if 3050 any instance variable is a C++ object with a non-trivial 3051 destructor, and if so, synthesize a special `- (void) 3052 .cxx_destruct' method which runs all such default destructors, in 3053 reverse order. 3054 3055 The `- (id) .cxx_construct' and `- (void) .cxx_destruct' methods 3056 thusly generated only operate on instance variables declared in 3057 the current Objective-C class, and not those inherited from 3058 superclasses. It is the responsibility of the Objective-C runtime 3059 to invoke all such methods in an object's inheritance hierarchy. 3060 The `- (id) .cxx_construct' methods are invoked by the runtime 3061 immediately after a new object instance is allocated; the `- 3062 (void) .cxx_destruct' methods are invoked immediately before the 3063 runtime deallocates an object instance. 3064 3065 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 3066 later has support for invoking the `- (id) .cxx_construct' and `- 3067 (void) .cxx_destruct' methods. 3068 3069`-fobjc-direct-dispatch' 3070 Allow fast jumps to the message dispatcher. On Darwin this is 3071 accomplished via the comm page. 3072 3073`-fobjc-exceptions' 3074 Enable syntactic support for structured exception handling in 3075 Objective-C, similar to what is offered by C++ and Java. This 3076 option is required to use the Objective-C keywords `@try', 3077 `@throw', `@catch', `@finally' and `@synchronized'. This option 3078 is available with both the GNU runtime and the NeXT runtime (but 3079 not available in conjunction with the NeXT runtime on Mac OS X 3080 10.2 and earlier). 3081 3082`-fobjc-gc' 3083 Enable garbage collection (GC) in Objective-C and Objective-C++ 3084 programs. This option is only available with the NeXT runtime; the 3085 GNU runtime has a different garbage collection implementation that 3086 does not require special compiler flags. 3087 3088`-fobjc-nilcheck' 3089 For the NeXT runtime with version 2 of the ABI, check for a nil 3090 receiver in method invocations before doing the actual method call. 3091 This is the default and can be disabled using 3092 `-fno-objc-nilcheck'. Class methods and super calls are never 3093 checked for nil in this way no matter what this flag is set to. 3094 Currently this flag does nothing when the GNU runtime, or an older 3095 version of the NeXT runtime ABI, is used. 3096 3097`-fobjc-std=objc1' 3098 Conform to the language syntax of Objective-C 1.0, the language 3099 recognized by GCC 4.0. This only affects the Objective-C 3100 additions to the C/C++ language; it does not affect conformance to 3101 C/C++ standards, which is controlled by the separate C/C++ dialect 3102 option flags. When this option is used with the Objective-C or 3103 Objective-C++ compiler, any Objective-C syntax that is not 3104 recognized by GCC 4.0 is rejected. This is useful if you need to 3105 make sure that your Objective-C code can be compiled with older 3106 versions of GCC. 3107 3108`-freplace-objc-classes' 3109 Emit a special marker instructing `ld(1)' not to statically link in 3110 the resulting object file, and allow `dyld(1)' to load it in at 3111 run time instead. This is used in conjunction with the 3112 Fix-and-Continue debugging mode, where the object file in question 3113 may be recompiled and dynamically reloaded in the course of 3114 program execution, without the need to restart the program itself. 3115 Currently, Fix-and-Continue functionality is only available in 3116 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 3117 3118`-fzero-link' 3119 When compiling for the NeXT runtime, the compiler ordinarily 3120 replaces calls to `objc_getClass("...")' (when the name of the 3121 class is known at compile time) with static class references that 3122 get initialized at load time, which improves run-time performance. 3123 Specifying the `-fzero-link' flag suppresses this behavior and 3124 causes calls to `objc_getClass("...")' to be retained. This is 3125 useful in Zero-Link debugging mode, since it allows for individual 3126 class implementations to be modified during program execution. 3127 The GNU runtime currently always retains calls to 3128 `objc_get_class("...")' regardless of command-line options. 3129 3130`-fno-local-ivars' 3131 By default instance variables in Objective-C can be accessed as if 3132 they were local variables from within the methods of the class 3133 they're declared in. This can lead to shadowing between instance 3134 variables and other variables declared either locally inside a 3135 class method or globally with the same name. Specifying the 3136 `-fno-local-ivars' flag disables this behavior thus avoiding 3137 variable shadowing issues. 3138 3139`-fivar-visibility=[public|protected|private|package]' 3140 Set the default instance variable visibility to the specified 3141 option so that instance variables declared outside the scope of 3142 any access modifier directives default to the specified visibility. 3143 3144`-gen-decls' 3145 Dump interface declarations for all classes seen in the source 3146 file to a file named `SOURCENAME.decl'. 3147 3148`-Wassign-intercept (Objective-C and Objective-C++ only)' 3149 Warn whenever an Objective-C assignment is being intercepted by the 3150 garbage collector. 3151 3152`-Wno-protocol (Objective-C and Objective-C++ only)' 3153 If a class is declared to implement a protocol, a warning is 3154 issued for every method in the protocol that is not implemented by 3155 the class. The default behavior is to issue a warning for every 3156 method not explicitly implemented in the class, even if a method 3157 implementation is inherited from the superclass. If you use the 3158 `-Wno-protocol' option, then methods inherited from the superclass 3159 are considered to be implemented, and no warning is issued for 3160 them. 3161 3162`-Wselector (Objective-C and Objective-C++ only)' 3163 Warn if multiple methods of different types for the same selector 3164 are found during compilation. The check is performed on the list 3165 of methods in the final stage of compilation. Additionally, a 3166 check is performed for each selector appearing in a 3167 `@selector(...)' expression, and a corresponding method for that 3168 selector has been found during compilation. Because these checks 3169 scan the method table only at the end of compilation, these 3170 warnings are not produced if the final stage of compilation is not 3171 reached, for example because an error is found during compilation, 3172 or because the `-fsyntax-only' option is being used. 3173 3174`-Wstrict-selector-match (Objective-C and Objective-C++ only)' 3175 Warn if multiple methods with differing argument and/or return 3176 types are found for a given selector when attempting to send a 3177 message using this selector to a receiver of type `id' or `Class'. 3178 When this flag is off (which is the default behavior), the 3179 compiler omits such warnings if any differences found are confined 3180 to types that share the same size and alignment. 3181 3182`-Wundeclared-selector (Objective-C and Objective-C++ only)' 3183 Warn if a `@selector(...)' expression referring to an undeclared 3184 selector is found. A selector is considered undeclared if no 3185 method with that name has been declared before the 3186 `@selector(...)' expression, either explicitly in an `@interface' 3187 or `@protocol' declaration, or implicitly in an `@implementation' 3188 section. This option always performs its checks as soon as a 3189 `@selector(...)' expression is found, while `-Wselector' only 3190 performs its checks in the final stage of compilation. This also 3191 enforces the coding style convention that methods and selectors 3192 must be declared before being used. 3193 3194`-print-objc-runtime-info' 3195 Generate C header describing the largest structure that is passed 3196 by value, if any. 3197 3198 3199 3200File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 3201 32023.7 Options to Control Diagnostic Messages Formatting 3203===================================================== 3204 3205Traditionally, diagnostic messages have been formatted irrespective of 3206the output device's aspect (e.g. its width, ...). You can use the 3207options described below to control the formatting algorithm for 3208diagnostic messages, e.g. how many characters per line, how often 3209source location information should be reported. Note that some 3210language front ends may not honor these options. 3211 3212`-fmessage-length=N' 3213 Try to format error messages so that they fit on lines of about N 3214 characters. If N is zero, then no line-wrapping is done; each 3215 error message appears on a single line. This is the default for 3216 all front ends. 3217 3218`-fdiagnostics-show-location=once' 3219 Only meaningful in line-wrapping mode. Instructs the diagnostic 3220 messages reporter to emit source location information _once_; that 3221 is, in case the message is too long to fit on a single physical 3222 line and has to be wrapped, the source location won't be emitted 3223 (as prefix) again, over and over, in subsequent continuation 3224 lines. This is the default behavior. 3225 3226`-fdiagnostics-show-location=every-line' 3227 Only meaningful in line-wrapping mode. Instructs the diagnostic 3228 messages reporter to emit the same source location information (as 3229 prefix) for physical lines that result from the process of breaking 3230 a message which is too long to fit on a single line. 3231 3232`-fdiagnostics-color[=WHEN]' 3233`-fno-diagnostics-color' 3234 Use color in diagnostics. WHEN is `never', `always', or `auto'. 3235 The default depends on how the compiler has been configured, it 3236 can be any of the above WHEN options or also `never' if 3237 `GCC_COLORS' environment variable isn't present in the environment, 3238 and `auto' otherwise. `auto' means to use color only when the 3239 standard error is a terminal. The forms `-fdiagnostics-color' and 3240 `-fno-diagnostics-color' are aliases for 3241 `-fdiagnostics-color=always' and `-fdiagnostics-color=never', 3242 respectively. 3243 3244 The colors are defined by the environment variable `GCC_COLORS'. 3245 Its value is a colon-separated list of capabilities and Select 3246 Graphic Rendition (SGR) substrings. SGR commands are interpreted 3247 by the terminal or terminal emulator. (See the section in the 3248 documentation of your text terminal for permitted values and their 3249 meanings as character attributes.) These substring values are 3250 integers in decimal representation and can be concatenated with 3251 semicolons. Common values to concatenate include `1' for bold, 3252 `4' for underline, `5' for blink, `7' for inverse, `39' for 3253 default foreground color, `30' to `37' for foreground colors, `90' 3254 to `97' for 16-color mode foreground colors, `38;5;0' to `38;5;255' 3255 for 88-color and 256-color modes foreground colors, `49' for 3256 default background color, `40' to `47' for background colors, 3257 `100' to `107' for 16-color mode background colors, and `48;5;0' 3258 to `48;5;255' for 88-color and 256-color modes background colors. 3259 3260 The default `GCC_COLORS' is 3261 error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01 3262 where `01;31' is bold red, `01;35' is bold magenta, `01;36' is 3263 bold cyan, `01;32' is bold green and `01' is bold. Setting 3264 `GCC_COLORS' to the empty string disables colors. Supported 3265 capabilities are as follows. 3266 3267 `error=' 3268 SGR substring for error: markers. 3269 3270 `warning=' 3271 SGR substring for warning: markers. 3272 3273 `note=' 3274 SGR substring for note: markers. 3275 3276 `caret=' 3277 SGR substring for caret line. 3278 3279 `locus=' 3280 SGR substring for location information, `file:line' or 3281 `file:line:column' etc. 3282 3283 `quote=' 3284 SGR substring for information printed within quotes. 3285 3286`-fno-diagnostics-show-option' 3287 By default, each diagnostic emitted includes text indicating the 3288 command-line option that directly controls the diagnostic (if such 3289 an option is known to the diagnostic machinery). Specifying the 3290 `-fno-diagnostics-show-option' flag suppresses that behavior. 3291 3292`-fno-diagnostics-show-caret' 3293 By default, each diagnostic emitted includes the original source 3294 line and a caret '^' indicating the column. This option 3295 suppresses this information. The source line is truncated to N 3296 characters, if the `-fmessage-length=n' option is given. When the 3297 output is done to the terminal, the width is limited to the width 3298 given by the `COLUMNS' environment variable or, if not set, to the 3299 terminal width. 3300 3301 3302 3303File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 3304 33053.8 Options to Request or Suppress Warnings 3306=========================================== 3307 3308Warnings are diagnostic messages that report constructions that are not 3309inherently erroneous but that are risky or suggest there may have been 3310an error. 3311 3312 The following language-independent options do not enable specific 3313warnings but control the kinds of diagnostics produced by GCC. 3314 3315`-fsyntax-only' 3316 Check the code for syntax errors, but don't do anything beyond 3317 that. 3318 3319`-fmax-errors=N' 3320 Limits the maximum number of error messages to N, at which point 3321 GCC bails out rather than attempting to continue processing the 3322 source code. If N is 0 (the default), there is no limit on the 3323 number of error messages produced. If `-Wfatal-errors' is also 3324 specified, then `-Wfatal-errors' takes precedence over this option. 3325 3326`-w' 3327 Inhibit all warning messages. 3328 3329`-Werror' 3330 Make all warnings into errors. 3331 3332`-Werror=' 3333 Make the specified warning into an error. The specifier for a 3334 warning is appended; for example `-Werror=switch' turns the 3335 warnings controlled by `-Wswitch' into errors. This switch takes a 3336 negative form, to be used to negate `-Werror' for specific 3337 warnings; for example `-Wno-error=switch' makes `-Wswitch' 3338 warnings not be errors, even when `-Werror' is in effect. 3339 3340 The warning message for each controllable warning includes the 3341 option that controls the warning. That option can then be used 3342 with `-Werror=' and `-Wno-error=' as described above. (Printing 3343 of the option in the warning message can be disabled using the 3344 `-fno-diagnostics-show-option' flag.) 3345 3346 Note that specifying `-Werror='FOO automatically implies `-W'FOO. 3347 However, `-Wno-error='FOO does not imply anything. 3348 3349`-Wfatal-errors' 3350 This option causes the compiler to abort compilation on the first 3351 error occurred rather than trying to keep going and printing 3352 further error messages. 3353 3354 3355 You can request many specific warnings with options beginning with 3356`-W', for example `-Wimplicit' to request warnings on implicit 3357declarations. Each of these specific warning options also has a 3358negative form beginning `-Wno-' to turn off warnings; for example, 3359`-Wno-implicit'. This manual lists only one of the two forms, 3360whichever is not the default. For further language-specific options 3361also refer to *Note C++ Dialect Options:: and *Note Objective-C and 3362Objective-C++ Dialect Options::. 3363 3364 Some options, such as `-Wall' and `-Wextra', turn on other options, 3365such as `-Wunused', which may turn on further options, such as 3366`-Wunused-value'. The combined effect of positive and negative forms is 3367that more specific options have priority over less specific ones, 3368independently of their position in the command-line. For options of the 3369same specificity, the last one takes effect. Options enabled or 3370disabled via pragmas (*note Diagnostic Pragmas::) take effect as if 3371they appeared at the end of the command-line. 3372 3373 When an unrecognized warning option is requested (e.g., 3374`-Wunknown-warning'), GCC emits a diagnostic stating that the option is 3375not recognized. However, if the `-Wno-' form is used, the behavior is 3376slightly different: no diagnostic is produced for 3377`-Wno-unknown-warning' unless other diagnostics are being produced. 3378This allows the use of new `-Wno-' options with old compilers, but if 3379something goes wrong, the compiler warns that an unrecognized option is 3380present. 3381 3382`-Wpedantic' 3383`-pedantic' 3384 Issue all the warnings demanded by strict ISO C and ISO C++; 3385 reject all programs that use forbidden extensions, and some other 3386 programs that do not follow ISO C and ISO C++. For ISO C, follows 3387 the version of the ISO C standard specified by any `-std' option 3388 used. 3389 3390 Valid ISO C and ISO C++ programs should compile properly with or 3391 without this option (though a rare few require `-ansi' or a `-std' 3392 option specifying the required version of ISO C). However, 3393 without this option, certain GNU extensions and traditional C and 3394 C++ features are supported as well. With this option, they are 3395 rejected. 3396 3397 `-Wpedantic' does not cause warning messages for use of the 3398 alternate keywords whose names begin and end with `__'. Pedantic 3399 warnings are also disabled in the expression that follows 3400 `__extension__'. However, only system header files should use 3401 these escape routes; application programs should avoid them. 3402 *Note Alternate Keywords::. 3403 3404 Some users try to use `-Wpedantic' to check programs for strict ISO 3405 C conformance. They soon find that it does not do quite what they 3406 want: it finds some non-ISO practices, but not all--only those for 3407 which ISO C _requires_ a diagnostic, and some others for which 3408 diagnostics have been added. 3409 3410 A feature to report any failure to conform to ISO C might be 3411 useful in some instances, but would require considerable 3412 additional work and would be quite different from `-Wpedantic'. 3413 We don't have plans to support such a feature in the near future. 3414 3415 Where the standard specified with `-std' represents a GNU extended 3416 dialect of C, such as `gnu90' or `gnu99', there is a corresponding 3417 "base standard", the version of ISO C on which the GNU extended 3418 dialect is based. Warnings from `-Wpedantic' are given where they 3419 are required by the base standard. (It does not make sense for 3420 such warnings to be given only for features not in the specified 3421 GNU C dialect, since by definition the GNU dialects of C include 3422 all features the compiler supports with the given option, and 3423 there would be nothing to warn about.) 3424 3425`-pedantic-errors' 3426 Give an error whenever the "base standard" (see `-Wpedantic') 3427 requires a diagnostic, in some cases where there is undefined 3428 behavior at compile-time and in some other cases that do not 3429 prevent compilation of programs that are valid according to the 3430 standard. This is not equivalent to `-Werror=pedantic', since 3431 there are errors enabled by this option and not enabled by the 3432 latter and vice versa. 3433 3434`-Wall' 3435 This enables all the warnings about constructions that some users 3436 consider questionable, and that are easy to avoid (or modify to 3437 prevent the warning), even in conjunction with macros. This also 3438 enables some language-specific warnings described in *Note C++ 3439 Dialect Options:: and *Note Objective-C and Objective-C++ Dialect 3440 Options::. 3441 3442 `-Wall' turns on the following warning flags: 3443 3444 -Waddress 3445 -Warray-bounds=1 (only with `-O2') 3446 -Wc++11-compat -Wc++14-compat 3447 -Wchar-subscripts 3448 -Wenum-compare (in C/ObjC; this is on by default in C++) 3449 -Wimplicit-int (C and Objective-C only) 3450 -Wimplicit-function-declaration (C and Objective-C only) 3451 -Wcomment 3452 -Wformat 3453 -Wmain (only for C/ObjC and unless `-ffreestanding') 3454 -Wmaybe-uninitialized 3455 -Wmissing-braces (only for C/ObjC) 3456 -Wnonnull 3457 -Wopenmp-simd 3458 -Wparentheses 3459 -Wpointer-sign 3460 -Wreorder 3461 -Wreturn-type 3462 -Wsequence-point 3463 -Wsign-compare (only in C++) 3464 -Wstrict-aliasing 3465 -Wstrict-overflow=1 3466 -Wswitch 3467 -Wtrigraphs 3468 -Wuninitialized 3469 -Wunknown-pragmas 3470 -Wunused-function 3471 -Wunused-label 3472 -Wunused-value 3473 -Wunused-variable 3474 -Wvolatile-register-var 3475 3476 Note that some warning flags are not implied by `-Wall'. Some of 3477 them warn about constructions that users generally do not consider 3478 questionable, but which occasionally you might wish to check for; 3479 others warn about constructions that are necessary or hard to 3480 avoid in some cases, and there is no simple way to modify the code 3481 to suppress the warning. Some of them are enabled by `-Wextra' but 3482 many of them must be enabled individually. 3483 3484`-Wextra' 3485 This enables some extra warning flags that are not enabled by 3486 `-Wall'. (This option used to be called `-W'. The older name is 3487 still supported, but the newer name is more descriptive.) 3488 3489 -Wclobbered 3490 -Wempty-body 3491 -Wignored-qualifiers 3492 -Wmissing-field-initializers 3493 -Wmissing-parameter-type (C only) 3494 -Wold-style-declaration (C only) 3495 -Woverride-init 3496 -Wsign-compare 3497 -Wtype-limits 3498 -Wuninitialized 3499 -Wunused-parameter (only with `-Wunused' or `-Wall') 3500 -Wunused-but-set-parameter (only with `-Wunused' or `-Wall') 3501 3502 The option `-Wextra' also prints warning messages for the 3503 following cases: 3504 3505 * A pointer is compared against integer zero with `<', `<=', 3506 `>', or `>='. 3507 3508 * (C++ only) An enumerator and a non-enumerator both appear in a 3509 conditional expression. 3510 3511 * (C++ only) Ambiguous virtual bases. 3512 3513 * (C++ only) Subscripting an array that has been declared 3514 `register'. 3515 3516 * (C++ only) Taking the address of a variable that has been 3517 declared `register'. 3518 3519 * (C++ only) A base class is not initialized in a derived 3520 class's copy constructor. 3521 3522 3523`-Wchar-subscripts' 3524 Warn if an array subscript has type `char'. This is a common cause 3525 of error, as programmers often forget that this type is signed on 3526 some machines. This warning is enabled by `-Wall'. 3527 3528`-Wcomment' 3529 Warn whenever a comment-start sequence `/*' appears in a `/*' 3530 comment, or whenever a Backslash-Newline appears in a `//' comment. 3531 This warning is enabled by `-Wall'. 3532 3533`-Wno-coverage-mismatch' 3534 Warn if feedback profiles do not match when using the 3535 `-fprofile-use' option. If a source file is changed between 3536 compiling with `-fprofile-gen' and with `-fprofile-use', the files 3537 with the profile feedback can fail to match the source file and 3538 GCC cannot use the profile feedback information. By default, this 3539 warning is enabled and is treated as an error. 3540 `-Wno-coverage-mismatch' can be used to disable the warning or 3541 `-Wno-error=coverage-mismatch' can be used to disable the error. 3542 Disabling the error for this warning can result in poorly 3543 optimized code and is useful only in the case of very minor 3544 changes such as bug fixes to an existing code-base. Completely 3545 disabling the warning is not recommended. 3546 3547`-Wno-cpp' 3548 (C, Objective-C, C++, Objective-C++ and Fortran only) 3549 3550 Suppress warning messages emitted by `#warning' directives. 3551 3552`-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)' 3553 Give a warning when a value of type `float' is implicitly promoted 3554 to `double'. CPUs with a 32-bit "single-precision" floating-point 3555 unit implement `float' in hardware, but emulate `double' in 3556 software. On such a machine, doing computations using `double' 3557 values is much more expensive because of the overhead required for 3558 software emulation. 3559 3560 It is easy to accidentally do computations with `double' because 3561 floating-point literals are implicitly of type `double'. For 3562 example, in: 3563 float area(float radius) 3564 { 3565 return 3.14159 * radius * radius; 3566 } 3567 the compiler performs the entire computation with `double' 3568 because the floating-point literal is a `double'. 3569 3570`-Wformat' 3571`-Wformat=N' 3572 Check calls to `printf' and `scanf', etc., to make sure that the 3573 arguments supplied have types appropriate to the format string 3574 specified, and that the conversions specified in the format string 3575 make sense. This includes standard functions, and others 3576 specified by format attributes (*note Function Attributes::), in 3577 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 3578 extension, not in the C standard) families (or other 3579 target-specific families). Which functions are checked without 3580 format attributes having been specified depends on the standard 3581 version selected, and such checks of functions without the 3582 attribute specified are disabled by `-ffreestanding' or 3583 `-fno-builtin'. 3584 3585 The formats are checked against the format features supported by 3586 GNU libc version 2.2. These include all ISO C90 and C99 features, 3587 as well as features from the Single Unix Specification and some 3588 BSD and GNU extensions. Other library implementations may not 3589 support all these features; GCC does not support warning about 3590 features that go beyond a particular library's limitations. 3591 However, if `-Wpedantic' is used with `-Wformat', warnings are 3592 given about format features not in the selected standard version 3593 (but not for `strfmon' formats, since those are not in any version 3594 of the C standard). *Note Options Controlling C Dialect: C 3595 Dialect Options. 3596 3597 `-Wformat=1' 3598 `-Wformat' 3599 Option `-Wformat' is equivalent to `-Wformat=1', and 3600 `-Wno-format' is equivalent to `-Wformat=0'. Since 3601 `-Wformat' also checks for null format arguments for several 3602 functions, `-Wformat' also implies `-Wnonnull'. Some aspects 3603 of this level of format checking can be disabled by the 3604 options: `-Wno-format-contains-nul', 3605 `-Wno-format-extra-args', and `-Wno-format-zero-length'. 3606 `-Wformat' is enabled by `-Wall'. 3607 3608 `-Wno-format-contains-nul' 3609 If `-Wformat' is specified, do not warn about format strings 3610 that contain NUL bytes. 3611 3612 `-Wno-format-extra-args' 3613 If `-Wformat' is specified, do not warn about excess 3614 arguments to a `printf' or `scanf' format function. The C 3615 standard specifies that such arguments are ignored. 3616 3617 Where the unused arguments lie between used arguments that are 3618 specified with `$' operand number specifications, normally 3619 warnings are still given, since the implementation could not 3620 know what type to pass to `va_arg' to skip the unused 3621 arguments. However, in the case of `scanf' formats, this 3622 option suppresses the warning if the unused arguments are all 3623 pointers, since the Single Unix Specification says that such 3624 unused arguments are allowed. 3625 3626 `-Wno-format-zero-length' 3627 If `-Wformat' is specified, do not warn about zero-length 3628 formats. The C standard specifies that zero-length formats 3629 are allowed. 3630 3631 `-Wformat=2' 3632 Enable `-Wformat' plus additional format checks. Currently 3633 equivalent to `-Wformat -Wformat-nonliteral -Wformat-security 3634 -Wformat-y2k'. 3635 3636 `-Wformat-nonliteral' 3637 If `-Wformat' is specified, also warn if the format string is 3638 not a string literal and so cannot be checked, unless the 3639 format function takes its format arguments as a `va_list'. 3640 3641 `-Wformat-security' 3642 If `-Wformat' is specified, also warn about uses of format 3643 functions that represent possible security problems. At 3644 present, this warns about calls to `printf' and `scanf' 3645 functions where the format string is not a string literal and 3646 there are no format arguments, as in `printf (foo);'. This 3647 may be a security hole if the format string came from 3648 untrusted input and contains `%n'. (This is currently a 3649 subset of what `-Wformat-nonliteral' warns about, but in 3650 future warnings may be added to `-Wformat-security' that are 3651 not included in `-Wformat-nonliteral'.) 3652 3653 `-Wformat-signedness' 3654 If `-Wformat' is specified, also warn if the format string 3655 requires an unsigned argument and the argument is signed and 3656 vice versa. 3657 3658 `-Wformat-y2k' 3659 If `-Wformat' is specified, also warn about `strftime' 3660 formats that may yield only a two-digit year. 3661 3662`-Wnonnull' 3663 Warn about passing a null pointer for arguments marked as 3664 requiring a non-null value by the `nonnull' function attribute. 3665 3666 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 3667 disabled with the `-Wno-nonnull' option. 3668 3669`-Winit-self (C, C++, Objective-C and Objective-C++ only)' 3670 Warn about uninitialized variables that are initialized with 3671 themselves. Note this option can only be used with the 3672 `-Wuninitialized' option. 3673 3674 For example, GCC warns about `i' being uninitialized in the 3675 following snippet only when `-Winit-self' has been specified: 3676 int f() 3677 { 3678 int i = i; 3679 return i; 3680 } 3681 3682 This warning is enabled by `-Wall' in C++. 3683 3684`-Wimplicit-int (C and Objective-C only)' 3685 Warn when a declaration does not specify a type. This warning is 3686 enabled by `-Wall'. 3687 3688`-Wimplicit-function-declaration (C and Objective-C only)' 3689 Give a warning whenever a function is used before being declared. 3690 In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled 3691 by default and it is made into an error by `-pedantic-errors'. 3692 This warning is also enabled by `-Wall'. 3693 3694`-Wimplicit (C and Objective-C only)' 3695 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 3696 This warning is enabled by `-Wall'. 3697 3698`-Wignored-qualifiers (C and C++ only)' 3699 Warn if the return type of a function has a type qualifier such as 3700 `const'. For ISO C such a type qualifier has no effect, since the 3701 value returned by a function is not an lvalue. For C++, the 3702 warning is only emitted for scalar types or `void'. ISO C 3703 prohibits qualified `void' return types on function definitions, 3704 so such return types always receive a warning even without this 3705 option. 3706 3707 This warning is also enabled by `-Wextra'. 3708 3709`-Wmain' 3710 Warn if the type of `main' is suspicious. `main' should be a 3711 function with external linkage, returning int, taking either zero 3712 arguments, two, or three arguments of appropriate types. This 3713 warning is enabled by default in C++ and is enabled by either 3714 `-Wall' or `-Wpedantic'. 3715 3716`-Wmissing-braces' 3717 Warn if an aggregate or union initializer is not fully bracketed. 3718 In the following example, the initializer for `a' is not fully 3719 bracketed, but that for `b' is fully bracketed. This warning is 3720 enabled by `-Wall' in C. 3721 3722 int a[2][2] = { 0, 1, 2, 3 }; 3723 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 3724 3725 This warning is enabled by `-Wall'. 3726 3727`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 3728 Warn if a user-supplied include directory does not exist. 3729 3730`-Wparentheses' 3731 Warn if parentheses are omitted in certain contexts, such as when 3732 there is an assignment in a context where a truth value is 3733 expected, or when operators are nested whose precedence people 3734 often get confused about. 3735 3736 Also warn if a comparison like `x<=y<=z' appears; this is 3737 equivalent to `(x<=y ? 1 : 0) <= z', which is a different 3738 interpretation from that of ordinary mathematical notation. 3739 3740 Also warn about constructions where there may be confusion to which 3741 `if' statement an `else' branch belongs. Here is an example of 3742 such a case: 3743 3744 { 3745 if (a) 3746 if (b) 3747 foo (); 3748 else 3749 bar (); 3750 } 3751 3752 In C/C++, every `else' branch belongs to the innermost possible 3753 `if' statement, which in this example is `if (b)'. This is often 3754 not what the programmer expected, as illustrated in the above 3755 example by indentation the programmer chose. When there is the 3756 potential for this confusion, GCC issues a warning when this flag 3757 is specified. To eliminate the warning, add explicit braces around 3758 the innermost `if' statement so there is no way the `else' can 3759 belong to the enclosing `if'. The resulting code looks like this: 3760 3761 { 3762 if (a) 3763 { 3764 if (b) 3765 foo (); 3766 else 3767 bar (); 3768 } 3769 } 3770 3771 Also warn for dangerous uses of the GNU extension to `?:' with 3772 omitted middle operand. When the condition in the `?': operator is 3773 a boolean expression, the omitted value is always 1. Often 3774 programmers expect it to be a value computed inside the 3775 conditional expression instead. 3776 3777 This warning is enabled by `-Wall'. 3778 3779`-Wsequence-point' 3780 Warn about code that may have undefined semantics because of 3781 violations of sequence point rules in the C and C++ standards. 3782 3783 The C and C++ standards define the order in which expressions in a 3784 C/C++ program are evaluated in terms of "sequence points", which 3785 represent a partial ordering between the execution of parts of the 3786 program: those executed before the sequence point, and those 3787 executed after it. These occur after the evaluation of a full 3788 expression (one which is not part of a larger expression), after 3789 the evaluation of the first operand of a `&&', `||', `? :' or `,' 3790 (comma) operator, before a function is called (but after the 3791 evaluation of its arguments and the expression denoting the called 3792 function), and in certain other places. Other than as expressed 3793 by the sequence point rules, the order of evaluation of 3794 subexpressions of an expression is not specified. All these rules 3795 describe only a partial order rather than a total order, since, 3796 for example, if two functions are called within one expression 3797 with no sequence point between them, the order in which the 3798 functions are called is not specified. However, the standards 3799 committee have ruled that function calls do not overlap. 3800 3801 It is not specified when between sequence points modifications to 3802 the values of objects take effect. Programs whose behavior 3803 depends on this have undefined behavior; the C and C++ standards 3804 specify that "Between the previous and next sequence point an 3805 object shall have its stored value modified at most once by the 3806 evaluation of an expression. Furthermore, the prior value shall 3807 be read only to determine the value to be stored.". If a program 3808 breaks these rules, the results on any particular implementation 3809 are entirely unpredictable. 3810 3811 Examples of code with undefined behavior are `a = a++;', `a[n] = 3812 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 3813 diagnosed by this option, and it may give an occasional false 3814 positive result, but in general it has been found fairly effective 3815 at detecting this sort of problem in programs. 3816 3817 The standard is worded confusingly, therefore there is some debate 3818 over the precise meaning of the sequence point rules in subtle 3819 cases. Links to discussions of the problem, including proposed 3820 formal definitions, may be found on the GCC readings page, at 3821 `http://gcc.gnu.org/readings.html'. 3822 3823 This warning is enabled by `-Wall' for C and C++. 3824 3825`-Wno-return-local-addr' 3826 Do not warn about returning a pointer (or in C++, a reference) to a 3827 variable that goes out of scope after the function returns. 3828 3829`-Wreturn-type' 3830 Warn whenever a function is defined with a return type that 3831 defaults to `int'. Also warn about any `return' statement with no 3832 return value in a function whose return type is not `void' 3833 (falling off the end of the function body is considered returning 3834 without a value), and about a `return' statement with an 3835 expression in a function whose return type is `void'. 3836 3837 For C++, a function without return type always produces a 3838 diagnostic message, even when `-Wno-return-type' is specified. 3839 The only exceptions are `main' and functions defined in system 3840 headers. 3841 3842 This warning is enabled by `-Wall'. 3843 3844`-Wshift-count-negative' 3845 Warn if shift count is negative. This warning is enabled by 3846 default. 3847 3848`-Wshift-count-overflow' 3849 Warn if shift count >= width of type. This warning is enabled by 3850 default. 3851 3852`-Wswitch' 3853 Warn whenever a `switch' statement has an index of enumerated type 3854 and lacks a `case' for one or more of the named codes of that 3855 enumeration. (The presence of a `default' label prevents this 3856 warning.) `case' labels outside the enumeration range also 3857 provoke warnings when this option is used (even if there is a 3858 `default' label). This warning is enabled by `-Wall'. 3859 3860`-Wswitch-default' 3861 Warn whenever a `switch' statement does not have a `default' case. 3862 3863`-Wswitch-enum' 3864 Warn whenever a `switch' statement has an index of enumerated type 3865 and lacks a `case' for one or more of the named codes of that 3866 enumeration. `case' labels outside the enumeration range also 3867 provoke warnings when this option is used. The only difference 3868 between `-Wswitch' and this option is that this option gives a 3869 warning about an omitted enumeration code even if there is a 3870 `default' label. 3871 3872`-Wswitch-bool' 3873 Warn whenever a `switch' statement has an index of boolean type. 3874 It is possible to suppress this warning by casting the controlling 3875 expression to a type other than `bool'. For example: 3876 switch ((int) (a == 4)) 3877 { 3878 ... 3879 } 3880 This warning is enabled by default for C and C++ programs. 3881 3882`-Wsync-nand (C and C++ only)' 3883 Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch' 3884 built-in functions are used. These functions changed semantics in 3885 GCC 4.4. 3886 3887`-Wtrigraphs' 3888 Warn if any trigraphs are encountered that might change the 3889 meaning of the program (trigraphs within comments are not warned 3890 about). This warning is enabled by `-Wall'. 3891 3892`-Wunused-but-set-parameter' 3893 Warn whenever a function parameter is assigned to, but otherwise 3894 unused (aside from its declaration). 3895 3896 To suppress this warning use the `unused' attribute (*note 3897 Variable Attributes::). 3898 3899 This warning is also enabled by `-Wunused' together with `-Wextra'. 3900 3901`-Wunused-but-set-variable' 3902 Warn whenever a local variable is assigned to, but otherwise unused 3903 (aside from its declaration). This warning is enabled by `-Wall'. 3904 3905 To suppress this warning use the `unused' attribute (*note 3906 Variable Attributes::). 3907 3908 This warning is also enabled by `-Wunused', which is enabled by 3909 `-Wall'. 3910 3911`-Wunused-function' 3912 Warn whenever a static function is declared but not defined or a 3913 non-inline static function is unused. This warning is enabled by 3914 `-Wall'. 3915 3916`-Wunused-label' 3917 Warn whenever a label is declared but not used. This warning is 3918 enabled by `-Wall'. 3919 3920 To suppress this warning use the `unused' attribute (*note 3921 Variable Attributes::). 3922 3923`-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)' 3924 Warn when a typedef locally defined in a function is not used. 3925 This warning is enabled by `-Wall'. 3926 3927`-Wunused-parameter' 3928 Warn whenever a function parameter is unused aside from its 3929 declaration. 3930 3931 To suppress this warning use the `unused' attribute (*note 3932 Variable Attributes::). 3933 3934`-Wno-unused-result' 3935 Do not warn if a caller of a function marked with attribute 3936 `warn_unused_result' (*note Function Attributes::) does not use 3937 its return value. The default is `-Wunused-result'. 3938 3939`-Wunused-variable' 3940 Warn whenever a local variable or non-constant static variable is 3941 unused aside from its declaration. This warning is enabled by 3942 `-Wall'. 3943 3944 To suppress this warning use the `unused' attribute (*note 3945 Variable Attributes::). 3946 3947`-Wunused-value' 3948 Warn whenever a statement computes a result that is explicitly not 3949 used. To suppress this warning cast the unused expression to 3950 `void'. This includes an expression-statement or the left-hand 3951 side of a comma expression that contains no side effects. For 3952 example, an expression such as `x[i,j]' causes a warning, while 3953 `x[(void)i,j]' does not. 3954 3955 This warning is enabled by `-Wall'. 3956 3957`-Wunused' 3958 All the above `-Wunused' options combined. 3959 3960 In order to get a warning about an unused function parameter, you 3961 must either specify `-Wextra -Wunused' (note that `-Wall' implies 3962 `-Wunused'), or separately specify `-Wunused-parameter'. 3963 3964`-Wuninitialized' 3965 Warn if an automatic variable is used without first being 3966 initialized or if a variable may be clobbered by a `setjmp' call. 3967 In C++, warn if a non-static reference or non-static `const' member 3968 appears in a class without constructors. 3969 3970 If you want to warn about code that uses the uninitialized value 3971 of the variable in its own initializer, use the `-Winit-self' 3972 option. 3973 3974 These warnings occur for individual uninitialized or clobbered 3975 elements of structure, union or array variables as well as for 3976 variables that are uninitialized or clobbered as a whole. They do 3977 not occur for variables or elements declared `volatile'. Because 3978 these warnings depend on optimization, the exact variables or 3979 elements for which there are warnings depends on the precise 3980 optimization options and version of GCC used. 3981 3982 Note that there may be no warning about a variable that is used 3983 only to compute a value that itself is never used, because such 3984 computations may be deleted by data flow analysis before the 3985 warnings are printed. 3986 3987`-Wmaybe-uninitialized' 3988 For an automatic variable, if there exists a path from the function 3989 entry to a use of the variable that is initialized, but there exist 3990 some other paths for which the variable is not initialized, the 3991 compiler emits a warning if it cannot prove the uninitialized 3992 paths are not executed at run time. These warnings are made 3993 optional because GCC is not smart enough to see all the reasons 3994 why the code might be correct in spite of appearing to have an 3995 error. Here is one example of how this can happen: 3996 3997 { 3998 int x; 3999 switch (y) 4000 { 4001 case 1: x = 1; 4002 break; 4003 case 2: x = 4; 4004 break; 4005 case 3: x = 5; 4006 } 4007 foo (x); 4008 } 4009 4010 If the value of `y' is always 1, 2 or 3, then `x' is always 4011 initialized, but GCC doesn't know this. To suppress the warning, 4012 you need to provide a default case with assert(0) or similar code. 4013 4014 This option also warns when a non-volatile automatic variable 4015 might be changed by a call to `longjmp'. These warnings as well 4016 are possible only in optimizing compilation. 4017 4018 The compiler sees only the calls to `setjmp'. It cannot know 4019 where `longjmp' will be called; in fact, a signal handler could 4020 call it at any point in the code. As a result, you may get a 4021 warning even when there is in fact no problem because `longjmp' 4022 cannot in fact be called at the place that would cause a problem. 4023 4024 Some spurious warnings can be avoided if you declare all the 4025 functions you use that never return as `noreturn'. *Note Function 4026 Attributes::. 4027 4028 This warning is enabled by `-Wall' or `-Wextra'. 4029 4030`-Wunknown-pragmas' 4031 Warn when a `#pragma' directive is encountered that is not 4032 understood by GCC. If this command-line option is used, warnings 4033 are even issued for unknown pragmas in system header files. This 4034 is not the case if the warnings are only enabled by the `-Wall' 4035 command-line option. 4036 4037`-Wno-pragmas' 4038 Do not warn about misuses of pragmas, such as incorrect parameters, 4039 invalid syntax, or conflicts between pragmas. See also 4040 `-Wunknown-pragmas'. 4041 4042`-Wstrict-aliasing' 4043 This option is only active when `-fstrict-aliasing' is active. It 4044 warns about code that might break the strict aliasing rules that 4045 the compiler is using for optimization. The warning does not 4046 catch all cases, but does attempt to catch the more common 4047 pitfalls. It is included in `-Wall'. It is equivalent to 4048 `-Wstrict-aliasing=3' 4049 4050`-Wstrict-aliasing=n' 4051 This option is only active when `-fstrict-aliasing' is active. It 4052 warns about code that might break the strict aliasing rules that 4053 the compiler is using for optimization. Higher levels correspond 4054 to higher accuracy (fewer false positives). Higher levels also 4055 correspond to more effort, similar to the way `-O' works. 4056 `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=3'. 4057 4058 Level 1: Most aggressive, quick, least accurate. Possibly useful 4059 when higher levels do not warn but `-fstrict-aliasing' still 4060 breaks the code, as it has very few false negatives. However, it 4061 has many false positives. Warns for all pointer conversions 4062 between possibly incompatible types, even if never dereferenced. 4063 Runs in the front end only. 4064 4065 Level 2: Aggressive, quick, not too precise. May still have many 4066 false positives (not as many as level 1 though), and few false 4067 negatives (but possibly more than level 1). Unlike level 1, it 4068 only warns when an address is taken. Warns about incomplete 4069 types. Runs in the front end only. 4070 4071 Level 3 (default for `-Wstrict-aliasing'): Should have very few 4072 false positives and few false negatives. Slightly slower than 4073 levels 1 or 2 when optimization is enabled. Takes care of the 4074 common pun+dereference pattern in the front end: 4075 `*(int*)&some_float'. If optimization is enabled, it also runs in 4076 the back end, where it deals with multiple statement cases using 4077 flow-sensitive points-to information. Only warns when the 4078 converted pointer is dereferenced. Does not warn about incomplete 4079 types. 4080 4081`-Wstrict-overflow' 4082`-Wstrict-overflow=N' 4083 This option is only active when `-fstrict-overflow' is active. It 4084 warns about cases where the compiler optimizes based on the 4085 assumption that signed overflow does not occur. Note that it does 4086 not warn about all cases where the code might overflow: it only 4087 warns about cases where the compiler implements some optimization. 4088 Thus this warning depends on the optimization level. 4089 4090 An optimization that assumes that signed overflow does not occur is 4091 perfectly safe if the values of the variables involved are such 4092 that overflow never does, in fact, occur. Therefore this warning 4093 can easily give a false positive: a warning about code that is not 4094 actually a problem. To help focus on important issues, several 4095 warning levels are defined. No warnings are issued for the use of 4096 undefined signed overflow when estimating how many iterations a 4097 loop requires, in particular when determining whether a loop will 4098 be executed at all. 4099 4100 `-Wstrict-overflow=1' 4101 Warn about cases that are both questionable and easy to 4102 avoid. For example, with `-fstrict-overflow', the compiler 4103 simplifies `x + 1 > x' to `1'. This level of 4104 `-Wstrict-overflow' is enabled by `-Wall'; higher levels are 4105 not, and must be explicitly requested. 4106 4107 `-Wstrict-overflow=2' 4108 Also warn about other cases where a comparison is simplified 4109 to a constant. For example: `abs (x) >= 0'. This can only be 4110 simplified when `-fstrict-overflow' is in effect, because 4111 `abs (INT_MIN)' overflows to `INT_MIN', which is less than 4112 zero. `-Wstrict-overflow' (with no level) is the same as 4113 `-Wstrict-overflow=2'. 4114 4115 `-Wstrict-overflow=3' 4116 Also warn about other cases where a comparison is simplified. 4117 For example: `x + 1 > 1' is simplified to `x > 0'. 4118 4119 `-Wstrict-overflow=4' 4120 Also warn about other simplifications not covered by the 4121 above cases. For example: `(x * 10) / 5' is simplified to `x 4122 * 2'. 4123 4124 `-Wstrict-overflow=5' 4125 Also warn about cases where the compiler reduces the 4126 magnitude of a constant involved in a comparison. For 4127 example: `x + 2 > y' is simplified to `x + 1 >= y'. This is 4128 reported only at the highest warning level because this 4129 simplification applies to many comparisons, so this warning 4130 level gives a very large number of false positives. 4131 4132`-Wsuggest-attribute=[pure|const|noreturn|format]' 4133 Warn for cases where adding an attribute may be beneficial. The 4134 attributes currently supported are listed below. 4135 4136 `-Wsuggest-attribute=pure' 4137 `-Wsuggest-attribute=const' 4138 `-Wsuggest-attribute=noreturn' 4139 Warn about functions that might be candidates for attributes 4140 `pure', `const' or `noreturn'. The compiler only warns for 4141 functions visible in other compilation units or (in the case 4142 of `pure' and `const') if it cannot prove that the function 4143 returns normally. A function returns normally if it doesn't 4144 contain an infinite loop or return abnormally by throwing, 4145 calling `abort' or trapping. This analysis requires option 4146 `-fipa-pure-const', which is enabled by default at `-O' and 4147 higher. Higher optimization levels improve the accuracy of 4148 the analysis. 4149 4150 `-Wsuggest-attribute=format' 4151 `-Wmissing-format-attribute' 4152 Warn about function pointers that might be candidates for 4153 `format' attributes. Note these are only possible 4154 candidates, not absolute ones. GCC guesses that function 4155 pointers with `format' attributes that are used in 4156 assignment, initialization, parameter passing or return 4157 statements should have a corresponding `format' attribute in 4158 the resulting type. I.e. the left-hand side of the 4159 assignment or initialization, the type of the parameter 4160 variable, or the return type of the containing function 4161 respectively should also have a `format' attribute to avoid 4162 the warning. 4163 4164 GCC also warns about function definitions that might be 4165 candidates for `format' attributes. Again, these are only 4166 possible candidates. GCC guesses that `format' attributes 4167 might be appropriate for any function that calls a function 4168 like `vprintf' or `vscanf', but this might not always be the 4169 case, and some functions for which `format' attributes are 4170 appropriate may not be detected. 4171 4172`-Wsuggest-final-types' 4173 Warn about types with virtual methods where code quality would be 4174 improved if the type were declared with the C++11 `final' 4175 specifier, or, if possible, declared in an anonymous namespace. 4176 This allows GCC to more aggressively devirtualize the polymorphic 4177 calls. This warning is more effective with link time optimization, 4178 where the information about the class hierarchy graph is more 4179 complete. 4180 4181`-Wsuggest-final-methods' 4182 Warn about virtual methods where code quality would be improved if 4183 the method were declared with the C++11 `final' specifier, or, if 4184 possible, its type were declared in an anonymous namespace or with 4185 the `final' specifier. This warning is more effective with link 4186 time optimization, where the information about the class hierarchy 4187 graph is more complete. It is recommended to first consider 4188 suggestions of `-Wsuggest-final-types' and then rebuild with new 4189 annotations. 4190 4191`-Wsuggest-override' 4192 Warn about overriding virtual functions that are not marked with 4193 the override keyword. 4194 4195`-Warray-bounds' 4196`-Warray-bounds=N' 4197 This option is only active when `-ftree-vrp' is active (default 4198 for `-O2' and above). It warns about subscripts to arrays that are 4199 always out of bounds. This warning is enabled by `-Wall'. 4200 4201 `-Warray-bounds=1' 4202 This is the warning level of `-Warray-bounds' and is enabled 4203 by `-Wall'; higher levels are not, and must be explicitly 4204 requested. 4205 4206 `-Warray-bounds=2' 4207 This warning level also warns about out of bounds access for 4208 arrays at the end of a struct and for arrays accessed through 4209 pointers. This warning level may give a larger number of 4210 false positives and is deactivated by default. 4211 4212`-Wbool-compare' 4213 Warn about boolean expression compared with an integer value 4214 different from `true'/`false'. For instance, the following 4215 comparison is always false: 4216 int n = 5; 4217 ... 4218 if ((n > 1) == 2) { ... } 4219 This warning is enabled by `-Wall'. 4220 4221`-Wno-discarded-qualifiers (C and Objective-C only)' 4222 Do not warn if type qualifiers on pointers are being discarded. 4223 Typically, the compiler warns if a `const char *' variable is 4224 passed to a function that takes a `char *' parameter. This option 4225 can be used to suppress such a warning. 4226 4227`-Wno-discarded-array-qualifiers (C and Objective-C only)' 4228 Do not warn if type qualifiers on arrays which are pointer targets 4229 are being discarded. Typically, the compiler warns if a `const int 4230 (*)[]' variable is passed to a function that takes a `int (*)[]' 4231 parameter. This option can be used to suppress such a warning. 4232 4233`-Wno-incompatible-pointer-types (C and Objective-C only)' 4234 Do not warn when there is a conversion between pointers that have 4235 incompatible types. This warning is for cases not covered by 4236 `-Wno-pointer-sign', which warns for pointer argument passing or 4237 assignment with different signedness. 4238 4239`-Wno-int-conversion (C and Objective-C only)' 4240 Do not warn about incompatible integer to pointer and pointer to 4241 integer conversions. This warning is about implicit conversions; 4242 for explicit conversions the warnings `-Wno-int-to-pointer-cast' 4243 and `-Wno-pointer-to-int-cast' may be used. 4244 4245`-Wno-div-by-zero' 4246 Do not warn about compile-time integer division by zero. 4247 Floating-point division by zero is not warned about, as it can be 4248 a legitimate way of obtaining infinities and NaNs. 4249 4250`-Wsystem-headers' 4251 Print warning messages for constructs found in system header files. 4252 Warnings from system headers are normally suppressed, on the 4253 assumption that they usually do not indicate real problems and 4254 would only make the compiler output harder to read. Using this 4255 command-line option tells GCC to emit warnings from system headers 4256 as if they occurred in user code. However, note that using 4257 `-Wall' in conjunction with this option does _not_ warn about 4258 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 4259 must also be used. 4260 4261`-Wtrampolines' 4262 Warn about trampolines generated for pointers to nested functions. 4263 A trampoline is a small piece of data or code that is created at 4264 run time on the stack when the address of a nested function is 4265 taken, and is used to call the nested function indirectly. For 4266 some targets, it is made up of data only and thus requires no 4267 special treatment. But, for most targets, it is made up of code 4268 and thus requires the stack to be made executable in order for the 4269 program to work properly. 4270 4271`-Wfloat-equal' 4272 Warn if floating-point values are used in equality comparisons. 4273 4274 The idea behind this is that sometimes it is convenient (for the 4275 programmer) to consider floating-point values as approximations to 4276 infinitely precise real numbers. If you are doing this, then you 4277 need to compute (by analyzing the code, or in some other way) the 4278 maximum or likely maximum error that the computation introduces, 4279 and allow for it when performing comparisons (and when producing 4280 output, but that's a different problem). In particular, instead 4281 of testing for equality, you should check to see whether the two 4282 values have ranges that overlap; and this is done with the 4283 relational operators, so equality comparisons are probably 4284 mistaken. 4285 4286`-Wtraditional (C and Objective-C only)' 4287 Warn about certain constructs that behave differently in 4288 traditional and ISO C. Also warn about ISO C constructs that have 4289 no traditional C equivalent, and/or problematic constructs that 4290 should be avoided. 4291 4292 * Macro parameters that appear within string literals in the 4293 macro body. In traditional C macro replacement takes place 4294 within string literals, but in ISO C it does not. 4295 4296 * In traditional C, some preprocessor directives did not exist. 4297 Traditional preprocessors only considered a line to be a 4298 directive if the `#' appeared in column 1 on the line. 4299 Therefore `-Wtraditional' warns about directives that 4300 traditional C understands but ignores because the `#' does 4301 not appear as the first character on the line. It also 4302 suggests you hide directives like `#pragma' not understood by 4303 traditional C by indenting them. Some traditional 4304 implementations do not recognize `#elif', so this option 4305 suggests avoiding it altogether. 4306 4307 * A function-like macro that appears without arguments. 4308 4309 * The unary plus operator. 4310 4311 * The `U' integer constant suffix, or the `F' or `L' 4312 floating-point constant suffixes. (Traditional C does 4313 support the `L' suffix on integer constants.) Note, these 4314 suffixes appear in macros defined in the system headers of 4315 most modern systems, e.g. the `_MIN'/`_MAX' macros in 4316 `<limits.h>'. Use of these macros in user code might 4317 normally lead to spurious warnings, however GCC's integrated 4318 preprocessor has enough context to avoid warning in these 4319 cases. 4320 4321 * A function declared external in one block and then used after 4322 the end of the block. 4323 4324 * A `switch' statement has an operand of type `long'. 4325 4326 * A non-`static' function declaration follows a `static' one. 4327 This construct is not accepted by some traditional C 4328 compilers. 4329 4330 * The ISO type of an integer constant has a different width or 4331 signedness from its traditional type. This warning is only 4332 issued if the base of the constant is ten. I.e. hexadecimal 4333 or octal values, which typically represent bit patterns, are 4334 not warned about. 4335 4336 * Usage of ISO string concatenation is detected. 4337 4338 * Initialization of automatic aggregates. 4339 4340 * Identifier conflicts with labels. Traditional C lacks a 4341 separate namespace for labels. 4342 4343 * Initialization of unions. If the initializer is zero, the 4344 warning is omitted. This is done under the assumption that 4345 the zero initializer in user code appears conditioned on e.g. 4346 `__STDC__' to avoid missing initializer warnings and relies 4347 on default initialization to zero in the traditional C case. 4348 4349 * Conversions by prototypes between fixed/floating-point values 4350 and vice versa. The absence of these prototypes when 4351 compiling with traditional C causes serious problems. This 4352 is a subset of the possible conversion warnings; for the full 4353 set use `-Wtraditional-conversion'. 4354 4355 * Use of ISO C style function definitions. This warning 4356 intentionally is _not_ issued for prototype declarations or 4357 variadic functions because these ISO C features appear in 4358 your code when using libiberty's traditional C compatibility 4359 macros, `PARAMS' and `VPARAMS'. This warning is also 4360 bypassed for nested functions because that feature is already 4361 a GCC extension and thus not relevant to traditional C 4362 compatibility. 4363 4364`-Wtraditional-conversion (C and Objective-C only)' 4365 Warn if a prototype causes a type conversion that is different 4366 from what would happen to the same argument in the absence of a 4367 prototype. This includes conversions of fixed point to floating 4368 and vice versa, and conversions changing the width or signedness 4369 of a fixed-point argument except when the same as the default 4370 promotion. 4371 4372`-Wdeclaration-after-statement (C and Objective-C only)' 4373 Warn when a declaration is found after a statement in a block. 4374 This construct, known from C++, was introduced with ISO C99 and is 4375 by default allowed in GCC. It is not supported by ISO C90. *Note 4376 Mixed Declarations::. 4377 4378`-Wundef' 4379 Warn if an undefined identifier is evaluated in an `#if' directive. 4380 4381`-Wno-endif-labels' 4382 Do not warn whenever an `#else' or an `#endif' are followed by 4383 text. 4384 4385`-Wshadow' 4386 Warn whenever a local variable or type declaration shadows another 4387 variable, parameter, type, class member (in C++), or instance 4388 variable (in Objective-C) or whenever a built-in function is 4389 shadowed. Note that in C++, the compiler warns if a local variable 4390 shadows an explicit typedef, but not if it shadows a 4391 struct/class/enum. 4392 4393`-Wno-shadow-ivar (Objective-C only)' 4394 Do not warn whenever a local variable shadows an instance variable 4395 in an Objective-C method. 4396 4397`-Wlarger-than=LEN' 4398 Warn whenever an object of larger than LEN bytes is defined. 4399 4400`-Wframe-larger-than=LEN' 4401 Warn if the size of a function frame is larger than LEN bytes. 4402 The computation done to determine the stack frame size is 4403 approximate and not conservative. The actual requirements may be 4404 somewhat greater than LEN even if you do not get a warning. In 4405 addition, any space allocated via `alloca', variable-length 4406 arrays, or related constructs is not included by the compiler when 4407 determining whether or not to issue a warning. 4408 4409`-Wno-free-nonheap-object' 4410 Do not warn when attempting to free an object that was not 4411 allocated on the heap. 4412 4413`-Wstack-usage=LEN' 4414 Warn if the stack usage of a function might be larger than LEN 4415 bytes. The computation done to determine the stack usage is 4416 conservative. Any space allocated via `alloca', variable-length 4417 arrays, or related constructs is included by the compiler when 4418 determining whether or not to issue a warning. 4419 4420 The message is in keeping with the output of `-fstack-usage'. 4421 4422 * If the stack usage is fully static but exceeds the specified 4423 amount, it's: 4424 4425 warning: stack usage is 1120 bytes 4426 4427 * If the stack usage is (partly) dynamic but bounded, it's: 4428 4429 warning: stack usage might be 1648 bytes 4430 4431 * If the stack usage is (partly) dynamic and not bounded, it's: 4432 4433 warning: stack usage might be unbounded 4434 4435`-Wunsafe-loop-optimizations' 4436 Warn if the loop cannot be optimized because the compiler cannot 4437 assume anything on the bounds of the loop indices. With 4438 `-funsafe-loop-optimizations' warn if the compiler makes such 4439 assumptions. 4440 4441`-Wno-pedantic-ms-format (MinGW targets only)' 4442 When used in combination with `-Wformat' and `-pedantic' without 4443 GNU extensions, this option disables the warnings about non-ISO 4444 `printf' / `scanf' format width specifiers `I32', `I64', and `I' 4445 used on Windows targets, which depend on the MS runtime. 4446 4447`-Wpointer-arith' 4448 Warn about anything that depends on the "size of" a function type 4449 or of `void'. GNU C assigns these types a size of 1, for 4450 convenience in calculations with `void *' pointers and pointers to 4451 functions. In C++, warn also when an arithmetic operation involves 4452 `NULL'. This warning is also enabled by `-Wpedantic'. 4453 4454`-Wtype-limits' 4455 Warn if a comparison is always true or always false due to the 4456 limited range of the data type, but do not warn for constant 4457 expressions. For example, warn if an unsigned variable is 4458 compared against zero with `<' or `>='. This warning is also 4459 enabled by `-Wextra'. 4460 4461`-Wbad-function-cast (C and Objective-C only)' 4462 Warn when a function call is cast to a non-matching type. For 4463 example, warn if a call to a function returning an integer type is 4464 cast to a pointer type. 4465 4466`-Wc90-c99-compat (C and Objective-C only)' 4467 Warn about features not present in ISO C90, but present in ISO C99. 4468 For instance, warn about use of variable length arrays, `long long' 4469 type, `bool' type, compound literals, designated initializers, 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`-Wc99-c11-compat (C and Objective-C only)' 4475 Warn about features not present in ISO C99, but present in ISO C11. 4476 For instance, warn about use of anonymous structures and unions, 4477 `_Atomic' type qualifier, `_Thread_local' storage-class specifier, 4478 `_Alignas' specifier, `Alignof' operator, `_Generic' keyword, and 4479 so on. This option is independent of the standards mode. 4480 Warnings are disabled in the expression that follows 4481 `__extension__'. 4482 4483`-Wc++-compat (C and Objective-C only)' 4484 Warn about ISO C constructs that are outside of the common subset 4485 of ISO C and ISO C++, e.g. request for implicit conversion from 4486 `void *' to a pointer to non-`void' type. 4487 4488`-Wc++11-compat (C++ and Objective-C++ only)' 4489 Warn about C++ constructs whose meaning differs between ISO C++ 4490 1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are 4491 keywords in ISO C++ 2011. This warning turns on `-Wnarrowing' and 4492 is enabled by `-Wall'. 4493 4494`-Wc++14-compat (C++ and Objective-C++ only)' 4495 Warn about C++ constructs whose meaning differs between ISO C++ 4496 2011 and ISO C++ 2014. This warning is enabled by `-Wall'. 4497 4498`-Wcast-qual' 4499 Warn whenever a pointer is cast so as to remove a type qualifier 4500 from the target type. For example, warn if a `const char *' is 4501 cast to an ordinary `char *'. 4502 4503 Also warn when making a cast that introduces a type qualifier in an 4504 unsafe way. For example, casting `char **' to `const char **' is 4505 unsafe, as in this example: 4506 4507 /* p is char ** value. */ 4508 const char **q = (const char **) p; 4509 /* Assignment of readonly string to const char * is OK. */ 4510 *q = "string"; 4511 /* Now char** pointer points to read-only memory. */ 4512 **p = 'b'; 4513 4514`-Wcast-align' 4515 Warn whenever a pointer is cast such that the required alignment 4516 of the target is increased. For example, warn if a `char *' is 4517 cast to an `int *' on machines where integers can only be accessed 4518 at two- or four-byte boundaries. 4519 4520`-Wwrite-strings' 4521 When compiling C, give string constants the type `const 4522 char[LENGTH]' so that copying the address of one into a 4523 non-`const' `char *' pointer produces a warning. These warnings 4524 help you find at compile time code that can try to write into a 4525 string constant, but only if you have been very careful about 4526 using `const' in declarations and prototypes. Otherwise, it is 4527 just a nuisance. This is why we did not make `-Wall' request these 4528 warnings. 4529 4530 When compiling C++, warn about the deprecated conversion from 4531 string literals to `char *'. This warning is enabled by default 4532 for C++ programs. 4533 4534`-Wclobbered' 4535 Warn for variables that might be changed by `longjmp' or `vfork'. 4536 This warning is also enabled by `-Wextra'. 4537 4538`-Wconditionally-supported (C++ and Objective-C++ only)' 4539 Warn for conditionally-supported (C++11 [intro.defs]) constructs. 4540 4541`-Wconversion' 4542 Warn for implicit conversions that may alter a value. This includes 4543 conversions between real and integer, like `abs (x)' when `x' is 4544 `double'; conversions between signed and unsigned, like `unsigned 4545 ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'. 4546 Do not warn for explicit casts like `abs ((int) x)' and `ui = 4547 (unsigned) -1', or if the value is not changed by the conversion 4548 like in `abs (2.0)'. Warnings about conversions between signed 4549 and unsigned integers can be disabled by using 4550 `-Wno-sign-conversion'. 4551 4552 For C++, also warn for confusing overload resolution for 4553 user-defined conversions; and conversions that never use a type 4554 conversion operator: conversions to `void', the same type, a base 4555 class or a reference to them. Warnings about conversions between 4556 signed and unsigned integers are disabled by default in C++ unless 4557 `-Wsign-conversion' is explicitly enabled. 4558 4559`-Wno-conversion-null (C++ and Objective-C++ only)' 4560 Do not warn for conversions between `NULL' and non-pointer types. 4561 `-Wconversion-null' is enabled by default. 4562 4563`-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)' 4564 Warn when a literal '0' is used as null pointer constant. This can 4565 be useful to facilitate the conversion to `nullptr' in C++11. 4566 4567`-Wdate-time' 4568 Warn when macros `__TIME__', `__DATE__' or `__TIMESTAMP__' are 4569 encountered as they might prevent bit-wise-identical reproducible 4570 compilations. 4571 4572`-Wdelete-incomplete (C++ and Objective-C++ only)' 4573 Warn when deleting a pointer to incomplete type, which may cause 4574 undefined behavior at runtime. This warning is enabled by default. 4575 4576`-Wuseless-cast (C++ and Objective-C++ only)' 4577 Warn when an expression is casted to its own type. 4578 4579`-Wempty-body' 4580 Warn if an empty body occurs in an `if', `else' or `do while' 4581 statement. This warning is also enabled by `-Wextra'. 4582 4583`-Wenum-compare' 4584 Warn about a comparison between values of different enumerated 4585 types. In C++ enumeral mismatches in conditional expressions are 4586 also diagnosed and the warning is enabled by default. In C this 4587 warning is enabled by `-Wall'. 4588 4589`-Wjump-misses-init (C, Objective-C only)' 4590 Warn if a `goto' statement or a `switch' statement jumps forward 4591 across the initialization of a variable, or jumps backward to a 4592 label after the variable has been initialized. This only warns 4593 about variables that are initialized when they are declared. This 4594 warning is only supported for C and Objective-C; in C++ this sort 4595 of branch is an error in any case. 4596 4597 `-Wjump-misses-init' is included in `-Wc++-compat'. It can be 4598 disabled with the `-Wno-jump-misses-init' option. 4599 4600`-Wsign-compare' 4601 Warn when a comparison between signed and unsigned values could 4602 produce an incorrect result when the signed value is converted to 4603 unsigned. This warning is also enabled by `-Wextra'; to get the 4604 other warnings of `-Wextra' without this warning, use `-Wextra 4605 -Wno-sign-compare'. 4606 4607`-Wsign-conversion' 4608 Warn for implicit conversions that may change the sign of an 4609 integer value, like assigning a signed integer expression to an 4610 unsigned integer variable. An explicit cast silences the warning. 4611 In C, this option is enabled also by `-Wconversion'. 4612 4613`-Wfloat-conversion' 4614 Warn for implicit conversions that reduce the precision of a real 4615 value. This includes conversions from real to integer, and from 4616 higher precision real to lower precision real values. This option 4617 is also enabled by `-Wconversion'. 4618 4619`-Wsized-deallocation (C++ and Objective-C++ only)' 4620 Warn about a definition of an unsized deallocation function 4621 void operator delete (void *) noexcept; 4622 void operator delete[] (void *) noexcept; 4623 without a definition of the corresponding sized deallocation 4624 function 4625 void operator delete (void *, std::size_t) noexcept; 4626 void operator delete[] (void *, std::size_t) noexcept; 4627 or vice versa. Enabled by `-Wextra' along with 4628 `-fsized-deallocation'. 4629 4630`-Wsizeof-pointer-memaccess' 4631 Warn for suspicious length parameters to certain string and memory 4632 built-in functions if the argument uses `sizeof'. This warning 4633 warns e.g. about `memset (ptr, 0, sizeof (ptr));' if `ptr' is not 4634 an array, but a pointer, and suggests a possible fix, or about 4635 `memcpy (&foo, ptr, sizeof (&foo));'. This warning is enabled by 4636 `-Wall'. 4637 4638`-Wsizeof-array-argument' 4639 Warn when the `sizeof' operator is applied to a parameter that is 4640 declared as an array in a function definition. This warning is 4641 enabled by default for C and C++ programs. 4642 4643`-Wmemset-transposed-args' 4644 Warn for suspicious calls to the `memset' built-in function, if the 4645 second argument is not zero and the third argument is zero. This 4646 warns e.g. about `memset (buf, sizeof buf, 0)' where most probably 4647 `memset (buf, 0, sizeof buf)' was meant instead. The diagnostics 4648 is only emitted if the third argument is literal zero. If it is 4649 some expression that is folded to zero, a cast of zero to some 4650 type, etc., it is far less likely that the user has mistakenly 4651 exchanged the arguments and no warning is emitted. This warning 4652 is enabled by `-Wall'. 4653 4654`-Waddress' 4655 Warn about suspicious uses of memory addresses. These include using 4656 the address of a function in a conditional expression, such as 4657 `void func(void); if (func)', and comparisons against the memory 4658 address of a string literal, such as `if (x == "abc")'. Such uses 4659 typically indicate a programmer error: the address of a function 4660 always evaluates to true, so their use in a conditional usually 4661 indicate that the programmer forgot the parentheses in a function 4662 call; and comparisons against string literals result in unspecified 4663 behavior and are not portable in C, so they usually indicate that 4664 the programmer intended to use `strcmp'. This warning is enabled 4665 by `-Wall'. 4666 4667`-Wlogical-op' 4668 Warn about suspicious uses of logical operators in expressions. 4669 This includes using logical operators in contexts where a bit-wise 4670 operator is likely to be expected. 4671 4672`-Wlogical-not-parentheses' 4673 Warn about logical not used on the left hand side operand of a 4674 comparison. This option does not warn if the RHS operand is of a 4675 boolean type. Its purpose is to detect suspicious code like the 4676 following: 4677 int a; 4678 ... 4679 if (!a > 1) { ... } 4680 4681 It is possible to suppress the warning by wrapping the LHS into 4682 parentheses: 4683 if ((!a) > 1) { ... } 4684 4685 This warning is enabled by `-Wall'. 4686 4687`-Waggregate-return' 4688 Warn if any functions that return structures or unions are defined 4689 or called. (In languages where you can return an array, this also 4690 elicits a warning.) 4691 4692`-Wno-aggressive-loop-optimizations' 4693 Warn if in a loop with constant number of iterations the compiler 4694 detects undefined behavior in some statement during one or more of 4695 the iterations. 4696 4697`-Wno-attributes' 4698 Do not warn if an unexpected `__attribute__' is used, such as 4699 unrecognized attributes, function attributes applied to variables, 4700 etc. This does not stop errors for incorrect use of supported 4701 attributes. 4702 4703`-Wno-builtin-macro-redefined' 4704 Do not warn if certain built-in macros are redefined. This 4705 suppresses warnings for redefinition of `__TIMESTAMP__', 4706 `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'. 4707 4708`-Wstrict-prototypes (C and Objective-C only)' 4709 Warn if a function is declared or defined without specifying the 4710 argument types. (An old-style function definition is permitted 4711 without a warning if preceded by a declaration that specifies the 4712 argument types.) 4713 4714`-Wold-style-declaration (C and Objective-C only)' 4715 Warn for obsolescent usages, according to the C Standard, in a 4716 declaration. For example, warn if storage-class specifiers like 4717 `static' are not the first things in a declaration. This warning 4718 is also enabled by `-Wextra'. 4719 4720`-Wold-style-definition (C and Objective-C only)' 4721 Warn if an old-style function definition is used. A warning is 4722 given even if there is a previous prototype. 4723 4724`-Wmissing-parameter-type (C and Objective-C only)' 4725 A function parameter is declared without a type specifier in 4726 K&R-style functions: 4727 4728 void foo(bar) { } 4729 4730 This warning is also enabled by `-Wextra'. 4731 4732`-Wmissing-prototypes (C and Objective-C only)' 4733 Warn if a global function is defined without a previous prototype 4734 declaration. This warning is issued even if the definition itself 4735 provides a prototype. Use this option to detect global functions 4736 that do not have a matching prototype declaration in a header file. 4737 This option is not valid for C++ because all function declarations 4738 provide prototypes and a non-matching declaration declares an 4739 overload rather than conflict with an earlier declaration. Use 4740 `-Wmissing-declarations' to detect missing declarations in C++. 4741 4742`-Wmissing-declarations' 4743 Warn if a global function is defined without a previous 4744 declaration. Do so even if the definition itself provides a 4745 prototype. Use this option to detect global functions that are 4746 not declared in header files. In C, no warnings are issued for 4747 functions with previous non-prototype declarations; use 4748 `-Wmissing-prototypes' to detect missing prototypes. In C++, no 4749 warnings are issued for function templates, or for inline 4750 functions, or for functions in anonymous namespaces. 4751 4752`-Wmissing-field-initializers' 4753 Warn if a structure's initializer has some fields missing. For 4754 example, the following code causes such a warning, because `x.h' 4755 is implicitly zero: 4756 4757 struct s { int f, g, h; }; 4758 struct s x = { 3, 4 }; 4759 4760 This option does not warn about designated initializers, so the 4761 following modification does not trigger a warning: 4762 4763 struct s { int f, g, h; }; 4764 struct s x = { .f = 3, .g = 4 }; 4765 4766 In C++ this option does not warn either about the empty { } 4767 initializer, for example: 4768 4769 struct s { int f, g, h; }; 4770 s x = { }; 4771 4772 This warning is included in `-Wextra'. To get other `-Wextra' 4773 warnings without this one, use `-Wextra 4774 -Wno-missing-field-initializers'. 4775 4776`-Wno-multichar' 4777 Do not warn if a multicharacter constant (`'FOOF'') is used. 4778 Usually they indicate a typo in the user's code, as they have 4779 implementation-defined values, and should not be used in portable 4780 code. 4781 4782`-Wnormalized[=<none|id|nfc|nfkc>]' 4783 In ISO C and ISO C++, two identifiers are different if they are 4784 different sequences of characters. However, sometimes when 4785 characters outside the basic ASCII character set are used, you can 4786 have two different character sequences that look the same. To 4787 avoid confusion, the ISO 10646 standard sets out some 4788 "normalization rules" which when applied ensure that two sequences 4789 that look the same are turned into the same sequence. GCC can 4790 warn you if you are using identifiers that have not been 4791 normalized; this option controls that warning. 4792 4793 There are four levels of warning supported by GCC. The default is 4794 `-Wnormalized=nfc', which warns about any identifier that is not 4795 in the ISO 10646 "C" normalized form, "NFC". NFC is the 4796 recommended form for most uses. It is equivalent to 4797 `-Wnormalized'. 4798 4799 Unfortunately, there are some characters allowed in identifiers by 4800 ISO C and ISO C++ that, when turned into NFC, are not allowed in 4801 identifiers. That is, there's no way to use these symbols in 4802 portable ISO C or C++ and have all your identifiers in NFC. 4803 `-Wnormalized=id' suppresses the warning for these characters. It 4804 is hoped that future versions of the standards involved will 4805 correct this, which is why this option is not the default. 4806 4807 You can switch the warning off for all characters by writing 4808 `-Wnormalized=none' or `-Wno-normalized'. You should only do this 4809 if you are using some other normalization scheme (like "D"), 4810 because otherwise you can easily create bugs that are literally 4811 impossible to see. 4812 4813 Some characters in ISO 10646 have distinct meanings but look 4814 identical in some fonts or display methodologies, especially once 4815 formatting has been applied. For instance `\u207F', "SUPERSCRIPT 4816 LATIN SMALL LETTER N", displays just like a regular `n' that has 4817 been placed in a superscript. ISO 10646 defines the "NFKC" 4818 normalization scheme to convert all these into a standard form as 4819 well, and GCC warns if your code is not in NFKC if you use 4820 `-Wnormalized=nfkc'. This warning is comparable to warning about 4821 every identifier that contains the letter O because it might be 4822 confused with the digit 0, and so is not the default, but may be 4823 useful as a local coding convention if the programming environment 4824 cannot be fixed to display these characters distinctly. 4825 4826`-Wno-deprecated' 4827 Do not warn about usage of deprecated features. *Note Deprecated 4828 Features::. 4829 4830`-Wno-deprecated-declarations' 4831 Do not warn about uses of functions (*note Function Attributes::), 4832 variables (*note Variable Attributes::), and types (*note Type 4833 Attributes::) marked as deprecated by using the `deprecated' 4834 attribute. 4835 4836`-Wno-overflow' 4837 Do not warn about compile-time overflow in constant expressions. 4838 4839`-Wno-odr' 4840 Warn about One Definition Rule violations during link-time 4841 optimization. Requires `-flto-odr-type-merging' to be enabled. 4842 Enabled by default. 4843 4844`-Wopenmp-simd' 4845 Warn if the vectorizer cost model overrides the OpenMP or the Cilk 4846 Plus simd directive set by user. The `-fsimd-cost-model=unlimited' 4847 option can be used to relax the cost model. 4848 4849`-Woverride-init (C and Objective-C only)' 4850 Warn if an initialized field without side effects is overridden 4851 when using designated initializers (*note Designated Initializers: 4852 Designated Inits.). 4853 4854 This warning is included in `-Wextra'. To get other `-Wextra' 4855 warnings without this one, use `-Wextra -Wno-override-init'. 4856 4857`-Wpacked' 4858 Warn if a structure is given the packed attribute, but the packed 4859 attribute has no effect on the layout or size of the structure. 4860 Such structures may be mis-aligned for little benefit. For 4861 instance, in this code, the variable `f.x' in `struct bar' is 4862 misaligned even though `struct bar' does not itself have the 4863 packed attribute: 4864 4865 struct foo { 4866 int x; 4867 char a, b, c, d; 4868 } __attribute__((packed)); 4869 struct bar { 4870 char z; 4871 struct foo f; 4872 }; 4873 4874`-Wpacked-bitfield-compat' 4875 The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute 4876 on bit-fields of type `char'. This has been fixed in GCC 4.4 but 4877 the change can lead to differences in the structure layout. GCC 4878 informs you when the offset of such a field has changed in GCC 4.4. 4879 For example there is no longer a 4-bit padding between field `a' 4880 and `b' in this structure: 4881 4882 struct foo 4883 { 4884 char a:4; 4885 char b:8; 4886 } __attribute__ ((packed)); 4887 4888 This warning is enabled by default. Use 4889 `-Wno-packed-bitfield-compat' to disable this warning. 4890 4891`-Wpadded' 4892 Warn if padding is included in a structure, either to align an 4893 element of the structure or to align the whole structure. 4894 Sometimes when this happens it is possible to rearrange the fields 4895 of the structure to reduce the padding and so make the structure 4896 smaller. 4897 4898`-Wredundant-decls' 4899 Warn if anything is declared more than once in the same scope, 4900 even in cases where multiple declaration is valid and changes 4901 nothing. 4902 4903`-Wnested-externs (C and Objective-C only)' 4904 Warn if an `extern' declaration is encountered within a function. 4905 4906`-Wno-inherited-variadic-ctor' 4907 Suppress warnings about use of C++11 inheriting constructors when 4908 the base class inherited from has a C variadic constructor; the 4909 warning is on by default because the ellipsis is not inherited. 4910 4911`-Winline' 4912 Warn if a function that is declared as inline cannot be inlined. 4913 Even with this option, the compiler does not warn about failures to 4914 inline functions declared in system headers. 4915 4916 The compiler uses a variety of heuristics to determine whether or 4917 not to inline a function. For example, the compiler takes into 4918 account the size of the function being inlined and the amount of 4919 inlining that has already been done in the current function. 4920 Therefore, seemingly insignificant changes in the source program 4921 can cause the warnings produced by `-Winline' to appear or 4922 disappear. 4923 4924`-Wno-invalid-offsetof (C++ and Objective-C++ only)' 4925 Suppress warnings from applying the `offsetof' macro to a non-POD 4926 type. According to the 2014 ISO C++ standard, applying `offsetof' 4927 to a non-standard-layout type is undefined. In existing C++ 4928 implementations, however, `offsetof' typically gives meaningful 4929 results. This flag is for users who are aware that they are 4930 writing nonportable code and who have deliberately chosen to 4931 ignore the warning about it. 4932 4933 The restrictions on `offsetof' may be relaxed in a future version 4934 of the C++ standard. 4935 4936`-Wno-int-to-pointer-cast' 4937 Suppress warnings from casts to pointer type of an integer of a 4938 different size. In C++, casting to a pointer type of smaller size 4939 is an error. `Wint-to-pointer-cast' is enabled by default. 4940 4941`-Wno-pointer-to-int-cast (C and Objective-C only)' 4942 Suppress warnings from casts from a pointer to an integer type of a 4943 different size. 4944 4945`-Winvalid-pch' 4946 Warn if a precompiled header (*note Precompiled Headers::) is 4947 found in the search path but can't be used. 4948 4949`-Wlong-long' 4950 Warn if `long long' type is used. This is enabled by either 4951 `-Wpedantic' or `-Wtraditional' in ISO C90 and C++98 modes. To 4952 inhibit the warning messages, use `-Wno-long-long'. 4953 4954`-Wvariadic-macros' 4955 Warn if variadic macros are used in ISO C90 mode, or if the GNU 4956 alternate syntax is used in ISO C99 mode. This is enabled by 4957 either `-Wpedantic' or `-Wtraditional'. To inhibit the warning 4958 messages, use `-Wno-variadic-macros'. 4959 4960`-Wvarargs' 4961 Warn upon questionable usage of the macros used to handle variable 4962 arguments like `va_start'. This is default. To inhibit the 4963 warning messages, use `-Wno-varargs'. 4964 4965`-Wvector-operation-performance' 4966 Warn if vector operation is not implemented via SIMD capabilities 4967 of the architecture. Mainly useful for the performance tuning. 4968 Vector operation can be implemented `piecewise', which means that 4969 the scalar operation is performed on every vector element; `in 4970 parallel', which means that the vector operation is implemented 4971 using scalars of wider type, which normally is more performance 4972 efficient; and `as a single scalar', which means that vector fits 4973 into a scalar type. 4974 4975`-Wno-virtual-move-assign' 4976 Suppress warnings about inheriting from a virtual base with a 4977 non-trivial C++11 move assignment operator. This is dangerous 4978 because if the virtual base is reachable along more than one path, 4979 it is moved multiple times, which can mean both objects end up in 4980 the moved-from state. If the move assignment operator is written 4981 to avoid moving from a moved-from object, this warning can be 4982 disabled. 4983 4984`-Wvla' 4985 Warn if variable length array is used in the code. `-Wno-vla' 4986 prevents the `-Wpedantic' warning of the variable length array. 4987 4988`-Wvolatile-register-var' 4989 Warn if a register variable is declared volatile. The volatile 4990 modifier does not inhibit all optimizations that may eliminate 4991 reads and/or writes to register variables. This warning is 4992 enabled by `-Wall'. 4993 4994`-Wdisabled-optimization' 4995 Warn if a requested optimization pass is disabled. This warning 4996 does not generally indicate that there is anything wrong with your 4997 code; it merely indicates that GCC's optimizers are unable to 4998 handle the code effectively. Often, the problem is that your code 4999 is too big or too complex; GCC refuses to optimize programs when 5000 the optimization itself is likely to take inordinate amounts of 5001 time. 5002 5003`-Wpointer-sign (C and Objective-C only)' 5004 Warn for pointer argument passing or assignment with different 5005 signedness. This option is only supported for C and Objective-C. 5006 It is implied by `-Wall' and by `-Wpedantic', which can be 5007 disabled with `-Wno-pointer-sign'. 5008 5009`-Wstack-protector' 5010 This option is only active when `-fstack-protector' is active. It 5011 warns about functions that are not protected against stack 5012 smashing. 5013 5014`-Woverlength-strings' 5015 Warn about string constants that are longer than the "minimum 5016 maximum" length specified in the C standard. Modern compilers 5017 generally allow string constants that are much longer than the 5018 standard's minimum limit, but very portable programs should avoid 5019 using longer strings. 5020 5021 The limit applies _after_ string constant concatenation, and does 5022 not count the trailing NUL. In C90, the limit was 509 characters; 5023 in C99, it was raised to 4095. C++98 does not specify a normative 5024 minimum maximum, so we do not diagnose overlength strings in C++. 5025 5026 This option is implied by `-Wpedantic', and can be disabled with 5027 `-Wno-overlength-strings'. 5028 5029`-Wunsuffixed-float-constants (C and Objective-C only)' 5030 Issue a warning for any floating constant that does not have a 5031 suffix. When used together with `-Wsystem-headers' it warns about 5032 such constants in system header files. This can be useful when 5033 preparing code to use with the `FLOAT_CONST_DECIMAL64' pragma from 5034 the decimal floating-point extension to C99. 5035 5036`-Wno-designated-init (C and Objective-C only)' 5037 Suppress warnings when a positional initializer is used to 5038 initialize a structure that has been marked with the 5039 `designated_init' attribute. 5040 5041 5042 5043File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 5044 50453.9 Options for Debugging Your Program or GCC 5046============================================= 5047 5048GCC has various special options that are used for debugging either your 5049program or GCC: 5050 5051`-g' 5052 Produce debugging information in the operating system's native 5053 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 5054 debugging information. 5055 5056 On most systems that use stabs format, `-g' enables use of extra 5057 debugging information that only GDB can use; this extra information 5058 makes debugging work better in GDB but probably makes other 5059 debuggers crash or refuse to read the program. If you want to 5060 control for certain whether to generate the extra information, use 5061 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 5062 below). 5063 5064 GCC allows you to use `-g' with `-O'. The shortcuts taken by 5065 optimized code may occasionally produce surprising results: some 5066 variables you declared may not exist at all; flow of control may 5067 briefly move where you did not expect it; some statements may not 5068 be executed because they compute constant results or their values 5069 are already at hand; some statements may execute in different 5070 places because they have been moved out of loops. 5071 5072 Nevertheless it proves possible to debug optimized output. This 5073 makes it reasonable to use the optimizer for programs that might 5074 have bugs. 5075 5076 The following options are useful when GCC is generated with the 5077 capability for more than one debugging format. 5078 5079`-gsplit-dwarf' 5080 Separate as much dwarf debugging information as possible into a 5081 separate output file with the extension .dwo. This option allows 5082 the build system to avoid linking files with debug information. To 5083 be useful, this option requires a debugger capable of reading .dwo 5084 files. 5085 5086`-ggdb' 5087 Produce debugging information for use by GDB. This means to use 5088 the most expressive format available (DWARF 2, stabs, or the 5089 native format if neither of those are supported), including GDB 5090 extensions if at all possible. 5091 5092`-gpubnames' 5093 Generate dwarf .debug_pubnames and .debug_pubtypes sections. 5094 5095`-ggnu-pubnames' 5096 Generate .debug_pubnames and .debug_pubtypes sections in a format 5097 suitable for conversion into a GDB index. This option is only 5098 useful with a linker that can produce GDB index version 7. 5099 5100`-gstabs' 5101 Produce debugging information in stabs format (if that is 5102 supported), without GDB extensions. This is the format used by 5103 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 5104 systems this option produces stabs debugging output that is not 5105 understood by DBX or SDB. On System V Release 4 systems this 5106 option requires the GNU assembler. 5107 5108`-feliminate-unused-debug-symbols' 5109 Produce debugging information in stabs format (if that is 5110 supported), for only symbols that are actually used. 5111 5112`-femit-class-debug-always' 5113 Instead of emitting debugging information for a C++ class in only 5114 one object file, emit it in all object files using the class. 5115 This option should be used only with debuggers that are unable to 5116 handle the way GCC normally emits debugging information for 5117 classes because using this option increases the size of debugging 5118 information by as much as a factor of two. 5119 5120`-fdebug-types-section' 5121 When using DWARF Version 4 or higher, type DIEs can be put into 5122 their own `.debug_types' section instead of making them part of the 5123 `.debug_info' section. It is more efficient to put them in a 5124 separate comdat sections since the linker can then remove 5125 duplicates. But not all DWARF consumers support `.debug_types' 5126 sections yet and on some objects `.debug_types' produces larger 5127 instead of smaller debugging information. 5128 5129`-gstabs+' 5130 Produce debugging information in stabs format (if that is 5131 supported), using GNU extensions understood only by the GNU 5132 debugger (GDB). The use of these extensions is likely to make 5133 other debuggers crash or refuse to read the program. 5134 5135`-gcoff' 5136 Produce debugging information in COFF format (if that is 5137 supported). This is the format used by SDB on most System V 5138 systems prior to System V Release 4. 5139 5140`-gxcoff' 5141 Produce debugging information in XCOFF format (if that is 5142 supported). This is the format used by the DBX debugger on IBM 5143 RS/6000 systems. 5144 5145`-gxcoff+' 5146 Produce debugging information in XCOFF format (if that is 5147 supported), using GNU extensions understood only by the GNU 5148 debugger (GDB). The use of these extensions is likely to make 5149 other debuggers crash or refuse to read the program, and may cause 5150 assemblers other than the GNU assembler (GAS) to fail with an 5151 error. 5152 5153`-gdwarf-VERSION' 5154 Produce debugging information in DWARF format (if that is 5155 supported). The value of VERSION may be either 2, 3, 4 or 5; the 5156 default version for most targets is 4. DWARF Version 5 is only 5157 experimental. 5158 5159 Note that with DWARF Version 2, some ports require and always use 5160 some non-conflicting DWARF 3 extensions in the unwind tables. 5161 5162 Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for 5163 maximum benefit. 5164 5165`-grecord-gcc-switches' 5166 This switch causes the command-line options used to invoke the 5167 compiler that may affect code generation to be appended to the 5168 DW_AT_producer attribute in DWARF debugging information. The 5169 options are concatenated with spaces separating them from each 5170 other and from the compiler version. See also 5171 `-frecord-gcc-switches' for another way of storing compiler 5172 options into the object file. This is the default. 5173 5174`-gno-record-gcc-switches' 5175 Disallow appending command-line options to the DW_AT_producer 5176 attribute in DWARF debugging information. 5177 5178`-gstrict-dwarf' 5179 Disallow using extensions of later DWARF standard version than 5180 selected with `-gdwarf-VERSION'. On most targets using 5181 non-conflicting DWARF extensions from later standard versions is 5182 allowed. 5183 5184`-gno-strict-dwarf' 5185 Allow using extensions of later DWARF standard version than 5186 selected with `-gdwarf-VERSION'. 5187 5188`-gz[=TYPE]' 5189 Produce compressed debug sections in DWARF format, if that is 5190 supported. If TYPE is not given, the default type depends on the 5191 capabilities of the assembler and linker used. TYPE may be one of 5192 `none' (don't compress debug sections), `zlib' (use zlib 5193 compression in ELF gABI format), or `zlib-gnu' (use zlib 5194 compression in traditional GNU format). If the linker doesn't 5195 support writing compressed debug sections, the option is rejected. 5196 Otherwise, if the assembler does not support them, `-gz' is 5197 silently ignored when producing object files. 5198 5199`-gvms' 5200 Produce debugging information in Alpha/VMS debug format (if that is 5201 supported). This is the format used by DEBUG on Alpha/VMS systems. 5202 5203`-gLEVEL' 5204`-ggdbLEVEL' 5205`-gstabsLEVEL' 5206`-gcoffLEVEL' 5207`-gxcoffLEVEL' 5208`-gvmsLEVEL' 5209 Request debugging information and also use LEVEL to specify how 5210 much information. The default level is 2. 5211 5212 Level 0 produces no debug information at all. Thus, `-g0' negates 5213 `-g'. 5214 5215 Level 1 produces minimal information, enough for making backtraces 5216 in parts of the program that you don't plan to debug. This 5217 includes descriptions of functions and external variables, and 5218 line number tables, but no information about local variables. 5219 5220 Level 3 includes extra information, such as all the macro 5221 definitions present in the program. Some debuggers support macro 5222 expansion when you use `-g3'. 5223 5224 `-gdwarf-2' does not accept a concatenated debug level, because 5225 GCC used to support an option `-gdwarf' that meant to generate 5226 debug information in version 1 of the DWARF format (which is very 5227 different from version 2), and it would have been too confusing. 5228 That debug format is long obsolete, but the option cannot be 5229 changed now. Instead use an additional `-gLEVEL' option to change 5230 the debug level for DWARF. 5231 5232`-gtoggle' 5233 Turn off generation of debug info, if leaving out this option 5234 generates it, or turn it on at level 2 otherwise. The position of 5235 this argument in the command line does not matter; it takes effect 5236 after all other options are processed, and it does so only once, 5237 no matter how many times it is given. This is mainly intended to 5238 be used with `-fcompare-debug'. 5239 5240`-fsanitize=address' 5241 Enable AddressSanitizer, a fast memory error detector. Memory 5242 access instructions are instrumented to detect out-of-bounds and 5243 use-after-free bugs. See 5244 `https://github.com/google/sanitizers/wiki/AddressSanitizer' for 5245 more details. The run-time behavior can be influenced using the 5246 `ASAN_OPTIONS' environment variable. When set to `help=1', the 5247 available options are shown at startup of the instrumended 5248 program. See 5249 `https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags' 5250 for a list of supported options. 5251 5252`-fsanitize=kernel-address' 5253 Enable AddressSanitizer for Linux kernel. See 5254 `https://github.com/google/kasan/wiki' for more details. 5255 5256`-fsanitize=thread' 5257 Enable ThreadSanitizer, a fast data race detector. Memory access 5258 instructions are instrumented to detect data race bugs. See 5259 `https://github.com/google/sanitizers/wiki#threadsanitizer' for 5260 more details. The run-time behavior can be influenced using the 5261 `TSAN_OPTIONS' environment variable; see 5262 `https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags' 5263 for a list of supported options. 5264 5265`-fsanitize=leak' 5266 Enable LeakSanitizer, a memory leak detector. This option only 5267 matters for linking of executables and if neither 5268 `-fsanitize=address' nor `-fsanitize=thread' is used. In that 5269 case the executable is linked against a library that overrides 5270 `malloc' and other allocator functions. See 5271 `https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer' 5272 for more details. The run-time behavior can be influenced using 5273 the `LSAN_OPTIONS' environment variable. 5274 5275`-fsanitize=undefined' 5276 Enable UndefinedBehaviorSanitizer, a fast undefined behavior 5277 detector. Various computations are instrumented to detect 5278 undefined behavior at runtime. Current suboptions are: 5279 5280 `-fsanitize=shift' 5281 This option enables checking that the result of a shift 5282 operation is not undefined. Note that what exactly is 5283 considered undefined differs slightly between C and C++, as 5284 well as between ISO C90 and C99, etc. 5285 5286 `-fsanitize=integer-divide-by-zero' 5287 Detect integer division by zero as well as `INT_MIN / -1' 5288 division. 5289 5290 `-fsanitize=unreachable' 5291 With this option, the compiler turns the 5292 `__builtin_unreachable' call into a diagnostics message call 5293 instead. When reaching the `__builtin_unreachable' call, the 5294 behavior is undefined. 5295 5296 `-fsanitize=vla-bound' 5297 This option instructs the compiler to check that the size of 5298 a variable length array is positive. 5299 5300 `-fsanitize=null' 5301 This option enables pointer checking. Particularly, the 5302 application built with this option turned on will issue an 5303 error message when it tries to dereference a NULL pointer, or 5304 if a reference (possibly an rvalue reference) is bound to a 5305 NULL pointer, or if a method is invoked on an object pointed 5306 by a NULL pointer. 5307 5308 `-fsanitize=return' 5309 This option enables return statement checking. Programs 5310 built with this option turned on will issue an error message 5311 when the end of a non-void function is reached without 5312 actually returning a value. This option works in C++ only. 5313 5314 `-fsanitize=signed-integer-overflow' 5315 This option enables signed integer overflow checking. We 5316 check that the result of `+', `*', and both unary and binary 5317 `-' does not overflow in the signed arithmetics. Note, 5318 integer promotion rules must be taken into account. That is, 5319 the following is not an overflow: 5320 signed char a = SCHAR_MAX; 5321 a++; 5322 5323 `-fsanitize=bounds' 5324 This option enables instrumentation of array bounds. Various 5325 out of bounds accesses are detected. Flexible array members, 5326 flexible array member-like arrays, and initializers of 5327 variables with static storage are not instrumented. 5328 5329 `-fsanitize=alignment' 5330 This option enables checking of alignment of pointers when 5331 they are dereferenced, or when a reference is bound to 5332 insufficiently aligned target, or when a method or 5333 constructor is invoked on insufficiently aligned object. 5334 5335 `-fsanitize=object-size' 5336 This option enables instrumentation of memory references 5337 using the `__builtin_object_size' function. Various out of 5338 bounds pointer accesses are detected. 5339 5340 `-fsanitize=float-divide-by-zero' 5341 Detect floating-point division by zero. Unlike other similar 5342 options, `-fsanitize=float-divide-by-zero' is not enabled by 5343 `-fsanitize=undefined', since floating-point division by zero 5344 can be a legitimate way of obtaining infinities and NaNs. 5345 5346 `-fsanitize=float-cast-overflow' 5347 This option enables floating-point type to integer conversion 5348 checking. We check that the result of the conversion does 5349 not overflow. Unlike other similar options, 5350 `-fsanitize=float-cast-overflow' is not enabled by 5351 `-fsanitize=undefined'. This option does not work well with 5352 `FE_INVALID' exceptions enabled. 5353 5354 `-fsanitize=nonnull-attribute' 5355 This option enables instrumentation of calls, checking 5356 whether null values are not passed to arguments marked as 5357 requiring a non-null value by the `nonnull' function 5358 attribute. 5359 5360 `-fsanitize=returns-nonnull-attribute' 5361 This option enables instrumentation of return statements in 5362 functions marked with `returns_nonnull' function attribute, 5363 to detect returning of null values from such functions. 5364 5365 `-fsanitize=bool' 5366 This option enables instrumentation of loads from bool. If a 5367 value other than 0/1 is loaded, a run-time error is issued. 5368 5369 `-fsanitize=enum' 5370 This option enables instrumentation of loads from an enum 5371 type. If a value outside the range of values for the enum 5372 type is loaded, a run-time error is issued. 5373 5374 `-fsanitize=vptr' 5375 This option enables instrumentation of C++ member function 5376 calls, member accesses and some conversions between pointers 5377 to base and derived classes, to verify the referenced object 5378 has the correct dynamic type. 5379 5380 5381 While `-ftrapv' causes traps for signed overflows to be emitted, 5382 `-fsanitize=undefined' gives a diagnostic message. This currently 5383 works only for the C family of languages. 5384 5385`-fno-sanitize=all' 5386 This option disables all previously enabled sanitizers. 5387 `-fsanitize=all' is not allowed, as some sanitizers cannot be used 5388 together. 5389 5390`-fasan-shadow-offset=NUMBER' 5391 This option forces GCC to use custom shadow offset in 5392 AddressSanitizer checks. It is useful for experimenting with 5393 different shadow memory layouts in Kernel AddressSanitizer. 5394 5395`-fsanitize-recover[=OPTS]' 5396 `-fsanitize-recover=' controls error recovery mode for sanitizers 5397 mentioned in comma-separated list of OPTS. Enabling this option 5398 for a sanitizer component causes it to attempt to continue running 5399 the program as if no error happened. This means multiple runtime 5400 errors can be reported in a single program run, and the exit code 5401 of the program may indicate success even when errors have been 5402 reported. The `-fno-sanitize-recover=' option can be used to alter 5403 this behavior: only the first detected error is reported and 5404 program then exits with a non-zero exit code. 5405 5406 Currently this feature only works for `-fsanitize=undefined' (and 5407 its suboptions except for `-fsanitize=unreachable' and 5408 `-fsanitize=return'), `-fsanitize=float-cast-overflow', 5409 `-fsanitize=float-divide-by-zero' and `-fsanitize=kernel-address'. 5410 For these sanitizers error recovery is turned on by default. 5411 `-fsanitize-recover=all' and `-fno-sanitize-recover=all' is also 5412 accepted, the former enables recovery for all sanitizers that 5413 support it, the latter disables recovery for all sanitizers that 5414 support it. 5415 5416 Syntax without explicit OPTS parameter is deprecated. It is 5417 equivalent to 5418 -fsanitize-recover=undefined,float-cast-overflow,float-divide-by-zero 5419 Similarly `-fno-sanitize-recover' is equivalent to 5420 -fno-sanitize-recover=undefined,float-cast-overflow,float-divide-by-zero 5421 5422`-fsanitize-undefined-trap-on-error' 5423 The `-fsanitize-undefined-trap-on-error' option instructs the 5424 compiler to report undefined behavior using `__builtin_trap' 5425 rather than a `libubsan' library routine. The advantage of this 5426 is that the `libubsan' library is not needed and is not linked in, 5427 so this is usable even in freestanding environments. 5428 5429`-fcheck-pointer-bounds' 5430 Enable Pointer Bounds Checker instrumentation. Each memory 5431 reference is instrumented with checks of the pointer used for 5432 memory access against bounds associated with that pointer. 5433 5434 Currently there is only an implementation for Intel MPX available, 5435 thus x86 target and `-mmpx' are required to enable this feature. 5436 MPX-based instrumentation requires a runtime library to enable MPX 5437 in hardware and handle bounds violation signals. By default when 5438 `-fcheck-pointer-bounds' and `-mmpx' options are used to link a 5439 program, the GCC driver links against the `libmpx' runtime library 5440 and `libmpxwrappers' library. It also passes '-z bndplt' to a 5441 linker in case it supports this option (which is checked on libmpx 5442 configuration). Note that old versions of linker may ignore 5443 option. Gold linker doesn't support '-z bndplt' option. With no 5444 '-z bndplt' support in linker all calls to dynamic libraries lose 5445 passed bounds reducing overall protection level. It's highly 5446 recommended to use linker with '-z bndplt' support. In case such 5447 linker is not available it is adviced to always use 5448 `-static-libmpxwrappers' for better protection level or use 5449 `-static' to completely avoid external calls to dynamic libraries. 5450 MPX-based instrumentation may be used for debugging and also may 5451 be included in production code to increase program security. 5452 Depending on usage, you may have different requirements for the 5453 runtime library. The current version of the MPX runtime library 5454 is more oriented for use as a debugging tool. MPX runtime library 5455 usage implies `-lpthread'. See also `-static-libmpx'. The 5456 runtime library behavior can be influenced using various 5457 `CHKP_RT_*' environment variables. See 5458 `https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler' 5459 for more details. 5460 5461 Generated instrumentation may be controlled by various `-fchkp-*' 5462 options and by the `bnd_variable_size' structure field attribute 5463 (*note Type Attributes::) and `bnd_legacy', and `bnd_instrument' 5464 function attributes (*note Function Attributes::). GCC also 5465 provides a number of built-in functions for controlling the 5466 Pointer Bounds Checker. *Note Pointer Bounds Checker builtins::, 5467 for more information. 5468 5469`-fchkp-check-incomplete-type' 5470 Generate pointer bounds checks for variables with incomplete type. 5471 Enabled by default. 5472 5473`-fchkp-narrow-bounds' 5474 Controls bounds used by Pointer Bounds Checker for pointers to 5475 object fields. If narrowing is enabled then field bounds are 5476 used. Otherwise object bounds are used. See also 5477 `-fchkp-narrow-to-innermost-array' and 5478 `-fchkp-first-field-has-own-bounds'. Enabled by default. 5479 5480`-fchkp-first-field-has-own-bounds' 5481 Forces Pointer Bounds Checker to use narrowed bounds for the 5482 address of the first field in the structure. By default a pointer 5483 to the first field has the same bounds as a pointer to the whole 5484 structure. 5485 5486`-fchkp-narrow-to-innermost-array' 5487 Forces Pointer Bounds Checker to use bounds of the innermost 5488 arrays in case of nested static array access. By default this 5489 option is disabled and bounds of the outermost array are used. 5490 5491`-fchkp-optimize' 5492 Enables Pointer Bounds Checker optimizations. Enabled by default 5493 at optimization levels `-O', `-O2', `-O3'. 5494 5495`-fchkp-use-fast-string-functions' 5496 Enables use of `*_nobnd' versions of string functions (not copying 5497 bounds) by Pointer Bounds Checker. Disabled by default. 5498 5499`-fchkp-use-nochk-string-functions' 5500 Enables use of `*_nochk' versions of string functions (not 5501 checking bounds) by Pointer Bounds Checker. Disabled by default. 5502 5503`-fchkp-use-static-bounds' 5504 Allow Pointer Bounds Checker to generate static bounds holding 5505 bounds of static variables. Enabled by default. 5506 5507`-fchkp-use-static-const-bounds' 5508 Use statically-initialized bounds for constant bounds instead of 5509 generating them each time they are required. By default enabled 5510 when `-fchkp-use-static-bounds' is enabled. 5511 5512`-fchkp-treat-zero-dynamic-size-as-infinite' 5513 With this option, objects with incomplete type whose 5514 dynamically-obtained size is zero are treated as having infinite 5515 size instead by Pointer Bounds Checker. This option may be 5516 helpful if a program is linked with a library missing size 5517 information for some symbols. Disabled by default. 5518 5519`-fchkp-check-read' 5520 Instructs Pointer Bounds Checker to generate checks for all read 5521 accesses to memory. Enabled by default. 5522 5523`-fchkp-check-write' 5524 Instructs Pointer Bounds Checker to generate checks for all write 5525 accesses to memory. Enabled by default. 5526 5527`-fchkp-store-bounds' 5528 Instructs Pointer Bounds Checker to generate bounds stores for 5529 pointer writes. Enabled by default. 5530 5531`-fchkp-instrument-calls' 5532 Instructs Pointer Bounds Checker to pass pointer bounds to calls. 5533 Enabled by default. 5534 5535`-fchkp-instrument-marked-only' 5536 Instructs Pointer Bounds Checker to instrument only functions 5537 marked with the `bnd_instrument' attribute (*note Function 5538 Attributes::). Disabled by default. 5539 5540`-fchkp-use-wrappers' 5541 Allows Pointer Bounds Checker to replace calls to built-in 5542 functions with calls to wrapper functions. When 5543 `-fchkp-use-wrappers' is used to link a program, the GCC driver 5544 automatically links against `libmpxwrappers'. See also 5545 `-static-libmpxwrappers'. Enabled by default. 5546 5547`-fdump-final-insns[=FILE]' 5548 Dump the final internal representation (RTL) to FILE. If the 5549 optional argument is omitted (or if FILE is `.'), the name of the 5550 dump file is determined by appending `.gkd' to the compilation 5551 output file name. 5552 5553`-fcompare-debug[=OPTS]' 5554 If no error occurs during compilation, run the compiler a second 5555 time, adding OPTS and `-fcompare-debug-second' to the arguments 5556 passed to the second compilation. Dump the final internal 5557 representation in both compilations, and print an error if they 5558 differ. 5559 5560 If the equal sign is omitted, the default `-gtoggle' is used. 5561 5562 The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty 5563 and nonzero, implicitly enables `-fcompare-debug'. If 5564 `GCC_COMPARE_DEBUG' is defined to a string starting with a dash, 5565 then it is used for OPTS, otherwise the default `-gtoggle' is used. 5566 5567 `-fcompare-debug=', with the equal sign but without OPTS, is 5568 equivalent to `-fno-compare-debug', which disables the dumping of 5569 the final representation and the second compilation, preventing 5570 even `GCC_COMPARE_DEBUG' from taking effect. 5571 5572 To verify full coverage during `-fcompare-debug' testing, set 5573 `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which 5574 GCC rejects as an invalid option in any actual compilation (rather 5575 than preprocessing, assembly or linking). To get just a warning, 5576 setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not 5577 overridden' will do. 5578 5579`-fcompare-debug-second' 5580 This option is implicitly passed to the compiler for the second 5581 compilation requested by `-fcompare-debug', along with options to 5582 silence warnings, and omitting other options that would cause 5583 side-effect compiler outputs to files or to the standard output. 5584 Dump files and preserved temporary files are renamed so as to 5585 contain the `.gk' additional extension during the second 5586 compilation, to avoid overwriting those generated by the first. 5587 5588 When this option is passed to the compiler driver, it causes the 5589 _first_ compilation to be skipped, which makes it useful for little 5590 other than debugging the compiler proper. 5591 5592`-feliminate-dwarf2-dups' 5593 Compress DWARF 2 debugging information by eliminating duplicated 5594 information about each symbol. This option only makes sense when 5595 generating DWARF 2 debugging information with `-gdwarf-2'. 5596 5597`-femit-struct-debug-baseonly' 5598 Emit debug information for struct-like types only when the base 5599 name of the compilation source file matches the base name of file 5600 in which the struct is defined. 5601 5602 This option substantially reduces the size of debugging 5603 information, but at significant potential loss in type information 5604 to the debugger. See `-femit-struct-debug-reduced' for a less 5605 aggressive option. See `-femit-struct-debug-detailed' for more 5606 detailed control. 5607 5608 This option works only with DWARF 2. 5609 5610`-femit-struct-debug-reduced' 5611 Emit debug information for struct-like types only when the base 5612 name of the compilation source file matches the base name of file 5613 in which the type is defined, unless the struct is a template or 5614 defined in a system header. 5615 5616 This option significantly reduces the size of debugging 5617 information, with some potential loss in type information to the 5618 debugger. See `-femit-struct-debug-baseonly' for a more 5619 aggressive option. See `-femit-struct-debug-detailed' for more 5620 detailed control. 5621 5622 This option works only with DWARF 2. 5623 5624`-femit-struct-debug-detailed[=SPEC-LIST]' 5625 Specify the struct-like types for which the compiler generates 5626 debug information. The intent is to reduce duplicate struct debug 5627 information between different object files within the same program. 5628 5629 This option is a detailed version of `-femit-struct-debug-reduced' 5630 and `-femit-struct-debug-baseonly', which serves for most needs. 5631 5632 A specification has the syntax 5633 [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none') 5634 5635 The optional first word limits the specification to structs that 5636 are used directly (`dir:') or used indirectly (`ind:'). A struct 5637 type is used directly when it is the type of a variable, member. 5638 Indirect uses arise through pointers to structs. That is, when 5639 use of an incomplete struct is valid, the use is indirect. An 5640 example is `struct one direct; struct two * indirect;'. 5641 5642 The optional second word limits the specification to ordinary 5643 structs (`ord:') or generic structs (`gen:'). Generic structs are 5644 a bit complicated to explain. For C++, these are non-explicit 5645 specializations of template classes, or non-template classes 5646 within the above. Other programming languages have generics, but 5647 `-femit-struct-debug-detailed' does not yet implement them. 5648 5649 The third word specifies the source files for those structs for 5650 which the compiler should emit debug information. The values 5651 `none' and `any' have the normal meaning. The value `base' means 5652 that the base of name of the file in which the type declaration 5653 appears must match the base of the name of the main compilation 5654 file. In practice, this means that when compiling `foo.c', debug 5655 information is generated for types declared in that file and 5656 `foo.h', but not other header files. The value `sys' means those 5657 types satisfying `base' or declared in system or compiler headers. 5658 5659 You may need to experiment to determine the best settings for your 5660 application. 5661 5662 The default is `-femit-struct-debug-detailed=all'. 5663 5664 This option works only with DWARF 2. 5665 5666`-fno-merge-debug-strings' 5667 Direct the linker to not merge together strings in the debugging 5668 information that are identical in different object files. Merging 5669 is not supported by all assemblers or linkers. Merging decreases 5670 the size of the debug information in the output file at the cost 5671 of increasing link processing time. Merging is enabled by default. 5672 5673`-fdebug-prefix-map=OLD=NEW' 5674 When compiling files in directory `OLD', record debugging 5675 information describing them as in `NEW' instead. 5676 5677`-fno-dwarf2-cfi-asm' 5678 Emit DWARF 2 unwind info as compiler generated `.eh_frame' section 5679 instead of using GAS `.cfi_*' directives. 5680 5681`-p' 5682 Generate extra code to write profile information suitable for the 5683 analysis program `prof'. You must use this option when compiling 5684 the source files you want data about, and you must also use it when 5685 linking. 5686 5687`-pg' 5688 Generate extra code to write profile information suitable for the 5689 analysis program `gprof'. You must use this option when compiling 5690 the source files you want data about, and you must also use it when 5691 linking. 5692 5693`-Q' 5694 Makes the compiler print out each function name as it is compiled, 5695 and print some statistics about each pass when it finishes. 5696 5697`-ftime-report' 5698 Makes the compiler print some statistics about the time consumed 5699 by each pass when it finishes. 5700 5701`-fmem-report' 5702 Makes the compiler print some statistics about permanent memory 5703 allocation when it finishes. 5704 5705`-fmem-report-wpa' 5706 Makes the compiler print some statistics about permanent memory 5707 allocation for the WPA phase only. 5708 5709`-fpre-ipa-mem-report' 5710 5711`-fpost-ipa-mem-report' 5712 Makes the compiler print some statistics about permanent memory 5713 allocation before or after interprocedural optimization. 5714 5715`-fprofile-report' 5716 Makes the compiler print some statistics about consistency of the 5717 (estimated) profile and effect of individual passes. 5718 5719`-fstack-usage' 5720 Makes the compiler output stack usage information for the program, 5721 on a per-function basis. The filename for the dump is made by 5722 appending `.su' to the AUXNAME. AUXNAME is generated from the 5723 name of the output file, if explicitly specified and it is not an 5724 executable, otherwise it is the basename of the source file. An 5725 entry is made up of three fields: 5726 5727 * The name of the function. 5728 5729 * A number of bytes. 5730 5731 * One or more qualifiers: `static', `dynamic', `bounded'. 5732 5733 The qualifier `static' means that the function manipulates the 5734 stack statically: a fixed number of bytes are allocated for the 5735 frame on function entry and released on function exit; no stack 5736 adjustments are otherwise made in the function. The second field 5737 is this fixed number of bytes. 5738 5739 The qualifier `dynamic' means that the function manipulates the 5740 stack dynamically: in addition to the static allocation described 5741 above, stack adjustments are made in the body of the function, for 5742 example to push/pop arguments around function calls. If the 5743 qualifier `bounded' is also present, the amount of these 5744 adjustments is bounded at compile time and the second field is an 5745 upper bound of the total amount of stack used by the function. If 5746 it is not present, the amount of these adjustments is not bounded 5747 at compile time and the second field only represents the bounded 5748 part. 5749 5750`-fprofile-arcs' 5751 Add code so that program flow "arcs" are instrumented. During 5752 execution the program records how many times each branch and call 5753 is executed and how many times it is taken or returns. When the 5754 compiled program exits it saves this data to a file called 5755 `AUXNAME.gcda' for each source file. The data may be used for 5756 profile-directed optimizations (`-fbranch-probabilities'), or for 5757 test coverage analysis (`-ftest-coverage'). Each object file's 5758 AUXNAME is generated from the name of the output file, if 5759 explicitly specified and it is not the final executable, otherwise 5760 it is the basename of the source file. In both cases any suffix 5761 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or 5762 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 5763 *Note Cross-profiling::. 5764 5765`--coverage' 5766 This option is used to compile and link code instrumented for 5767 coverage analysis. The option is a synonym for `-fprofile-arcs' 5768 `-ftest-coverage' (when compiling) and `-lgcov' (when linking). 5769 See the documentation for those options for more details. 5770 5771 * Compile the source files with `-fprofile-arcs' plus 5772 optimization and code generation options. For test coverage 5773 analysis, use the additional `-ftest-coverage' option. You 5774 do not need to profile every source file in a program. 5775 5776 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 5777 latter implies the former). 5778 5779 * Run the program on a representative workload to generate the 5780 arc profile information. This may be repeated any number of 5781 times. You can run concurrent instances of your program, and 5782 provided that the file system supports locking, the data 5783 files will be correctly updated. Also `fork' calls are 5784 detected and correctly handled (double counting will not 5785 happen). 5786 5787 * For profile-directed optimizations, compile the source files 5788 again with the same optimization and code generation options 5789 plus `-fbranch-probabilities' (*note Options that Control 5790 Optimization: Optimize Options.). 5791 5792 * For test coverage analysis, use `gcov' to produce human 5793 readable information from the `.gcno' and `.gcda' files. 5794 Refer to the `gcov' documentation for further information. 5795 5796 5797 With `-fprofile-arcs', for each function of your program GCC 5798 creates a program flow graph, then finds a spanning tree for the 5799 graph. Only arcs that are not on the spanning tree have to be 5800 instrumented: the compiler adds code to count the number of times 5801 that these arcs are executed. When an arc is the only exit or 5802 only entrance to a block, the instrumentation code can be added to 5803 the block; otherwise, a new basic block must be created to hold 5804 the instrumentation code. 5805 5806`-ftest-coverage' 5807 Produce a notes file that the `gcov' code-coverage utility (*note 5808 `gcov'--a Test Coverage Program: Gcov.) can use to show program 5809 coverage. Each source file's note file is called `AUXNAME.gcno'. 5810 Refer to the `-fprofile-arcs' option above for a description of 5811 AUXNAME and instructions on how to generate test coverage data. 5812 Coverage data matches the source files more closely if you do not 5813 optimize. 5814 5815`-fdbg-cnt-list' 5816 Print the name and the counter upper bound for all debug counters. 5817 5818`-fdbg-cnt=COUNTER-VALUE-LIST' 5819 Set the internal debug counter upper bound. COUNTER-VALUE-LIST is 5820 a comma-separated list of NAME:VALUE pairs which sets the upper 5821 bound of each debug counter NAME to VALUE. All debug counters 5822 have the initial upper bound of `UINT_MAX'; thus `dbg_cnt' returns 5823 true always unless the upper bound is set by this option. For 5824 example, with `-fdbg-cnt=dce:10,tail_call:0', `dbg_cnt(dce)' 5825 returns true only for first 10 invocations. 5826 5827`-fenable-KIND-PASS' 5828`-fdisable-KIND-PASS=RANGE-LIST' 5829 This is a set of options that are used to explicitly disable/enable 5830 optimization passes. These options are intended for use for 5831 debugging GCC. Compiler users should use regular options for 5832 enabling/disabling passes instead. 5833 5834 `-fdisable-ipa-PASS' 5835 Disable IPA pass PASS. PASS is the pass name. If the same 5836 pass is statically invoked in the compiler multiple times, 5837 the pass name should be appended with a sequential number 5838 starting from 1. 5839 5840 `-fdisable-rtl-PASS' 5841 `-fdisable-rtl-PASS=RANGE-LIST' 5842 Disable RTL pass PASS. PASS is the pass name. If the same 5843 pass is statically invoked in the compiler multiple times, 5844 the pass name should be appended with a sequential number 5845 starting from 1. RANGE-LIST is a comma-separated list of 5846 function ranges or assembler names. Each range is a number 5847 pair separated by a colon. The range is inclusive in both 5848 ends. If the range is trivial, the number pair can be 5849 simplified as a single number. If the function's call graph 5850 node's UID falls within one of the specified ranges, the PASS 5851 is disabled for that function. The UID is shown in the 5852 function header of a dump file, and the pass names can be 5853 dumped by using option `-fdump-passes'. 5854 5855 `-fdisable-tree-PASS' 5856 `-fdisable-tree-PASS=RANGE-LIST' 5857 Disable tree pass PASS. See `-fdisable-rtl' for the 5858 description of option arguments. 5859 5860 `-fenable-ipa-PASS' 5861 Enable IPA pass PASS. PASS is the pass name. If the same 5862 pass is statically invoked in the compiler multiple times, 5863 the pass name should be appended with a sequential number 5864 starting from 1. 5865 5866 `-fenable-rtl-PASS' 5867 `-fenable-rtl-PASS=RANGE-LIST' 5868 Enable RTL pass PASS. See `-fdisable-rtl' for option argument 5869 description and examples. 5870 5871 `-fenable-tree-PASS' 5872 `-fenable-tree-PASS=RANGE-LIST' 5873 Enable tree pass PASS. See `-fdisable-rtl' for the 5874 description of option arguments. 5875 5876 5877 Here are some examples showing uses of these options. 5878 5879 5880 # disable ccp1 for all functions 5881 -fdisable-tree-ccp1 5882 # disable complete unroll for function whose cgraph node uid is 1 5883 -fenable-tree-cunroll=1 5884 # disable gcse2 for functions at the following ranges [1,1], 5885 # [300,400], and [400,1000] 5886 # disable gcse2 for functions foo and foo2 5887 -fdisable-rtl-gcse2=foo,foo2 5888 # disable early inlining 5889 -fdisable-tree-einline 5890 # disable ipa inlining 5891 -fdisable-ipa-inline 5892 # enable tree full unroll 5893 -fenable-tree-unroll 5894 5895`-dLETTERS' 5896`-fdump-rtl-PASS' 5897`-fdump-rtl-PASS=FILENAME' 5898 Says to make debugging dumps during compilation at times specified 5899 by LETTERS. This is used for debugging the RTL-based passes of the 5900 compiler. The file names for most of the dumps are made by 5901 appending a pass number and a word to the DUMPNAME, and the files 5902 are created in the directory of the output file. In case of 5903 `=FILENAME' option, the dump is output on the given file instead 5904 of the pass numbered dump files. Note that the pass number is 5905 computed statically as passes get registered into the pass manager. 5906 Thus the numbering is not related to the dynamic order of 5907 execution of passes. In particular, a pass installed by a plugin 5908 could have a number over 200 even if it executed quite early. 5909 DUMPNAME is generated from the name of the output file, if 5910 explicitly specified and it is not an executable, otherwise it is 5911 the basename of the source file. These switches may have different 5912 effects when `-E' is used for preprocessing. 5913 5914 Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d' 5915 option LETTERS. Here are the possible letters for use in PASS and 5916 LETTERS, and their meanings: 5917 5918 `-fdump-rtl-alignments' 5919 Dump after branch alignments have been computed. 5920 5921 `-fdump-rtl-asmcons' 5922 Dump after fixing rtl statements that have unsatisfied in/out 5923 constraints. 5924 5925 `-fdump-rtl-auto_inc_dec' 5926 Dump after auto-inc-dec discovery. This pass is only run on 5927 architectures that have auto inc or auto dec instructions. 5928 5929 `-fdump-rtl-barriers' 5930 Dump after cleaning up the barrier instructions. 5931 5932 `-fdump-rtl-bbpart' 5933 Dump after partitioning hot and cold basic blocks. 5934 5935 `-fdump-rtl-bbro' 5936 Dump after block reordering. 5937 5938 `-fdump-rtl-btl1' 5939 `-fdump-rtl-btl2' 5940 `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after 5941 the two branch target load optimization passes. 5942 5943 `-fdump-rtl-bypass' 5944 Dump after jump bypassing and control flow optimizations. 5945 5946 `-fdump-rtl-combine' 5947 Dump after the RTL instruction combination pass. 5948 5949 `-fdump-rtl-compgotos' 5950 Dump after duplicating the computed gotos. 5951 5952 `-fdump-rtl-ce1' 5953 `-fdump-rtl-ce2' 5954 `-fdump-rtl-ce3' 5955 `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3' 5956 enable dumping after the three if conversion passes. 5957 5958 `-fdump-rtl-cprop_hardreg' 5959 Dump after hard register copy propagation. 5960 5961 `-fdump-rtl-csa' 5962 Dump after combining stack adjustments. 5963 5964 `-fdump-rtl-cse1' 5965 `-fdump-rtl-cse2' 5966 `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after 5967 the two common subexpression elimination passes. 5968 5969 `-fdump-rtl-dce' 5970 Dump after the standalone dead code elimination passes. 5971 5972 `-fdump-rtl-dbr' 5973 Dump after delayed branch scheduling. 5974 5975 `-fdump-rtl-dce1' 5976 `-fdump-rtl-dce2' 5977 `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after 5978 the two dead store elimination passes. 5979 5980 `-fdump-rtl-eh' 5981 Dump after finalization of EH handling code. 5982 5983 `-fdump-rtl-eh_ranges' 5984 Dump after conversion of EH handling range regions. 5985 5986 `-fdump-rtl-expand' 5987 Dump after RTL generation. 5988 5989 `-fdump-rtl-fwprop1' 5990 `-fdump-rtl-fwprop2' 5991 `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping 5992 after the two forward propagation passes. 5993 5994 `-fdump-rtl-gcse1' 5995 `-fdump-rtl-gcse2' 5996 `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping 5997 after global common subexpression elimination. 5998 5999 `-fdump-rtl-init-regs' 6000 Dump after the initialization of the registers. 6001 6002 `-fdump-rtl-initvals' 6003 Dump after the computation of the initial value sets. 6004 6005 `-fdump-rtl-into_cfglayout' 6006 Dump after converting to cfglayout mode. 6007 6008 `-fdump-rtl-ira' 6009 Dump after iterated register allocation. 6010 6011 `-fdump-rtl-jump' 6012 Dump after the second jump optimization. 6013 6014 `-fdump-rtl-loop2' 6015 `-fdump-rtl-loop2' enables dumping after the rtl loop 6016 optimization passes. 6017 6018 `-fdump-rtl-mach' 6019 Dump after performing the machine dependent reorganization 6020 pass, if that pass exists. 6021 6022 `-fdump-rtl-mode_sw' 6023 Dump after removing redundant mode switches. 6024 6025 `-fdump-rtl-rnreg' 6026 Dump after register renumbering. 6027 6028 `-fdump-rtl-outof_cfglayout' 6029 Dump after converting from cfglayout mode. 6030 6031 `-fdump-rtl-peephole2' 6032 Dump after the peephole pass. 6033 6034 `-fdump-rtl-postreload' 6035 Dump after post-reload optimizations. 6036 6037 `-fdump-rtl-pro_and_epilogue' 6038 Dump after generating the function prologues and epilogues. 6039 6040 `-fdump-rtl-sched1' 6041 `-fdump-rtl-sched2' 6042 `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping 6043 after the basic block scheduling passes. 6044 6045 `-fdump-rtl-ree' 6046 Dump after sign/zero extension elimination. 6047 6048 `-fdump-rtl-seqabstr' 6049 Dump after common sequence discovery. 6050 6051 `-fdump-rtl-shorten' 6052 Dump after shortening branches. 6053 6054 `-fdump-rtl-sibling' 6055 Dump after sibling call optimizations. 6056 6057 `-fdump-rtl-split1' 6058 `-fdump-rtl-split2' 6059 `-fdump-rtl-split3' 6060 `-fdump-rtl-split4' 6061 `-fdump-rtl-split5' 6062 These options enable dumping after five rounds of instruction 6063 splitting. 6064 6065 `-fdump-rtl-sms' 6066 Dump after modulo scheduling. This pass is only run on some 6067 architectures. 6068 6069 `-fdump-rtl-stack' 6070 Dump after conversion from GCC's "flat register file" 6071 registers to the x87's stack-like registers. This pass is 6072 only run on x86 variants. 6073 6074 `-fdump-rtl-subreg1' 6075 `-fdump-rtl-subreg2' 6076 `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping 6077 after the two subreg expansion passes. 6078 6079 `-fdump-rtl-unshare' 6080 Dump after all rtl has been unshared. 6081 6082 `-fdump-rtl-vartrack' 6083 Dump after variable tracking. 6084 6085 `-fdump-rtl-vregs' 6086 Dump after converting virtual registers to hard registers. 6087 6088 `-fdump-rtl-web' 6089 Dump after live range splitting. 6090 6091 `-fdump-rtl-regclass' 6092 `-fdump-rtl-subregs_of_mode_init' 6093 `-fdump-rtl-subregs_of_mode_finish' 6094 `-fdump-rtl-dfinit' 6095 `-fdump-rtl-dfinish' 6096 These dumps are defined but always produce empty files. 6097 6098 `-da' 6099 `-fdump-rtl-all' 6100 Produce all the dumps listed above. 6101 6102 `-dA' 6103 Annotate the assembler output with miscellaneous debugging 6104 information. 6105 6106 `-dD' 6107 Dump all macro definitions, at the end of preprocessing, in 6108 addition to normal output. 6109 6110 `-dH' 6111 Produce a core dump whenever an error occurs. 6112 6113 `-dp' 6114 Annotate the assembler output with a comment indicating which 6115 pattern and alternative is used. The length of each 6116 instruction is also printed. 6117 6118 `-dP' 6119 Dump the RTL in the assembler output as a comment before each 6120 instruction. Also turns on `-dp' annotation. 6121 6122 `-dx' 6123 Just generate RTL for a function instead of compiling it. 6124 Usually used with `-fdump-rtl-expand'. 6125 6126`-fdump-noaddr' 6127 When doing debugging dumps, suppress address output. This makes 6128 it more feasible to use diff on debugging dumps for compiler 6129 invocations with different compiler binaries and/or different text 6130 / bss / data / heap / stack / dso start locations. 6131 6132`-freport-bug' 6133 Collect and dump debug information into temporary file if ICE in 6134 C/C++ compiler occured. 6135 6136`-fdump-unnumbered' 6137 When doing debugging dumps, suppress instruction numbers and 6138 address output. This makes it more feasible to use diff on 6139 debugging dumps for compiler invocations with different options, 6140 in particular with and without `-g'. 6141 6142`-fdump-unnumbered-links' 6143 When doing debugging dumps (see `-d' option above), suppress 6144 instruction numbers for the links to the previous and next 6145 instructions in a sequence. 6146 6147`-fdump-translation-unit (C++ only)' 6148`-fdump-translation-unit-OPTIONS (C++ only)' 6149 Dump a representation of the tree structure for the entire 6150 translation unit to a file. The file name is made by appending 6151 `.tu' to the source file name, and the file is created in the same 6152 directory as the output file. If the `-OPTIONS' form is used, 6153 OPTIONS controls the details of the dump as described for the 6154 `-fdump-tree' options. 6155 6156`-fdump-class-hierarchy (C++ only)' 6157`-fdump-class-hierarchy-OPTIONS (C++ only)' 6158 Dump a representation of each class's hierarchy and virtual 6159 function table layout to a file. The file name is made by 6160 appending `.class' to the source file name, and the file is 6161 created in the same directory as the output file. If the 6162 `-OPTIONS' form is used, OPTIONS controls the details of the dump 6163 as described for the `-fdump-tree' options. 6164 6165`-fdump-ipa-SWITCH' 6166 Control the dumping at various stages of inter-procedural analysis 6167 language tree to a file. The file name is generated by appending a 6168 switch specific suffix to the source file name, and the file is 6169 created in the same directory as the output file. The following 6170 dumps are possible: 6171 6172 `all' 6173 Enables all inter-procedural analysis dumps. 6174 6175 `cgraph' 6176 Dumps information about call-graph optimization, unused 6177 function removal, and inlining decisions. 6178 6179 `inline' 6180 Dump after function inlining. 6181 6182 6183`-fdump-passes' 6184 Dump the list of optimization passes that are turned on and off by 6185 the current command-line options. 6186 6187`-fdump-statistics-OPTION' 6188 Enable and control dumping of pass statistics in a separate file. 6189 The file name is generated by appending a suffix ending in 6190 `.statistics' to the source file name, and the file is created in 6191 the same directory as the output file. If the `-OPTION' form is 6192 used, `-stats' causes counters to be summed over the whole 6193 compilation unit while `-details' dumps every event as the passes 6194 generate them. The default with no option is to sum counters for 6195 each function compiled. 6196 6197`-fdump-tree-SWITCH' 6198`-fdump-tree-SWITCH-OPTIONS' 6199`-fdump-tree-SWITCH-OPTIONS=FILENAME' 6200 Control the dumping at various stages of processing the 6201 intermediate language tree to a file. The file name is generated 6202 by appending a switch-specific suffix to the source file name, and 6203 the file is created in the same directory as the output file. In 6204 case of `=FILENAME' option, the dump is output on the given file 6205 instead of the auto named dump files. If the `-OPTIONS' form is 6206 used, OPTIONS is a list of `-' separated options which control the 6207 details of the dump. Not all options are applicable to all dumps; 6208 those that are not meaningful are ignored. The following options 6209 are available 6210 6211 `address' 6212 Print the address of each node. Usually this is not 6213 meaningful as it changes according to the environment and 6214 source file. Its primary use is for tying up a dump file 6215 with a debug environment. 6216 6217 `asmname' 6218 If `DECL_ASSEMBLER_NAME' has been set for a given decl, use 6219 that in the dump instead of `DECL_NAME'. Its primary use is 6220 ease of use working backward from mangled names in the 6221 assembly file. 6222 6223 `slim' 6224 When dumping front-end intermediate representations, inhibit 6225 dumping of members of a scope or body of a function merely 6226 because that scope has been reached. Only dump such items 6227 when they are directly reachable by some other path. 6228 6229 When dumping pretty-printed trees, this option inhibits 6230 dumping the bodies of control structures. 6231 6232 When dumping RTL, print the RTL in slim (condensed) form 6233 instead of the default LISP-like representation. 6234 6235 `raw' 6236 Print a raw representation of the tree. By default, trees are 6237 pretty-printed into a C-like representation. 6238 6239 `details' 6240 Enable more detailed dumps (not honored by every dump 6241 option). Also include information from the optimization 6242 passes. 6243 6244 `stats' 6245 Enable dumping various statistics about the pass (not honored 6246 by every dump option). 6247 6248 `blocks' 6249 Enable showing basic block boundaries (disabled in raw dumps). 6250 6251 `graph' 6252 For each of the other indicated dump files 6253 (`-fdump-rtl-PASS'), dump a representation of the control 6254 flow graph suitable for viewing with GraphViz to 6255 `FILE.PASSID.PASS.dot'. Each function in the file is 6256 pretty-printed as a subgraph, so that GraphViz can render them 6257 all in a single plot. 6258 6259 This option currently only works for RTL dumps, and the RTL 6260 is always dumped in slim form. 6261 6262 `vops' 6263 Enable showing virtual operands for every statement. 6264 6265 `lineno' 6266 Enable showing line numbers for statements. 6267 6268 `uid' 6269 Enable showing the unique ID (`DECL_UID') for each variable. 6270 6271 `verbose' 6272 Enable showing the tree dump for each statement. 6273 6274 `eh' 6275 Enable showing the EH region number holding each statement. 6276 6277 `scev' 6278 Enable showing scalar evolution analysis details. 6279 6280 `optimized' 6281 Enable showing optimization information (only available in 6282 certain passes). 6283 6284 `missed' 6285 Enable showing missed optimization information (only 6286 available in certain passes). 6287 6288 `note' 6289 Enable other detailed optimization information (only 6290 available in certain passes). 6291 6292 `=FILENAME' 6293 Instead of an auto named dump file, output into the given file 6294 name. The file names `stdout' and `stderr' are treated 6295 specially and are considered already open standard streams. 6296 For example, 6297 6298 gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump 6299 -fdump-tree-pre=stderr file.c 6300 6301 outputs vectorizer dump into `foo.dump', while the PRE dump is 6302 output on to `stderr'. If two conflicting dump filenames are 6303 given for the same pass, then the latter option overrides the 6304 earlier one. 6305 6306 `all' 6307 Turn on all options, except `raw', `slim', `verbose' and 6308 `lineno'. 6309 6310 `optall' 6311 Turn on all optimization options, i.e., `optimized', 6312 `missed', and `note'. 6313 6314 The following tree dumps are possible: 6315 `original' 6316 Dump before any tree based optimization, to `FILE.original'. 6317 6318 `optimized' 6319 Dump after all tree based optimization, to `FILE.optimized'. 6320 6321 `gimple' 6322 Dump each function before and after the gimplification pass 6323 to a file. The file name is made by appending `.gimple' to 6324 the source file name. 6325 6326 `cfg' 6327 Dump the control flow graph of each function to a file. The 6328 file name is made by appending `.cfg' to the source file name. 6329 6330 `ch' 6331 Dump each function after copying loop headers. The file name 6332 is made by appending `.ch' to the source file name. 6333 6334 `ssa' 6335 Dump SSA related information to a file. The file name is 6336 made by appending `.ssa' to the source file name. 6337 6338 `alias' 6339 Dump aliasing information for each function. The file name 6340 is made by appending `.alias' to the source file name. 6341 6342 `ccp' 6343 Dump each function after CCP. The file name is made by 6344 appending `.ccp' to the source file name. 6345 6346 `storeccp' 6347 Dump each function after STORE-CCP. The file name is made by 6348 appending `.storeccp' to the source file name. 6349 6350 `pre' 6351 Dump trees after partial redundancy elimination. The file 6352 name is made by appending `.pre' to the source file name. 6353 6354 `fre' 6355 Dump trees after full redundancy elimination. The file name 6356 is made by appending `.fre' to the source file name. 6357 6358 `copyprop' 6359 Dump trees after copy propagation. The file name is made by 6360 appending `.copyprop' to the source file name. 6361 6362 `store_copyprop' 6363 Dump trees after store copy-propagation. The file name is 6364 made by appending `.store_copyprop' to the source file name. 6365 6366 `dce' 6367 Dump each function after dead code elimination. The file 6368 name is made by appending `.dce' to the source file name. 6369 6370 `sra' 6371 Dump each function after performing scalar replacement of 6372 aggregates. The file name is made by appending `.sra' to the 6373 source file name. 6374 6375 `sink' 6376 Dump each function after performing code sinking. The file 6377 name is made by appending `.sink' to the source file name. 6378 6379 `dom' 6380 Dump each function after applying dominator tree 6381 optimizations. The file name is made by appending `.dom' to 6382 the source file name. 6383 6384 `dse' 6385 Dump each function after applying dead store elimination. 6386 The file name is made by appending `.dse' to the source file 6387 name. 6388 6389 `phiopt' 6390 Dump each function after optimizing PHI nodes into 6391 straightline code. The file name is made by appending 6392 `.phiopt' to the source file name. 6393 6394 `forwprop' 6395 Dump each function after forward propagating single use 6396 variables. The file name is made by appending `.forwprop' to 6397 the source file name. 6398 6399 `copyrename' 6400 Dump each function after applying the copy rename 6401 optimization. The file name is made by appending 6402 `.copyrename' to the source file name. 6403 6404 `nrv' 6405 Dump each function after applying the named return value 6406 optimization on generic trees. The file name is made by 6407 appending `.nrv' to the source file name. 6408 6409 `vect' 6410 Dump each function after applying vectorization of loops. 6411 The file name is made by appending `.vect' to the source file 6412 name. 6413 6414 `slp' 6415 Dump each function after applying vectorization of basic 6416 blocks. The file name is made by appending `.slp' to the 6417 source file name. 6418 6419 `vrp' 6420 Dump each function after Value Range Propagation (VRP). The 6421 file name is made by appending `.vrp' to the source file name. 6422 6423 `all' 6424 Enable all the available tree dumps with the flags provided 6425 in this option. 6426 6427`-fopt-info' 6428`-fopt-info-OPTIONS' 6429`-fopt-info-OPTIONS=FILENAME' 6430 Controls optimization dumps from various optimization passes. If 6431 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 6432 option keywords to select the dump details and optimizations. 6433 6434 The OPTIONS can be divided into two groups: options describing the 6435 verbosity of the dump, and options describing which optimizations 6436 should be included. The options from both the groups can be freely 6437 mixed as they are non-overlapping. However, in case of any 6438 conflicts, the later options override the earlier options on the 6439 command line. 6440 6441 The following options control the dump verbosity: 6442 6443 `optimized' 6444 Print information when an optimization is successfully 6445 applied. It is up to a pass to decide which information is 6446 relevant. For example, the vectorizer passes print the source 6447 location of loops which are successfully vectorized. 6448 6449 `missed' 6450 Print information about missed optimizations. Individual 6451 passes control which information to include in the output. 6452 6453 `note' 6454 Print verbose information about optimizations, such as certain 6455 transformations, more detailed messages about decisions etc. 6456 6457 `all' 6458 Print detailed optimization information. This includes 6459 `optimized', `missed', and `note'. 6460 6461 One or more of the following option keywords can be used to 6462 describe a group of optimizations: 6463 6464 `ipa' 6465 Enable dumps from all interprocedural optimizations. 6466 6467 `loop' 6468 Enable dumps from all loop optimizations. 6469 6470 `inline' 6471 Enable dumps from all inlining optimizations. 6472 6473 `vec' 6474 Enable dumps from all vectorization optimizations. 6475 6476 `optall' 6477 Enable dumps from all optimizations. This is a superset of 6478 the optimization groups listed above. 6479 6480 If OPTIONS is omitted, it defaults to `optimized-optall', which 6481 means to dump all info about successful optimizations from all the 6482 passes. 6483 6484 If the FILENAME is provided, then the dumps from all the 6485 applicable optimizations are concatenated into the FILENAME. 6486 Otherwise the dump is output onto `stderr'. Though multiple 6487 `-fopt-info' options are accepted, only one of them can include a 6488 FILENAME. If other filenames are provided then all but the first 6489 such option are ignored. 6490 6491 Note that the output FILENAME is overwritten in case of multiple 6492 translation units. If a combined output from multiple translation 6493 units is desired, `stderr' should be used instead. 6494 6495 In the following example, the optimization info is output to 6496 `stderr': 6497 6498 gcc -O3 -fopt-info 6499 6500 This example: 6501 gcc -O3 -fopt-info-missed=missed.all 6502 6503 outputs missed optimization report from all the passes into 6504 `missed.all', and this one: 6505 6506 gcc -O2 -ftree-vectorize -fopt-info-vec-missed 6507 6508 prints information about missed optimization opportunities from 6509 vectorization passes on `stderr'. Note that 6510 `-fopt-info-vec-missed' is equivalent to `-fopt-info-missed-vec'. 6511 6512 As another example, 6513 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt 6514 6515 outputs information about missed optimizations as well as 6516 optimized locations from all the inlining passes into `inline.txt'. 6517 6518 Finally, consider: 6519 6520 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt 6521 6522 Here the two output filenames `vec.miss' and `loop.opt' are in 6523 conflict since only one output file is allowed. In this case, only 6524 the first option takes effect and the subsequent options are 6525 ignored. Thus only `vec.miss' is produced which contains dumps 6526 from the vectorizer about missed opportunities. 6527 6528`-frandom-seed=STRING' 6529 This option provides a seed that GCC uses in place of random 6530 numbers in generating certain symbol names that have to be 6531 different in every compiled file. It is also used to place unique 6532 stamps in coverage data files and the object files that produce 6533 them. You can use the `-frandom-seed' option to produce 6534 reproducibly identical object files. 6535 6536 The STRING can either be a number (decimal, octal or hex) or an 6537 arbitrary string (in which case it's converted to a number by 6538 computing CRC32). 6539 6540 The STRING should be different for every file you compile. 6541 6542`-fsched-verbose=N' 6543 On targets that use instruction scheduling, this option controls 6544 the amount of debugging output the scheduler prints. This 6545 information is written to standard error, unless 6546 `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which 6547 case it is output to the usual dump listing file, `.sched1' or 6548 `.sched2' respectively. However for N greater than nine, the 6549 output is always printed to standard error. 6550 6551 For N greater than zero, `-fsched-verbose' outputs the same 6552 information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'. For N 6553 greater than one, it also output basic block probabilities, 6554 detailed ready list information and unit/insn info. For N greater 6555 than two, it includes RTL at abort point, control-flow and regions 6556 info. And for N over four, `-fsched-verbose' also includes 6557 dependence info. 6558 6559`-save-temps' 6560`-save-temps=cwd' 6561 Store the usual "temporary" intermediate files permanently; place 6562 them in the current directory and name them based on the source 6563 file. Thus, compiling `foo.c' with `-c -save-temps' produces files 6564 `foo.i' and `foo.s', as well as `foo.o'. This creates a 6565 preprocessed `foo.i' output file even though the compiler now 6566 normally uses an integrated preprocessor. 6567 6568 When used in combination with the `-x' command-line option, 6569 `-save-temps' is sensible enough to avoid over writing an input 6570 source file with the same extension as an intermediate file. The 6571 corresponding intermediate file may be obtained by renaming the 6572 source file before using `-save-temps'. 6573 6574 If you invoke GCC in parallel, compiling several different source 6575 files that share a common base name in different subdirectories or 6576 the same source file compiled for multiple output destinations, it 6577 is likely that the different parallel compilers will interfere 6578 with each other, and overwrite the temporary files. For instance: 6579 6580 gcc -save-temps -o outdir1/foo.o indir1/foo.c& 6581 gcc -save-temps -o outdir2/foo.o indir2/foo.c& 6582 6583 may result in `foo.i' and `foo.o' being written to simultaneously 6584 by both compilers. 6585 6586`-save-temps=obj' 6587 Store the usual "temporary" intermediate files permanently. If the 6588 `-o' option is used, the temporary files are based on the object 6589 file. If the `-o' option is not used, the `-save-temps=obj' 6590 switch behaves like `-save-temps'. 6591 6592 For example: 6593 6594 gcc -save-temps=obj -c foo.c 6595 gcc -save-temps=obj -c bar.c -o dir/xbar.o 6596 gcc -save-temps=obj foobar.c -o dir2/yfoobar 6597 6598 creates `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s', 6599 `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'. 6600 6601`-time[=FILE]' 6602 Report the CPU time taken by each subprocess in the compilation 6603 sequence. For C source files, this is the compiler proper and 6604 assembler (plus the linker if linking is done). 6605 6606 Without the specification of an output file, the output looks like 6607 this: 6608 6609 # cc1 0.12 0.01 6610 # as 0.00 0.01 6611 6612 The first number on each line is the "user time", that is time 6613 spent executing the program itself. The second number is "system 6614 time", time spent executing operating system routines on behalf of 6615 the program. Both numbers are in seconds. 6616 6617 With the specification of an output file, the output is appended 6618 to the named file, and it looks like this: 6619 6620 0.12 0.01 cc1 OPTIONS 6621 0.00 0.01 as OPTIONS 6622 6623 The "user time" and the "system time" are moved before the program 6624 name, and the options passed to the program are displayed, so that 6625 one can later tell what file was being compiled, and with which 6626 options. 6627 6628`-fvar-tracking' 6629 Run variable tracking pass. It computes where variables are 6630 stored at each position in code. Better debugging information is 6631 then generated (if the debugging information format supports this 6632 information). 6633 6634 It is enabled by default when compiling with optimization (`-Os', 6635 `-O', `-O2', ...), debugging information (`-g') and the debug info 6636 format supports it. 6637 6638`-fvar-tracking-assignments' 6639 Annotate assignments to user variables early in the compilation and 6640 attempt to carry the annotations over throughout the compilation 6641 all the way to the end, in an attempt to improve debug information 6642 while optimizing. Use of `-gdwarf-4' is recommended along with it. 6643 6644 It can be enabled even if var-tracking is disabled, in which case 6645 annotations are created and maintained, but discarded at the end. 6646 By default, this flag is enabled together with `-fvar-tracking', 6647 except when selective scheduling is enabled. 6648 6649`-fvar-tracking-assignments-toggle' 6650 Toggle `-fvar-tracking-assignments', in the same way that 6651 `-gtoggle' toggles `-g'. 6652 6653`-print-file-name=LIBRARY' 6654 Print the full absolute name of the library file LIBRARY that 6655 would be used when linking--and don't do anything else. With this 6656 option, GCC does not compile or link anything; it just prints the 6657 file name. 6658 6659`-print-multi-directory' 6660 Print the directory name corresponding to the multilib selected by 6661 any other switches present in the command line. This directory is 6662 supposed to exist in `GCC_EXEC_PREFIX'. 6663 6664`-print-multi-lib' 6665 Print the mapping from multilib directory names to compiler 6666 switches that enable them. The directory name is separated from 6667 the switches by `;', and each switch starts with an `@' instead of 6668 the `-', without spaces between multiple switches. This is 6669 supposed to ease shell processing. 6670 6671`-print-multi-os-directory' 6672 Print the path to OS libraries for the selected multilib, relative 6673 to some `lib' subdirectory. If OS libraries are present in the 6674 `lib' subdirectory and no multilibs are used, this is usually just 6675 `.', if OS libraries are present in `libSUFFIX' sibling 6676 directories this prints e.g. `../lib64', `../lib' or `../lib32', 6677 or if OS libraries are present in `lib/SUBDIR' subdirectories it 6678 prints e.g. `amd64', `sparcv9' or `ev6'. 6679 6680`-print-multiarch' 6681 Print the path to OS libraries for the selected multiarch, 6682 relative to some `lib' subdirectory. 6683 6684`-print-prog-name=PROGRAM' 6685 Like `-print-file-name', but searches for a program such as `cpp'. 6686 6687`-print-libgcc-file-name' 6688 Same as `-print-file-name=libgcc.a'. 6689 6690 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 6691 you do want to link with `libgcc.a'. You can do: 6692 6693 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 6694 6695`-print-search-dirs' 6696 Print the name of the configured installation directory and a list 6697 of program and library directories `gcc' searches--and don't do 6698 anything else. 6699 6700 This is useful when `gcc' prints the error message `installation 6701 problem, cannot exec cpp0: No such file or directory'. To resolve 6702 this you either need to put `cpp0' and the other compiler 6703 components where `gcc' expects to find them, or you can set the 6704 environment variable `GCC_EXEC_PREFIX' to the directory where you 6705 installed them. Don't forget the trailing `/'. *Note Environment 6706 Variables::. 6707 6708`-print-sysroot' 6709 Print the target sysroot directory that is used during 6710 compilation. This is the target sysroot specified either at 6711 configure time or using the `--sysroot' option, possibly with an 6712 extra suffix that depends on compilation options. If no target 6713 sysroot is specified, the option prints nothing. 6714 6715`-print-sysroot-headers-suffix' 6716 Print the suffix added to the target sysroot when searching for 6717 headers, or give an error if the compiler is not configured with 6718 such a suffix--and don't do anything else. 6719 6720`-dumpmachine' 6721 Print the compiler's target machine (for example, 6722 `i686-pc-linux-gnu')--and don't do anything else. 6723 6724`-dumpversion' 6725 Print the compiler version (for example, `3.0')--and don't do 6726 anything else. 6727 6728`-dumpspecs' 6729 Print the compiler's built-in specs--and don't do anything else. 6730 (This is used when GCC itself is being built.) *Note Spec Files::. 6731 6732`-fno-eliminate-unused-debug-types' 6733 Normally, when producing DWARF 2 output, GCC avoids producing 6734 debug symbol output for types that are nowhere used in the source 6735 file being compiled. Sometimes it is useful to have GCC emit 6736 debugging information for all types declared in a compilation 6737 unit, regardless of whether or not they are actually used in that 6738 compilation unit, for example if, in the debugger, you want to 6739 cast a value to a type that is not actually used in your program 6740 (but is declared). More often, however, this results in a 6741 significant amount of wasted space. 6742 6743 6744File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 6745 67463.10 Options That Control Optimization 6747====================================== 6748 6749These options control various sorts of optimizations. 6750 6751 Without any optimization option, the compiler's goal is to reduce the 6752cost of compilation and to make debugging produce the expected results. 6753Statements are independent: if you stop the program with a breakpoint 6754between statements, you can then assign a new value to any variable or 6755change the program counter to any other statement in the function and 6756get exactly the results you expect from the source code. 6757 6758 Turning on optimization flags makes the compiler attempt to improve 6759the performance and/or code size at the expense of compilation time and 6760possibly the ability to debug the program. 6761 6762 The compiler performs optimization based on the knowledge it has of the 6763program. Compiling multiple files at once to a single output file mode 6764allows the compiler to use information gained from all of the files 6765when compiling each of them. 6766 6767 Not all optimizations are controlled directly by a flag. Only 6768optimizations that have a flag are listed in this section. 6769 6770 Most optimizations are only enabled if an `-O' level is set on the 6771command line. Otherwise they are disabled, even if individual 6772optimization flags are specified. 6773 6774 Depending on the target and how GCC was configured, a slightly 6775different set of optimizations may be enabled at each `-O' level than 6776those listed here. You can invoke GCC with `-Q --help=optimizers' to 6777find out the exact set of optimizations that are enabled at each level. 6778*Note Overall Options::, for examples. 6779 6780`-O' 6781`-O1' 6782 Optimize. Optimizing compilation takes somewhat more time, and a 6783 lot more memory for a large function. 6784 6785 With `-O', the compiler tries to reduce code size and execution 6786 time, without performing any optimizations that take a great deal 6787 of compilation time. 6788 6789 `-O' turns on the following optimization flags: 6790 -fauto-inc-dec 6791 -fbranch-count-reg 6792 -fcombine-stack-adjustments 6793 -fcompare-elim 6794 -fcprop-registers 6795 -fdce 6796 -fdefer-pop 6797 -fdelayed-branch 6798 -fdse 6799 -fforward-propagate 6800 -fguess-branch-probability 6801 -fif-conversion2 6802 -fif-conversion 6803 -finline-functions-called-once 6804 -fipa-pure-const 6805 -fipa-profile 6806 -fipa-reference 6807 -fmerge-constants 6808 -fmove-loop-invariants 6809 -fshrink-wrap 6810 -fsplit-wide-types 6811 -ftree-bit-ccp 6812 -ftree-ccp 6813 -fssa-phiopt 6814 -ftree-ch 6815 -ftree-copy-prop 6816 -ftree-copyrename 6817 -ftree-dce 6818 -ftree-dominator-opts 6819 -ftree-dse 6820 -ftree-forwprop 6821 -ftree-fre 6822 -ftree-phiprop 6823 -ftree-sink 6824 -ftree-slsr 6825 -ftree-sra 6826 -ftree-pta 6827 -ftree-ter 6828 -funit-at-a-time 6829 6830 `-O' also turns on `-fomit-frame-pointer' on machines where doing 6831 so does not interfere with debugging. 6832 6833`-O2' 6834 Optimize even more. GCC performs nearly all supported 6835 optimizations that do not involve a space-speed tradeoff. As 6836 compared to `-O', this option increases both compilation time and 6837 the performance of the generated code. 6838 6839 `-O2' turns on all optimization flags specified by `-O'. It also 6840 turns on the following optimization flags: 6841 -fthread-jumps 6842 -falign-functions -falign-jumps 6843 -falign-loops -falign-labels 6844 -fcaller-saves 6845 -fcrossjumping 6846 -fcse-follow-jumps -fcse-skip-blocks 6847 -fdelete-null-pointer-checks 6848 -fdevirtualize -fdevirtualize-speculatively 6849 -fexpensive-optimizations 6850 -fgcse -fgcse-lm 6851 -fhoist-adjacent-loads 6852 -finline-small-functions 6853 -findirect-inlining 6854 -fipa-cp 6855 -fipa-cp-alignment 6856 -fipa-sra 6857 -fipa-icf 6858 -fisolate-erroneous-paths-dereference 6859 -flra-remat 6860 -foptimize-sibling-calls 6861 -foptimize-strlen 6862 -fpartial-inlining 6863 -fpeephole2 6864 -freorder-blocks -freorder-blocks-and-partition -freorder-functions 6865 -frerun-cse-after-loop 6866 -fsched-interblock -fsched-spec 6867 -fschedule-insns -fschedule-insns2 6868 -fstrict-aliasing -fstrict-overflow 6869 -ftree-builtin-call-dce 6870 -ftree-switch-conversion -ftree-tail-merge 6871 -ftree-pre 6872 -ftree-vrp 6873 -fipa-ra 6874 6875 Please note the warning under `-fgcse' about invoking `-O2' on 6876 programs that use computed gotos. 6877 6878`-O3' 6879 Optimize yet more. `-O3' turns on all optimizations specified by 6880 `-O2' and also turns on the `-finline-functions', 6881 `-funswitch-loops', `-fpredictive-commoning', 6882 `-fgcse-after-reload', `-ftree-loop-vectorize', 6883 `-ftree-loop-distribute-patterns', `-ftree-slp-vectorize', 6884 `-fvect-cost-model', `-ftree-partial-pre' and `-fipa-cp-clone' 6885 options. 6886 6887`-O0' 6888 Reduce compilation time and make debugging produce the expected 6889 results. This is the default. 6890 6891`-Os' 6892 Optimize for size. `-Os' enables all `-O2' optimizations that do 6893 not typically increase code size. It also performs further 6894 optimizations designed to reduce code size. 6895 6896 `-Os' disables the following optimization flags: 6897 -falign-functions -falign-jumps -falign-loops 6898 -falign-labels -freorder-blocks -freorder-blocks-and-partition 6899 -fprefetch-loop-arrays 6900 6901`-Ofast' 6902 Disregard strict standards compliance. `-Ofast' enables all `-O3' 6903 optimizations. It also enables optimizations that are not valid 6904 for all standard-compliant programs. It turns on `-ffast-math' 6905 and the Fortran-specific `-fno-protect-parens' and 6906 `-fstack-arrays'. 6907 6908`-Og' 6909 Optimize debugging experience. `-Og' enables optimizations that 6910 do not interfere with debugging. It should be the optimization 6911 level of choice for the standard edit-compile-debug cycle, offering 6912 a reasonable level of optimization while maintaining fast 6913 compilation and a good debugging experience. 6914 6915 If you use multiple `-O' options, with or without level numbers, 6916 the last such option is the one that is effective. 6917 6918 Options of the form `-fFLAG' specify machine-independent flags. Most 6919flags have both positive and negative forms; the negative form of 6920`-ffoo' is `-fno-foo'. In the table below, only one of the forms is 6921listed--the one you typically use. You can figure out the other form 6922by either removing `no-' or adding it. 6923 6924 The following options control specific optimizations. They are either 6925activated by `-O' options or are related to ones that are. You can use 6926the following flags in the rare cases when "fine-tuning" of 6927optimizations to be performed is desired. 6928 6929`-fno-defer-pop' 6930 Always pop the arguments to each function call as soon as that 6931 function returns. For machines that must pop arguments after a 6932 function call, the compiler normally lets arguments accumulate on 6933 the stack for several function calls and pops them all at once. 6934 6935 Disabled at levels `-O', `-O2', `-O3', `-Os'. 6936 6937`-fforward-propagate' 6938 Perform a forward propagation pass on RTL. The pass tries to 6939 combine two instructions and checks if the result can be 6940 simplified. If loop unrolling is active, two passes are performed 6941 and the second is scheduled after loop unrolling. 6942 6943 This option is enabled by default at optimization levels `-O', 6944 `-O2', `-O3', `-Os'. 6945 6946`-ffp-contract=STYLE' 6947 `-ffp-contract=off' disables floating-point expression contraction. 6948 `-ffp-contract=fast' enables floating-point expression contraction 6949 such as forming of fused multiply-add operations if the target has 6950 native support for them. `-ffp-contract=on' enables 6951 floating-point expression contraction if allowed by the language 6952 standard. This is currently not implemented and treated equal to 6953 `-ffp-contract=off'. 6954 6955 The default is `-ffp-contract=fast'. 6956 6957`-fomit-frame-pointer' 6958 Don't keep the frame pointer in a register for functions that 6959 don't need one. This avoids the instructions to save, set up and 6960 restore frame pointers; it also makes an extra register available 6961 in many functions. *It also makes debugging impossible on some 6962 machines.* 6963 6964 On some machines, such as the VAX, this flag has no effect, because 6965 the standard calling sequence automatically handles the frame 6966 pointer and nothing is saved by pretending it doesn't exist. The 6967 machine-description macro `FRAME_POINTER_REQUIRED' controls 6968 whether a target machine supports this flag. *Note Register 6969 Usage: (gccint)Registers. 6970 6971 The default setting (when not optimizing for size) for 32-bit 6972 GNU/Linux x86 and 32-bit Darwin x86 targets is 6973 `-fomit-frame-pointer'. You can configure GCC with the 6974 `--enable-frame-pointer' configure option to change the default. 6975 6976 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6977 6978`-foptimize-sibling-calls' 6979 Optimize sibling and tail recursive calls. 6980 6981 Enabled at levels `-O2', `-O3', `-Os'. 6982 6983`-foptimize-strlen' 6984 Optimize various standard C string functions (e.g. `strlen', 6985 `strchr' or `strcpy') and their `_FORTIFY_SOURCE' counterparts 6986 into faster alternatives. 6987 6988 Enabled at levels `-O2', `-O3'. 6989 6990`-fno-inline' 6991 Do not expand any functions inline apart from those marked with 6992 the `always_inline' attribute. This is the default when not 6993 optimizing. 6994 6995 Single functions can be exempted from inlining by marking them 6996 with the `noinline' attribute. 6997 6998`-finline-small-functions' 6999 Integrate functions into their callers when their body is smaller 7000 than expected function call code (so overall size of program gets 7001 smaller). The compiler heuristically decides which functions are 7002 simple enough to be worth integrating in this way. This inlining 7003 applies to all functions, even those not declared inline. 7004 7005 Enabled at level `-O2'. 7006 7007`-findirect-inlining' 7008 Inline also indirect calls that are discovered to be known at 7009 compile time thanks to previous inlining. This option has any 7010 effect only when inlining itself is turned on by the 7011 `-finline-functions' or `-finline-small-functions' options. 7012 7013 Enabled at level `-O2'. 7014 7015`-finline-functions' 7016 Consider all functions for inlining, even if they are not declared 7017 inline. The compiler heuristically decides which functions are 7018 worth integrating in this way. 7019 7020 If all calls to a given function are integrated, and the function 7021 is declared `static', then the function is normally not output as 7022 assembler code in its own right. 7023 7024 Enabled at level `-O3'. 7025 7026`-finline-functions-called-once' 7027 Consider all `static' functions called once for inlining into their 7028 caller even if they are not marked `inline'. If a call to a given 7029 function is integrated, then the function is not output as 7030 assembler code in its own right. 7031 7032 Enabled at levels `-O1', `-O2', `-O3' and `-Os'. 7033 7034`-fearly-inlining' 7035 Inline functions marked by `always_inline' and functions whose 7036 body seems smaller than the function call overhead early before 7037 doing `-fprofile-generate' instrumentation and real inlining pass. 7038 Doing so makes profiling significantly cheaper and usually 7039 inlining faster on programs having large chains of nested wrapper 7040 functions. 7041 7042 Enabled by default. 7043 7044`-fipa-sra' 7045 Perform interprocedural scalar replacement of aggregates, removal 7046 of unused parameters and replacement of parameters passed by 7047 reference by parameters passed by value. 7048 7049 Enabled at levels `-O2', `-O3' and `-Os'. 7050 7051`-finline-limit=N' 7052 By default, GCC limits the size of functions that can be inlined. 7053 This flag allows coarse control of this limit. N is the size of 7054 functions that can be inlined in number of pseudo instructions. 7055 7056 Inlining is actually controlled by a number of parameters, which 7057 may be specified individually by using `--param NAME=VALUE'. The 7058 `-finline-limit=N' option sets some of these parameters as follows: 7059 7060 `max-inline-insns-single' 7061 is set to N/2. 7062 7063 `max-inline-insns-auto' 7064 is set to N/2. 7065 7066 See below for a documentation of the individual parameters 7067 controlling inlining and for the defaults of these parameters. 7068 7069 _Note:_ there may be no value to `-finline-limit' that results in 7070 default behavior. 7071 7072 _Note:_ pseudo instruction represents, in this particular context, 7073 an abstract measurement of function's size. In no way does it 7074 represent a count of assembly instructions and as such its exact 7075 meaning might change from one release to an another. 7076 7077`-fno-keep-inline-dllexport' 7078 This is a more fine-grained version of `-fkeep-inline-functions', 7079 which applies only to functions that are declared using the 7080 `dllexport' attribute or declspec (*Note Declaring Attributes of 7081 Functions: Function Attributes.) 7082 7083`-fkeep-inline-functions' 7084 In C, emit `static' functions that are declared `inline' into the 7085 object file, even if the function has been inlined into all of its 7086 callers. This switch does not affect functions using the `extern 7087 inline' extension in GNU C90. In C++, emit any and all inline 7088 functions into the object file. 7089 7090`-fkeep-static-consts' 7091 Emit variables declared `static const' when optimization isn't 7092 turned on, even if the variables aren't referenced. 7093 7094 GCC enables this option by default. If you want to force the 7095 compiler to check if a variable is referenced, regardless of 7096 whether or not optimization is turned on, use the 7097 `-fno-keep-static-consts' option. 7098 7099`-fmerge-constants' 7100 Attempt to merge identical constants (string constants and 7101 floating-point constants) across compilation units. 7102 7103 This option is the default for optimized compilation if the 7104 assembler and linker support it. Use `-fno-merge-constants' to 7105 inhibit this behavior. 7106 7107 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7108 7109`-fmerge-all-constants' 7110 Attempt to merge identical constants and identical variables. 7111 7112 This option implies `-fmerge-constants'. In addition to 7113 `-fmerge-constants' this considers e.g. even constant initialized 7114 arrays or initialized constant variables with integral or 7115 floating-point types. Languages like C or C++ require each 7116 variable, including multiple instances of the same variable in 7117 recursive calls, to have distinct locations, so using this option 7118 results in non-conforming behavior. 7119 7120`-fmodulo-sched' 7121 Perform swing modulo scheduling immediately before the first 7122 scheduling pass. This pass looks at innermost loops and reorders 7123 their instructions by overlapping different iterations. 7124 7125`-fmodulo-sched-allow-regmoves' 7126 Perform more aggressive SMS-based modulo scheduling with register 7127 moves allowed. By setting this flag certain anti-dependences 7128 edges are deleted, which triggers the generation of reg-moves 7129 based on the life-range analysis. This option is effective only 7130 with `-fmodulo-sched' enabled. 7131 7132`-fno-branch-count-reg' 7133 Do not use "decrement and branch" instructions on a count register, 7134 but instead generate a sequence of instructions that decrement a 7135 register, compare it against zero, then branch based upon the 7136 result. This option is only meaningful on architectures that 7137 support such instructions, which include x86, PowerPC, IA-64 and 7138 S/390. 7139 7140 Enabled by default at `-O1' and higher. 7141 7142 The default is `-fbranch-count-reg'. 7143 7144`-fno-function-cse' 7145 Do not put function addresses in registers; make each instruction 7146 that calls a constant function contain the function's address 7147 explicitly. 7148 7149 This option results in less efficient code, but some strange hacks 7150 that alter the assembler output may be confused by the 7151 optimizations performed when this option is not used. 7152 7153 The default is `-ffunction-cse' 7154 7155`-fno-zero-initialized-in-bss' 7156 If the target supports a BSS section, GCC by default puts 7157 variables that are initialized to zero into BSS. This can save 7158 space in the resulting code. 7159 7160 This option turns off this behavior because some programs 7161 explicitly rely on variables going to the data section--e.g., so 7162 that the resulting executable can find the beginning of that 7163 section and/or make assumptions based on that. 7164 7165 The default is `-fzero-initialized-in-bss'. 7166 7167`-fthread-jumps' 7168 Perform optimizations that check to see if a jump branches to a 7169 location where another comparison subsumed by the first is found. 7170 If so, the first branch is redirected to either the destination of 7171 the second branch or a point immediately following it, depending 7172 on whether the condition is known to be true or false. 7173 7174 Enabled at levels `-O2', `-O3', `-Os'. 7175 7176`-fsplit-wide-types' 7177 When using a type that occupies multiple registers, such as `long 7178 long' on a 32-bit system, split the registers apart and allocate 7179 them independently. This normally generates better code for those 7180 types, but may make debugging more difficult. 7181 7182 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7183 7184`-fcse-follow-jumps' 7185 In common subexpression elimination (CSE), scan through jump 7186 instructions when the target of the jump is not reached by any 7187 other path. For example, when CSE encounters an `if' statement 7188 with an `else' clause, CSE follows the jump when the condition 7189 tested is false. 7190 7191 Enabled at levels `-O2', `-O3', `-Os'. 7192 7193`-fcse-skip-blocks' 7194 This is similar to `-fcse-follow-jumps', but causes CSE to follow 7195 jumps that conditionally skip over blocks. When CSE encounters a 7196 simple `if' statement with no else clause, `-fcse-skip-blocks' 7197 causes CSE to follow the jump around the body of the `if'. 7198 7199 Enabled at levels `-O2', `-O3', `-Os'. 7200 7201`-frerun-cse-after-loop' 7202 Re-run common subexpression elimination after loop optimizations 7203 are performed. 7204 7205 Enabled at levels `-O2', `-O3', `-Os'. 7206 7207`-fgcse' 7208 Perform a global common subexpression elimination pass. This pass 7209 also performs global constant and copy propagation. 7210 7211 _Note:_ When compiling a program using computed gotos, a GCC 7212 extension, you may get better run-time performance if you disable 7213 the global common subexpression elimination pass by adding 7214 `-fno-gcse' to the command line. 7215 7216 Enabled at levels `-O2', `-O3', `-Os'. 7217 7218`-fgcse-lm' 7219 When `-fgcse-lm' is enabled, global common subexpression 7220 elimination attempts to move loads that are only killed by stores 7221 into themselves. This allows a loop containing a load/store 7222 sequence to be changed to a load outside the loop, and a 7223 copy/store within the loop. 7224 7225 Enabled by default when `-fgcse' is enabled. 7226 7227`-fgcse-sm' 7228 When `-fgcse-sm' is enabled, a store motion pass is run after 7229 global common subexpression elimination. This pass attempts to 7230 move stores out of loops. When used in conjunction with 7231 `-fgcse-lm', loops containing a load/store sequence can be changed 7232 to a load before the loop and a store after the loop. 7233 7234 Not enabled at any optimization level. 7235 7236`-fgcse-las' 7237 When `-fgcse-las' is enabled, the global common subexpression 7238 elimination pass eliminates redundant loads that come after stores 7239 to the same memory location (both partial and full redundancies). 7240 7241 Not enabled at any optimization level. 7242 7243`-fgcse-after-reload' 7244 When `-fgcse-after-reload' is enabled, a redundant load elimination 7245 pass is performed after reload. The purpose of this pass is to 7246 clean up redundant spilling. 7247 7248`-faggressive-loop-optimizations' 7249 This option tells the loop optimizer to use language constraints to 7250 derive bounds for the number of iterations of a loop. This 7251 assumes that loop code does not invoke undefined behavior by for 7252 example causing signed integer overflows or out-of-bound array 7253 accesses. The bounds for the number of iterations of a loop are 7254 used to guide loop unrolling and peeling and loop exit test 7255 optimizations. This option is enabled by default. 7256 7257`-funsafe-loop-optimizations' 7258 This option tells the loop optimizer to assume that loop indices 7259 do not overflow, and that loops with nontrivial exit condition are 7260 not infinite. This enables a wider range of loop optimizations 7261 even if the loop optimizer itself cannot prove that these 7262 assumptions are valid. If you use `-Wunsafe-loop-optimizations', 7263 the compiler warns you if it finds this kind of loop. 7264 7265`-fcrossjumping' 7266 Perform cross-jumping transformation. This transformation unifies 7267 equivalent code and saves code size. The resulting code may or 7268 may not perform better than without cross-jumping. 7269 7270 Enabled at levels `-O2', `-O3', `-Os'. 7271 7272`-fauto-inc-dec' 7273 Combine increments or decrements of addresses with memory accesses. 7274 This pass is always skipped on architectures that do not have 7275 instructions to support this. Enabled by default at `-O' and 7276 higher on architectures that support this. 7277 7278`-fdce' 7279 Perform dead code elimination (DCE) on RTL. Enabled by default at 7280 `-O' and higher. 7281 7282`-fdse' 7283 Perform dead store elimination (DSE) on RTL. Enabled by default 7284 at `-O' and higher. 7285 7286`-fif-conversion' 7287 Attempt to transform conditional jumps into branch-less 7288 equivalents. This includes use of conditional moves, min, max, 7289 set flags and abs instructions, and some tricks doable by standard 7290 arithmetics. The use of conditional execution on chips where it 7291 is available is controlled by `-fif-conversion2'. 7292 7293 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7294 7295`-fif-conversion2' 7296 Use conditional execution (where available) to transform 7297 conditional jumps into branch-less equivalents. 7298 7299 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7300 7301`-fdeclone-ctor-dtor' 7302 The C++ ABI requires multiple entry points for constructors and 7303 destructors: one for a base subobject, one for a complete object, 7304 and one for a virtual destructor that calls operator delete 7305 afterwards. For a hierarchy with virtual bases, the base and 7306 complete variants are clones, which means two copies of the 7307 function. With this option, the base and complete variants are 7308 changed to be thunks that call a common implementation. 7309 7310 Enabled by `-Os'. 7311 7312`-fdelete-null-pointer-checks' 7313 Assume that programs cannot safely dereference null pointers, and 7314 that no code or data element resides there. This enables simple 7315 constant folding optimizations at all optimization levels. In 7316 addition, other optimization passes in GCC use this flag to 7317 control global dataflow analyses that eliminate useless checks for 7318 null pointers; these assume that if a pointer is checked after it 7319 has already been dereferenced, it cannot be null. 7320 7321 Note however that in some environments this assumption is not true. 7322 Use `-fno-delete-null-pointer-checks' to disable this optimization 7323 for programs that depend on that behavior. 7324 7325 Some targets, especially embedded ones, disable this option at all 7326 levels. Otherwise it is enabled at all levels: `-O0', `-O1', 7327 `-O2', `-O3', `-Os'. Passes that use the information are enabled 7328 independently at different optimization levels. 7329 7330`-fdevirtualize' 7331 Attempt to convert calls to virtual functions to direct calls. 7332 This is done both within a procedure and interprocedurally as part 7333 of indirect inlining (`-findirect-inlining') and interprocedural 7334 constant propagation (`-fipa-cp'). Enabled at levels `-O2', 7335 `-O3', `-Os'. 7336 7337`-fdevirtualize-speculatively' 7338 Attempt to convert calls to virtual functions to speculative 7339 direct calls. Based on the analysis of the type inheritance 7340 graph, determine for a given call the set of likely targets. If 7341 the set is small, preferably of size 1, change the call into a 7342 conditional deciding between direct and indirect calls. The 7343 speculative calls enable more optimizations, such as inlining. 7344 When they seem useless after further optimization, they are 7345 converted back into original form. 7346 7347`-fdevirtualize-at-ltrans' 7348 Stream extra information needed for aggressive devirtualization 7349 when running the link-time optimizer in local transformation mode. 7350 This option enables more devirtualization but significantly 7351 increases the size of streamed data. For this reason it is 7352 disabled by default. 7353 7354`-fexpensive-optimizations' 7355 Perform a number of minor optimizations that are relatively 7356 expensive. 7357 7358 Enabled at levels `-O2', `-O3', `-Os'. 7359 7360`-free' 7361 Attempt to remove redundant extension instructions. This is 7362 especially helpful for the x86-64 architecture, which implicitly 7363 zero-extends in 64-bit registers after writing to their lower 7364 32-bit half. 7365 7366 Enabled for Alpha, AArch64 and x86 at levels `-O2', `-O3', `-Os'. 7367 7368`-fno-lifetime-dse' 7369 In C++ the value of an object is only affected by changes within 7370 its lifetime: when the constructor begins, the object has an 7371 indeterminate value, and any changes during the lifetime of the 7372 object are dead when the object is destroyed. Normally dead store 7373 elimination will take advantage of this; if your code relies on 7374 the value of the object storage persisting beyond the lifetime of 7375 the object, you can use this flag to disable this optimization. 7376 7377`-flive-range-shrinkage' 7378 Attempt to decrease register pressure through register live range 7379 shrinkage. This is helpful for fast processors with small or 7380 moderate size register sets. 7381 7382`-fira-algorithm=ALGORITHM' 7383 Use the specified coloring algorithm for the integrated register 7384 allocator. The ALGORITHM argument can be `priority', which 7385 specifies Chow's priority coloring, or `CB', which specifies 7386 Chaitin-Briggs coloring. Chaitin-Briggs coloring is not 7387 implemented for all architectures, but for those targets that do 7388 support it, it is the default because it generates better code. 7389 7390`-fira-region=REGION' 7391 Use specified regions for the integrated register allocator. The 7392 REGION argument should be one of the following: 7393 7394 `all' 7395 Use all loops as register allocation regions. This can give 7396 the best results for machines with a small and/or irregular 7397 register set. 7398 7399 `mixed' 7400 Use all loops except for loops with small register pressure 7401 as the regions. This value usually gives the best results in 7402 most cases and for most architectures, and is enabled by 7403 default when compiling with optimization for speed (`-O', 7404 `-O2', ...). 7405 7406 `one' 7407 Use all functions as a single region. This typically results 7408 in the smallest code size, and is enabled by default for 7409 `-Os' or `-O0'. 7410 7411 7412`-fira-hoist-pressure' 7413 Use IRA to evaluate register pressure in the code hoisting pass for 7414 decisions to hoist expressions. This option usually results in 7415 smaller code, but it can slow the compiler down. 7416 7417 This option is enabled at level `-Os' for all targets. 7418 7419`-fira-loop-pressure' 7420 Use IRA to evaluate register pressure in loops for decisions to 7421 move loop invariants. This option usually results in generation 7422 of faster and smaller code on machines with large register files 7423 (>= 32 registers), but it can slow the compiler down. 7424 7425 This option is enabled at level `-O3' for some targets. 7426 7427`-fno-ira-share-save-slots' 7428 Disable sharing of stack slots used for saving call-used hard 7429 registers living through a call. Each hard register gets a 7430 separate stack slot, and as a result function stack frames are 7431 larger. 7432 7433`-fno-ira-share-spill-slots' 7434 Disable sharing of stack slots allocated for pseudo-registers. 7435 Each pseudo-register that does not get a hard register gets a 7436 separate stack slot, and as a result function stack frames are 7437 larger. 7438 7439`-fira-verbose=N' 7440 Control the verbosity of the dump file for the integrated register 7441 allocator. The default value is 5. If the value N is greater or 7442 equal to 10, the dump output is sent to stderr using the same 7443 format as N minus 10. 7444 7445`-flra-remat' 7446 Enable CFG-sensitive rematerialization in LRA. Instead of loading 7447 values of spilled pseudos, LRA tries to rematerialize (recalculate) 7448 values if it is profitable. 7449 7450 Enabled at levels `-O2', `-O3', `-Os'. 7451 7452`-fdelayed-branch' 7453 If supported for the target machine, attempt to reorder 7454 instructions to exploit instruction slots available after delayed 7455 branch instructions. 7456 7457 Enabled at levels `-O', `-O2', `-O3', `-Os'. 7458 7459`-fschedule-insns' 7460 If supported for the target machine, attempt to reorder 7461 instructions to eliminate execution stalls due to required data 7462 being unavailable. This helps machines that have slow floating 7463 point or memory load instructions by allowing other instructions 7464 to be issued until the result of the load or floating-point 7465 instruction is required. 7466 7467 Enabled at levels `-O2', `-O3'. 7468 7469`-fschedule-insns2' 7470 Similar to `-fschedule-insns', but requests an additional pass of 7471 instruction scheduling after register allocation has been done. 7472 This is especially useful on machines with a relatively small 7473 number of registers and where memory load instructions take more 7474 than one cycle. 7475 7476 Enabled at levels `-O2', `-O3', `-Os'. 7477 7478`-fno-sched-interblock' 7479 Don't schedule instructions across basic blocks. This is normally 7480 enabled by default when scheduling before register allocation, i.e. 7481 with `-fschedule-insns' or at `-O2' or higher. 7482 7483`-fno-sched-spec' 7484 Don't allow speculative motion of non-load instructions. This is 7485 normally enabled by default when scheduling before register 7486 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 7487 7488`-fsched-pressure' 7489 Enable register pressure sensitive insn scheduling before register 7490 allocation. This only makes sense when scheduling before register 7491 allocation is enabled, i.e. with `-fschedule-insns' or at `-O2' or 7492 higher. Usage of this option can improve the generated code and 7493 decrease its size by preventing register pressure increase above 7494 the number of available hard registers and subsequent spills in 7495 register allocation. 7496 7497`-fsched-spec-load' 7498 Allow speculative motion of some load instructions. This only 7499 makes sense when scheduling before register allocation, i.e. with 7500 `-fschedule-insns' or at `-O2' or higher. 7501 7502`-fsched-spec-load-dangerous' 7503 Allow speculative motion of more load instructions. This only 7504 makes sense when scheduling before register allocation, i.e. with 7505 `-fschedule-insns' or at `-O2' or higher. 7506 7507`-fsched-stalled-insns' 7508`-fsched-stalled-insns=N' 7509 Define how many insns (if any) can be moved prematurely from the 7510 queue of stalled insns into the ready list during the second 7511 scheduling pass. `-fno-sched-stalled-insns' means that no insns 7512 are moved prematurely, `-fsched-stalled-insns=0' means there is no 7513 limit on how many queued insns can be moved prematurely. 7514 `-fsched-stalled-insns' without a value is equivalent to 7515 `-fsched-stalled-insns=1'. 7516 7517`-fsched-stalled-insns-dep' 7518`-fsched-stalled-insns-dep=N' 7519 Define how many insn groups (cycles) are examined for a dependency 7520 on a stalled insn that is a candidate for premature removal from 7521 the queue of stalled insns. This has an effect only during the 7522 second scheduling pass, and only if `-fsched-stalled-insns' is 7523 used. `-fno-sched-stalled-insns-dep' is equivalent to 7524 `-fsched-stalled-insns-dep=0'. `-fsched-stalled-insns-dep' 7525 without a value is equivalent to `-fsched-stalled-insns-dep=1'. 7526 7527`-fsched2-use-superblocks' 7528 When scheduling after register allocation, use superblock 7529 scheduling. This allows motion across basic block boundaries, 7530 resulting in faster schedules. This option is experimental, as 7531 not all machine descriptions used by GCC model the CPU closely 7532 enough to avoid unreliable results from the algorithm. 7533 7534 This only makes sense when scheduling after register allocation, 7535 i.e. with `-fschedule-insns2' or at `-O2' or higher. 7536 7537`-fsched-group-heuristic' 7538 Enable the group heuristic in the scheduler. This heuristic favors 7539 the instruction that belongs to a schedule group. This is enabled 7540 by default when scheduling is enabled, i.e. with `-fschedule-insns' 7541 or `-fschedule-insns2' or at `-O2' or higher. 7542 7543`-fsched-critical-path-heuristic' 7544 Enable the critical-path heuristic in the scheduler. This 7545 heuristic favors instructions on the critical path. This is 7546 enabled by default when scheduling is enabled, i.e. with 7547 `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher. 7548 7549`-fsched-spec-insn-heuristic' 7550 Enable the speculative instruction heuristic in the scheduler. 7551 This heuristic favors speculative instructions with greater 7552 dependency weakness. This is enabled by default when scheduling 7553 is enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' 7554 or at `-O2' or higher. 7555 7556`-fsched-rank-heuristic' 7557 Enable the rank heuristic in the scheduler. This heuristic favors 7558 the instruction belonging to a basic block with greater size or 7559 frequency. This is enabled by default when scheduling is enabled, 7560 i.e. with `-fschedule-insns' or `-fschedule-insns2' or at `-O2' 7561 or higher. 7562 7563`-fsched-last-insn-heuristic' 7564 Enable the last-instruction heuristic in the scheduler. This 7565 heuristic favors the instruction that is less dependent on the 7566 last instruction scheduled. This is enabled by default when 7567 scheduling is enabled, i.e. with `-fschedule-insns' or 7568 `-fschedule-insns2' or at `-O2' or higher. 7569 7570`-fsched-dep-count-heuristic' 7571 Enable the dependent-count heuristic in the scheduler. This 7572 heuristic favors the instruction that has more instructions 7573 depending on it. This is enabled by default when scheduling is 7574 enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' or 7575 at `-O2' or higher. 7576 7577`-freschedule-modulo-scheduled-loops' 7578 Modulo scheduling is performed before traditional scheduling. If 7579 a loop is modulo scheduled, later scheduling passes may change its 7580 schedule. Use this option to control that behavior. 7581 7582`-fselective-scheduling' 7583 Schedule instructions using selective scheduling algorithm. 7584 Selective scheduling runs instead of the first scheduler pass. 7585 7586`-fselective-scheduling2' 7587 Schedule instructions using selective scheduling algorithm. 7588 Selective scheduling runs instead of the second scheduler pass. 7589 7590`-fsel-sched-pipelining' 7591 Enable software pipelining of innermost loops during selective 7592 scheduling. This option has no effect unless one of 7593 `-fselective-scheduling' or `-fselective-scheduling2' is turned on. 7594 7595`-fsel-sched-pipelining-outer-loops' 7596 When pipelining loops during selective scheduling, also pipeline 7597 outer loops. This option has no effect unless 7598 `-fsel-sched-pipelining' is turned on. 7599 7600`-fsemantic-interposition' 7601 Some object formats, like ELF, allow interposing of symbols by the 7602 dynamic linker. This means that for symbols exported from the 7603 DSO, the compiler cannot perform interprocedural propagation, 7604 inlining and other optimizations in anticipation that the function 7605 or variable in question may change. While this feature is useful, 7606 for example, to rewrite memory allocation functions by a debugging 7607 implementation, it is expensive in the terms of code quality. 7608 With `-fno-semantic-interposition' the compiler assumes that if 7609 interposition happens for functions the overwriting function will 7610 have precisely the same semantics (and side effects). Similarly 7611 if interposition happens for variables, the constructor of the 7612 variable will be the same. The flag has no effect for functions 7613 explicitly declared inline (where it is never allowed for 7614 interposition to change semantics) and for symbols explicitly 7615 declared weak. 7616 7617`-fshrink-wrap' 7618 Emit function prologues only before parts of the function that 7619 need it, rather than at the top of the function. This flag is 7620 enabled by default at `-O' and higher. 7621 7622`-fcaller-saves' 7623 Enable allocation of values to registers that are clobbered by 7624 function calls, by emitting extra instructions to save and restore 7625 the registers around such calls. Such allocation is done only 7626 when it seems to result in better code. 7627 7628 This option is always enabled by default on certain machines, 7629 usually those which have no call-preserved registers to use 7630 instead. 7631 7632 Enabled at levels `-O2', `-O3', `-Os'. 7633 7634`-fcombine-stack-adjustments' 7635 Tracks stack adjustments (pushes and pops) and stack memory 7636 references and then tries to find ways to combine them. 7637 7638 Enabled by default at `-O1' and higher. 7639 7640`-fipa-ra' 7641 Use caller save registers for allocation if those registers are 7642 not used by any called function. In that case it is not necessary 7643 to save and restore them around calls. This is only possible if 7644 called functions are part of same compilation unit as current 7645 function and they are compiled before it. 7646 7647 Enabled at levels `-O2', `-O3', `-Os'. 7648 7649`-fconserve-stack' 7650 Attempt to minimize stack usage. The compiler attempts to use less 7651 stack space, even if that makes the program slower. This option 7652 implies setting the `large-stack-frame' parameter to 100 and the 7653 `large-stack-frame-growth' parameter to 400. 7654 7655`-ftree-reassoc' 7656 Perform reassociation on trees. This flag is enabled by default 7657 at `-O' and higher. 7658 7659`-ftree-pre' 7660 Perform partial redundancy elimination (PRE) on trees. This flag 7661 is enabled by default at `-O2' and `-O3'. 7662 7663`-ftree-partial-pre' 7664 Make partial redundancy elimination (PRE) more aggressive. This 7665 flag is enabled by default at `-O3'. 7666 7667`-ftree-forwprop' 7668 Perform forward propagation on trees. This flag is enabled by 7669 default at `-O' and higher. 7670 7671`-ftree-fre' 7672 Perform full redundancy elimination (FRE) on trees. The difference 7673 between FRE and PRE is that FRE only considers expressions that 7674 are computed on all paths leading to the redundant computation. 7675 This analysis is faster than PRE, though it exposes fewer 7676 redundancies. This flag is enabled by default at `-O' and higher. 7677 7678`-ftree-phiprop' 7679 Perform hoisting of loads from conditional pointers on trees. This 7680 pass is enabled by default at `-O' and higher. 7681 7682`-fhoist-adjacent-loads' 7683 Speculatively hoist loads from both branches of an if-then-else if 7684 the loads are from adjacent locations in the same structure and 7685 the target architecture has a conditional move instruction. This 7686 flag is enabled by default at `-O2' and higher. 7687 7688`-ftree-copy-prop' 7689 Perform copy propagation on trees. This pass eliminates 7690 unnecessary copy operations. This flag is enabled by default at 7691 `-O' and higher. 7692 7693`-fipa-pure-const' 7694 Discover which functions are pure or constant. Enabled by default 7695 at `-O' and higher. 7696 7697`-fipa-reference' 7698 Discover which static variables do not escape the compilation unit. 7699 Enabled by default at `-O' and higher. 7700 7701`-fipa-pta' 7702 Perform interprocedural pointer analysis and interprocedural 7703 modification and reference analysis. This option can cause 7704 excessive memory and compile-time usage on large compilation 7705 units. It is not enabled by default at any optimization level. 7706 7707`-fipa-profile' 7708 Perform interprocedural profile propagation. The functions called 7709 only from cold functions are marked as cold. Also functions 7710 executed once (such as `cold', `noreturn', static constructors or 7711 destructors) are identified. Cold functions and loop less parts of 7712 functions executed once are then optimized for size. Enabled by 7713 default at `-O' and higher. 7714 7715`-fipa-cp' 7716 Perform interprocedural constant propagation. This optimization 7717 analyzes the program to determine when values passed to functions 7718 are constants and then optimizes accordingly. This optimization 7719 can substantially increase performance if the application has 7720 constants passed to functions. This flag is enabled by default at 7721 `-O2', `-Os' and `-O3'. 7722 7723`-fipa-cp-clone' 7724 Perform function cloning to make interprocedural constant 7725 propagation stronger. When enabled, interprocedural constant 7726 propagation performs function cloning when externally visible 7727 function can be called with constant arguments. Because this 7728 optimization can create multiple copies of functions, it may 7729 significantly increase code size (see `--param 7730 ipcp-unit-growth=VALUE'). This flag is enabled by default at 7731 `-O3'. 7732 7733`-fipa-cp-alignment' 7734 When enabled, this optimization propagates alignment of function 7735 parameters to support better vectorization and string operations. 7736 7737 This flag is enabled by default at `-O2' and `-Os'. It requires 7738 that `-fipa-cp' is enabled. 7739 7740`-fipa-icf' 7741 Perform Identical Code Folding for functions and read-only 7742 variables. The optimization reduces code size and may disturb 7743 unwind stacks by replacing a function by equivalent one with a 7744 different name. The optimization works more effectively with link 7745 time optimization enabled. 7746 7747 Nevertheless the behavior is similar to Gold Linker ICF 7748 optimization, GCC ICF works on different levels and thus the 7749 optimizations are not same - there are equivalences that are found 7750 only by GCC and equivalences found only by Gold. 7751 7752 This flag is enabled by default at `-O2' and `-Os'. 7753 7754`-fisolate-erroneous-paths-dereference' 7755 Detect paths that trigger erroneous or undefined behavior due to 7756 dereferencing a null pointer. Isolate those paths from the main 7757 control flow and turn the statement with erroneous or undefined 7758 behavior into a trap. This flag is enabled by default at `-O2' 7759 and higher. 7760 7761`-fisolate-erroneous-paths-attribute' 7762 Detect paths that trigger erroneous or undefined behavior due a 7763 null value being used in a way forbidden by a `returns_nonnull' or 7764 `nonnull' attribute. Isolate those paths from the main control 7765 flow and turn the statement with erroneous or undefined behavior 7766 into a trap. This is not currently enabled, but may be enabled by 7767 `-O2' in the future. 7768 7769`-ftree-sink' 7770 Perform forward store motion on trees. This flag is enabled by 7771 default at `-O' and higher. 7772 7773`-ftree-bit-ccp' 7774 Perform sparse conditional bit constant propagation on trees and 7775 propagate pointer alignment information. This pass only operates 7776 on local scalar variables and is enabled by default at `-O' and 7777 higher. It requires that `-ftree-ccp' is enabled. 7778 7779`-ftree-ccp' 7780 Perform sparse conditional constant propagation (CCP) on trees. 7781 This pass only operates on local scalar variables and is enabled 7782 by default at `-O' and higher. 7783 7784`-fssa-phiopt' 7785 Perform pattern matching on SSA PHI nodes to optimize conditional 7786 code. This pass is enabled by default at `-O' and higher. 7787 7788`-ftree-switch-conversion' 7789 Perform conversion of simple initializations in a switch to 7790 initializations from a scalar array. This flag is enabled by 7791 default at `-O2' and higher. 7792 7793`-ftree-tail-merge' 7794 Look for identical code sequences. When found, replace one with a 7795 jump to the other. This optimization is known as tail merging or 7796 cross jumping. This flag is enabled by default at `-O2' and 7797 higher. The compilation time in this pass can be limited using 7798 `max-tail-merge-comparisons' parameter and 7799 `max-tail-merge-iterations' parameter. 7800 7801`-ftree-dce' 7802 Perform dead code elimination (DCE) on trees. This flag is 7803 enabled by default at `-O' and higher. 7804 7805`-ftree-builtin-call-dce' 7806 Perform conditional dead code elimination (DCE) for calls to 7807 built-in functions that may set `errno' but are otherwise 7808 side-effect free. This flag is enabled by default at `-O2' and 7809 higher if `-Os' is not also specified. 7810 7811`-ftree-dominator-opts' 7812 Perform a variety of simple scalar cleanups (constant/copy 7813 propagation, redundancy elimination, range propagation and 7814 expression simplification) based on a dominator tree traversal. 7815 This also performs jump threading (to reduce jumps to jumps). This 7816 flag is enabled by default at `-O' and higher. 7817 7818`-ftree-dse' 7819 Perform dead store elimination (DSE) on trees. A dead store is a 7820 store into a memory location that is later overwritten by another 7821 store without any intervening loads. In this case the earlier 7822 store can be deleted. This flag is enabled by default at `-O' and 7823 higher. 7824 7825`-ftree-ch' 7826 Perform loop header copying on trees. This is beneficial since it 7827 increases effectiveness of code motion optimizations. It also 7828 saves one jump. This flag is enabled by default at `-O' and 7829 higher. It is not enabled for `-Os', since it usually increases 7830 code size. 7831 7832`-ftree-loop-optimize' 7833 Perform loop optimizations on trees. This flag is enabled by 7834 default at `-O' and higher. 7835 7836`-ftree-loop-linear' 7837 Perform loop interchange transformations on tree. Same as 7838 `-floop-interchange'. To use this code transformation, GCC has to 7839 be configured with `--with-isl' to enable the Graphite loop 7840 transformation infrastructure. 7841 7842`-floop-interchange' 7843 Perform loop interchange transformations on loops. Interchanging 7844 two nested loops switches the inner and outer loops. For example, 7845 given a loop like: 7846 DO J = 1, M 7847 DO I = 1, N 7848 A(J, I) = A(J, I) * C 7849 ENDDO 7850 ENDDO 7851 loop interchange transforms the loop as if it were written: 7852 DO I = 1, N 7853 DO J = 1, M 7854 A(J, I) = A(J, I) * C 7855 ENDDO 7856 ENDDO 7857 which can be beneficial when `N' is larger than the caches, 7858 because in Fortran, the elements of an array are stored in memory 7859 contiguously by column, and the original loop iterates over rows, 7860 potentially creating at each access a cache miss. This 7861 optimization applies to all the languages supported by GCC and is 7862 not limited to Fortran. To use this code transformation, GCC has 7863 to be configured with `--with-isl' to enable the Graphite loop 7864 transformation infrastructure. 7865 7866`-floop-strip-mine' 7867 Perform loop strip mining transformations on loops. Strip mining 7868 splits a loop into two nested loops. The outer loop has strides 7869 equal to the strip size and the inner loop has strides of the 7870 original loop within a strip. The strip length can be changed 7871 using the `loop-block-tile-size' parameter. For example, given a 7872 loop like: 7873 DO I = 1, N 7874 A(I) = A(I) + C 7875 ENDDO 7876 loop strip mining transforms the loop as if it were written: 7877 DO II = 1, N, 51 7878 DO I = II, min (II + 50, N) 7879 A(I) = A(I) + C 7880 ENDDO 7881 ENDDO 7882 This optimization applies to all the languages supported by GCC 7883 and is not limited to Fortran. To use this code transformation, 7884 GCC has to be configured with `--with-isl' to enable the Graphite 7885 loop transformation infrastructure. 7886 7887`-floop-block' 7888 Perform loop blocking transformations on loops. Blocking strip 7889 mines each loop in the loop nest such that the memory accesses of 7890 the element loops fit inside caches. The strip length can be 7891 changed using the `loop-block-tile-size' parameter. For example, 7892 given a loop like: 7893 DO I = 1, N 7894 DO J = 1, M 7895 A(J, I) = B(I) + C(J) 7896 ENDDO 7897 ENDDO 7898 loop blocking transforms the loop as if it were written: 7899 DO II = 1, N, 51 7900 DO JJ = 1, M, 51 7901 DO I = II, min (II + 50, N) 7902 DO J = JJ, min (JJ + 50, M) 7903 A(J, I) = B(I) + C(J) 7904 ENDDO 7905 ENDDO 7906 ENDDO 7907 ENDDO 7908 which can be beneficial when `M' is larger than the caches, 7909 because the innermost loop iterates over a smaller amount of data 7910 which can be kept in the caches. This optimization applies to all 7911 the languages supported by GCC and is not limited to Fortran. To 7912 use this code transformation, GCC has to be configured with 7913 `--with-isl' to enable the Graphite loop transformation 7914 infrastructure. 7915 7916`-fgraphite-identity' 7917 Enable the identity transformation for graphite. For every SCoP 7918 we generate the polyhedral representation and transform it back to 7919 gimple. Using `-fgraphite-identity' we can check the costs or 7920 benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation. Some 7921 minimal optimizations are also performed by the code generator 7922 ISL, like index splitting and dead code elimination in loops. 7923 7924`-floop-nest-optimize' 7925 Enable the ISL based loop nest optimizer. This is a generic loop 7926 nest optimizer based on the Pluto optimization algorithms. It 7927 calculates a loop structure optimized for data-locality and 7928 parallelism. This option is experimental. 7929 7930`-floop-unroll-and-jam' 7931 Enable unroll and jam for the ISL based loop nest optimizer. The 7932 unroll factor can be changed using the `loop-unroll-jam-size' 7933 parameter. The unrolled dimension (counting from the most inner 7934 one) can be changed using the `loop-unroll-jam-depth' parameter. 7935 . 7936 7937`-floop-parallelize-all' 7938 Use the Graphite data dependence analysis to identify loops that 7939 can be parallelized. Parallelize all the loops that can be 7940 analyzed to not contain loop carried dependences without checking 7941 that it is profitable to parallelize the loops. 7942 7943`-fcheck-data-deps' 7944 Compare the results of several data dependence analyzers. This 7945 option is used for debugging the data dependence analyzers. 7946 7947`-ftree-loop-if-convert' 7948 Attempt to transform conditional jumps in the innermost loops to 7949 branch-less equivalents. The intent is to remove control-flow from 7950 the innermost loops in order to improve the ability of the 7951 vectorization pass to handle these loops. This is enabled by 7952 default if vectorization is enabled. 7953 7954`-ftree-loop-if-convert-stores' 7955 Attempt to also if-convert conditional jumps containing memory 7956 writes. This transformation can be unsafe for multi-threaded 7957 programs as it transforms conditional memory writes into 7958 unconditional memory writes. For example, 7959 for (i = 0; i < N; i++) 7960 if (cond) 7961 A[i] = expr; 7962 is transformed to 7963 for (i = 0; i < N; i++) 7964 A[i] = cond ? expr : A[i]; 7965 potentially producing data races. 7966 7967`-ftree-loop-distribution' 7968 Perform loop distribution. This flag can improve cache 7969 performance on big loop bodies and allow further loop 7970 optimizations, like parallelization or vectorization, to take 7971 place. For example, the loop 7972 DO I = 1, N 7973 A(I) = B(I) + C 7974 D(I) = E(I) * F 7975 ENDDO 7976 is transformed to 7977 DO I = 1, N 7978 A(I) = B(I) + C 7979 ENDDO 7980 DO I = 1, N 7981 D(I) = E(I) * F 7982 ENDDO 7983 7984`-ftree-loop-distribute-patterns' 7985 Perform loop distribution of patterns that can be code generated 7986 with calls to a library. This flag is enabled by default at `-O3'. 7987 7988 This pass distributes the initialization loops and generates a 7989 call to memset zero. For example, the loop 7990 DO I = 1, N 7991 A(I) = 0 7992 B(I) = A(I) + I 7993 ENDDO 7994 is transformed to 7995 DO I = 1, N 7996 A(I) = 0 7997 ENDDO 7998 DO I = 1, N 7999 B(I) = A(I) + I 8000 ENDDO 8001 and the initialization loop is transformed into a call to memset 8002 zero. 8003 8004`-ftree-loop-im' 8005 Perform loop invariant motion on trees. This pass moves only 8006 invariants that are hard to handle at RTL level (function calls, 8007 operations that expand to nontrivial sequences of insns). With 8008 `-funswitch-loops' it also moves operands of conditions that are 8009 invariant out of the loop, so that we can use just trivial 8010 invariantness analysis in loop unswitching. The pass also includes 8011 store motion. 8012 8013`-ftree-loop-ivcanon' 8014 Create a canonical counter for number of iterations in loops for 8015 which determining number of iterations requires complicated 8016 analysis. Later optimizations then may determine the number 8017 easily. Useful especially in connection with unrolling. 8018 8019`-fivopts' 8020 Perform induction variable optimizations (strength reduction, 8021 induction variable merging and induction variable elimination) on 8022 trees. 8023 8024`-ftree-parallelize-loops=n' 8025 Parallelize loops, i.e., split their iteration space to run in n 8026 threads. This is only possible for loops whose iterations are 8027 independent and can be arbitrarily reordered. The optimization is 8028 only profitable on multiprocessor machines, for loops that are 8029 CPU-intensive, rather than constrained e.g. by memory bandwidth. 8030 This option implies `-pthread', and thus is only supported on 8031 targets that have support for `-pthread'. 8032 8033`-ftree-pta' 8034 Perform function-local points-to analysis on trees. This flag is 8035 enabled by default at `-O' and higher. 8036 8037`-ftree-sra' 8038 Perform scalar replacement of aggregates. This pass replaces 8039 structure references with scalars to prevent committing structures 8040 to memory too early. This flag is enabled by default at `-O' and 8041 higher. 8042 8043`-ftree-copyrename' 8044 Perform copy renaming on trees. This pass attempts to rename 8045 compiler temporaries to other variables at copy locations, usually 8046 resulting in variable names which more closely resemble the 8047 original variables. This flag is enabled by default at `-O' and 8048 higher. 8049 8050`-ftree-coalesce-inlined-vars' 8051 Tell the copyrename pass (see `-ftree-copyrename') to attempt to 8052 combine small user-defined variables too, but only if they are 8053 inlined from other functions. It is a more limited form of 8054 `-ftree-coalesce-vars'. This may harm debug information of such 8055 inlined variables, but it keeps variables of the inlined-into 8056 function apart from each other, such that they are more likely to 8057 contain the expected values in a debugging session. 8058 8059`-ftree-coalesce-vars' 8060 Tell the copyrename pass (see `-ftree-copyrename') to attempt to 8061 combine small user-defined variables too, instead of just compiler 8062 temporaries. This may severely limit the ability to debug an 8063 optimized program compiled with `-fno-var-tracking-assignments'. 8064 In the negated form, this flag prevents SSA coalescing of user 8065 variables, including inlined ones. This option is enabled by 8066 default. 8067 8068`-ftree-ter' 8069 Perform temporary expression replacement during the SSA->normal 8070 phase. Single use/single def temporaries are replaced at their 8071 use location with their defining expression. This results in 8072 non-GIMPLE code, but gives the expanders much more complex trees 8073 to work on resulting in better RTL generation. This is enabled by 8074 default at `-O' and higher. 8075 8076`-ftree-slsr' 8077 Perform straight-line strength reduction on trees. This 8078 recognizes related expressions involving multiplications and 8079 replaces them by less expensive calculations when possible. This 8080 is enabled by default at `-O' and higher. 8081 8082`-ftree-vectorize' 8083 Perform vectorization on trees. This flag enables 8084 `-ftree-loop-vectorize' and `-ftree-slp-vectorize' if not 8085 explicitly specified. 8086 8087`-ftree-loop-vectorize' 8088 Perform loop vectorization on trees. This flag is enabled by 8089 default at `-O3' and when `-ftree-vectorize' is enabled. 8090 8091`-ftree-slp-vectorize' 8092 Perform basic block vectorization on trees. This flag is enabled 8093 by default at `-O3' and when `-ftree-vectorize' is enabled. 8094 8095`-fvect-cost-model=MODEL' 8096 Alter the cost model used for vectorization. The MODEL argument 8097 should be one of `unlimited', `dynamic' or `cheap'. With the 8098 `unlimited' model the vectorized code-path is assumed to be 8099 profitable while with the `dynamic' model a runtime check guards 8100 the vectorized code-path to enable it only for iteration counts 8101 that will likely execute faster than when executing the original 8102 scalar loop. The `cheap' model disables vectorization of loops 8103 where doing so would be cost prohibitive for example due to 8104 required runtime checks for data dependence or alignment but 8105 otherwise is equal to the `dynamic' model. The default cost model 8106 depends on other optimization flags and is either `dynamic' or 8107 `cheap'. 8108 8109`-fsimd-cost-model=MODEL' 8110 Alter the cost model used for vectorization of loops marked with 8111 the OpenMP or Cilk Plus simd directive. The MODEL argument should 8112 be one of `unlimited', `dynamic', `cheap'. All values of MODEL 8113 have the same meaning as described in `-fvect-cost-model' and by 8114 default a cost model defined with `-fvect-cost-model' is used. 8115 8116`-ftree-vrp' 8117 Perform Value Range Propagation on trees. This is similar to the 8118 constant propagation pass, but instead of values, ranges of values 8119 are propagated. This allows the optimizers to remove unnecessary 8120 range checks like array bound checks and null pointer checks. 8121 This is enabled by default at `-O2' and higher. Null pointer check 8122 elimination is only done if `-fdelete-null-pointer-checks' is 8123 enabled. 8124 8125`-fsplit-ivs-in-unroller' 8126 Enables expression of values of induction variables in later 8127 iterations of the unrolled loop using the value in the first 8128 iteration. This breaks long dependency chains, thus improving 8129 efficiency of the scheduling passes. 8130 8131 A combination of `-fweb' and CSE is often sufficient to obtain the 8132 same effect. However, that is not reliable in cases where the 8133 loop body is more complicated than a single basic block. It also 8134 does not work at all on some architectures due to restrictions in 8135 the CSE pass. 8136 8137 This optimization is enabled by default. 8138 8139`-fvariable-expansion-in-unroller' 8140 With this option, the compiler creates multiple copies of some 8141 local variables when unrolling a loop, which can result in 8142 superior code. 8143 8144`-fpartial-inlining' 8145 Inline parts of functions. This option has any effect only when 8146 inlining itself is turned on by the `-finline-functions' or 8147 `-finline-small-functions' options. 8148 8149 Enabled at level `-O2'. 8150 8151`-fpredictive-commoning' 8152 Perform predictive commoning optimization, i.e., reusing 8153 computations (especially memory loads and stores) performed in 8154 previous iterations of loops. 8155 8156 This option is enabled at level `-O3'. 8157 8158`-fprefetch-loop-arrays' 8159 If supported by the target machine, generate instructions to 8160 prefetch memory to improve the performance of loops that access 8161 large arrays. 8162 8163 This option may generate better or worse code; results are highly 8164 dependent on the structure of loops within the source code. 8165 8166 Disabled at level `-Os'. 8167 8168`-fno-peephole' 8169`-fno-peephole2' 8170 Disable any machine-specific peephole optimizations. The 8171 difference between `-fno-peephole' and `-fno-peephole2' is in how 8172 they are implemented in the compiler; some targets use one, some 8173 use the other, a few use both. 8174 8175 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 8176 levels `-O2', `-O3', `-Os'. 8177 8178`-fno-guess-branch-probability' 8179 Do not guess branch probabilities using heuristics. 8180 8181 GCC uses heuristics to guess branch probabilities if they are not 8182 provided by profiling feedback (`-fprofile-arcs'). These 8183 heuristics are based on the control flow graph. If some branch 8184 probabilities are specified by `__builtin_expect', then the 8185 heuristics are used to guess branch probabilities for the rest of 8186 the control flow graph, taking the `__builtin_expect' info into 8187 account. The interactions between the heuristics and 8188 `__builtin_expect' can be complex, and in some cases, it may be 8189 useful to disable the heuristics so that the effects of 8190 `__builtin_expect' are easier to understand. 8191 8192 The default is `-fguess-branch-probability' at levels `-O', `-O2', 8193 `-O3', `-Os'. 8194 8195`-freorder-blocks' 8196 Reorder basic blocks in the compiled function in order to reduce 8197 number of taken branches and improve code locality. 8198 8199 Enabled at levels `-O2', `-O3'. 8200 8201`-freorder-blocks-and-partition' 8202 In addition to reordering basic blocks in the compiled function, 8203 in order to reduce number of taken branches, partitions hot and 8204 cold basic blocks into separate sections of the assembly and .o 8205 files, to improve paging and cache locality performance. 8206 8207 This optimization is automatically turned off in the presence of 8208 exception handling, for linkonce sections, for functions with a 8209 user-defined section attribute and on any architecture that does 8210 not support named sections. 8211 8212 Enabled for x86 at levels `-O2', `-O3'. 8213 8214`-freorder-functions' 8215 Reorder functions in the object file in order to improve code 8216 locality. This is implemented by using special subsections 8217 `.text.hot' for most frequently executed functions and 8218 `.text.unlikely' for unlikely executed functions. Reordering is 8219 done by the linker so object file format must support named 8220 sections and linker must place them in a reasonable way. 8221 8222 Also profile feedback must be available to make this option 8223 effective. See `-fprofile-arcs' for details. 8224 8225 Enabled at levels `-O2', `-O3', `-Os'. 8226 8227`-fstrict-aliasing' 8228 Allow the compiler to assume the strictest aliasing rules 8229 applicable to the language being compiled. For C (and C++), this 8230 activates optimizations based on the type of expressions. In 8231 particular, an object of one type is assumed never to reside at 8232 the same address as an object of a different type, unless the 8233 types are almost the same. For example, an `unsigned int' can 8234 alias an `int', but not a `void*' or a `double'. A character type 8235 may alias any other type. 8236 8237 Pay special attention to code like this: 8238 union a_union { 8239 int i; 8240 double d; 8241 }; 8242 8243 int f() { 8244 union a_union t; 8245 t.d = 3.0; 8246 return t.i; 8247 } 8248 The practice of reading from a different union member than the one 8249 most recently written to (called "type-punning") is common. Even 8250 with `-fstrict-aliasing', type-punning is allowed, provided the 8251 memory is accessed through the union type. So, the code above 8252 works as expected. *Note Structures unions enumerations and 8253 bit-fields implementation::. However, this code might not: 8254 int f() { 8255 union a_union t; 8256 int* ip; 8257 t.d = 3.0; 8258 ip = &t.i; 8259 return *ip; 8260 } 8261 8262 Similarly, access by taking the address, casting the resulting 8263 pointer and dereferencing the result has undefined behavior, even 8264 if the cast uses a union type, e.g.: 8265 int f() { 8266 double d = 3.0; 8267 return ((union a_union *) &d)->i; 8268 } 8269 8270 The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3', 8271 `-Os'. 8272 8273`-fstrict-overflow' 8274 Allow the compiler to assume strict signed overflow rules, 8275 depending on the language being compiled. For C (and C++) this 8276 means that overflow when doing arithmetic with signed numbers is 8277 undefined, which means that the compiler may assume that it does 8278 not happen. This permits various optimizations. For example, the 8279 compiler assumes that an expression like `i + 10 > i' is always 8280 true for signed `i'. This assumption is only valid if signed 8281 overflow is undefined, as the expression is false if `i + 10' 8282 overflows when using twos complement arithmetic. When this option 8283 is in effect any attempt to determine whether an operation on 8284 signed numbers overflows must be written carefully to not actually 8285 involve overflow. 8286 8287 This option also allows the compiler to assume strict pointer 8288 semantics: given a pointer to an object, if adding an offset to 8289 that pointer does not produce a pointer to the same object, the 8290 addition is undefined. This permits the compiler to conclude that 8291 `p + u > p' is always true for a pointer `p' and unsigned integer 8292 `u'. This assumption is only valid because pointer wraparound is 8293 undefined, as the expression is false if `p + u' overflows using 8294 twos complement arithmetic. 8295 8296 See also the `-fwrapv' option. Using `-fwrapv' means that integer 8297 signed overflow is fully defined: it wraps. When `-fwrapv' is 8298 used, there is no difference between `-fstrict-overflow' and 8299 `-fno-strict-overflow' for integers. With `-fwrapv' certain types 8300 of overflow are permitted. For example, if the compiler gets an 8301 overflow when doing arithmetic on constants, the overflowed value 8302 can still be used with `-fwrapv', but not otherwise. 8303 8304 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3', 8305 `-Os'. 8306 8307`-falign-functions' 8308`-falign-functions=N' 8309 Align the start of functions to the next power-of-two greater than 8310 N, skipping up to N bytes. For instance, `-falign-functions=32' 8311 aligns functions to the next 32-byte boundary, but 8312 `-falign-functions=24' aligns to the next 32-byte boundary only if 8313 this can be done by skipping 23 bytes or less. 8314 8315 `-fno-align-functions' and `-falign-functions=1' are equivalent 8316 and mean that functions are not aligned. 8317 8318 Some assemblers only support this flag when N is a power of two; 8319 in that case, it is rounded up. 8320 8321 If N is not specified or is zero, use a machine-dependent default. 8322 8323 Enabled at levels `-O2', `-O3'. 8324 8325`-falign-labels' 8326`-falign-labels=N' 8327 Align all branch targets to a power-of-two boundary, skipping up to 8328 N bytes like `-falign-functions'. This option can easily make 8329 code slower, because it must insert dummy operations for when the 8330 branch target is reached in the usual flow of the code. 8331 8332 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 8333 that labels are not aligned. 8334 8335 If `-falign-loops' or `-falign-jumps' are applicable and are 8336 greater than this value, then their values are used instead. 8337 8338 If N is not specified or is zero, use a machine-dependent default 8339 which is very likely to be `1', meaning no alignment. 8340 8341 Enabled at levels `-O2', `-O3'. 8342 8343`-falign-loops' 8344`-falign-loops=N' 8345 Align loops to a power-of-two boundary, skipping up to N bytes 8346 like `-falign-functions'. If the loops are executed many times, 8347 this makes up for any execution of the dummy operations. 8348 8349 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 8350 that loops are not aligned. 8351 8352 If N is not specified or is zero, use a machine-dependent default. 8353 8354 Enabled at levels `-O2', `-O3'. 8355 8356`-falign-jumps' 8357`-falign-jumps=N' 8358 Align branch targets to a power-of-two boundary, for branch targets 8359 where the targets can only be reached by jumping, skipping up to N 8360 bytes like `-falign-functions'. In this case, no dummy operations 8361 need be executed. 8362 8363 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 8364 that loops are not aligned. 8365 8366 If N is not specified or is zero, use a machine-dependent default. 8367 8368 Enabled at levels `-O2', `-O3'. 8369 8370`-funit-at-a-time' 8371 This option is left for compatibility reasons. `-funit-at-a-time' 8372 has no effect, while `-fno-unit-at-a-time' implies 8373 `-fno-toplevel-reorder' and `-fno-section-anchors'. 8374 8375 Enabled by default. 8376 8377`-fno-toplevel-reorder' 8378 Do not reorder top-level functions, variables, and `asm' 8379 statements. Output them in the same order that they appear in the 8380 input file. When this option is used, unreferenced static 8381 variables are not removed. This option is intended to support 8382 existing code that relies on a particular ordering. For new code, 8383 it is better to use attributes when possible. 8384 8385 Enabled at level `-O0'. When disabled explicitly, it also implies 8386 `-fno-section-anchors', which is otherwise enabled at `-O0' on some 8387 targets. 8388 8389`-fweb' 8390 Constructs webs as commonly used for register allocation purposes 8391 and assign each web individual pseudo register. This allows the 8392 register allocation pass to operate on pseudos directly, but also 8393 strengthens several other optimization passes, such as CSE, loop 8394 optimizer and trivial dead code remover. It can, however, make 8395 debugging impossible, since variables no longer stay in a "home 8396 register". 8397 8398 Enabled by default with `-funroll-loops'. 8399 8400`-fwhole-program' 8401 Assume that the current compilation unit represents the whole 8402 program being compiled. All public functions and variables with 8403 the exception of `main' and those merged by attribute 8404 `externally_visible' become static functions and in effect are 8405 optimized more aggressively by interprocedural optimizers. 8406 8407 This option should not be used in combination with `-flto'. 8408 Instead relying on a linker plugin should provide safer and more 8409 precise information. 8410 8411`-flto[=N]' 8412 This option runs the standard link-time optimizer. When invoked 8413 with source code, it generates GIMPLE (one of GCC's internal 8414 representations) and writes it to special ELF sections in the 8415 object file. When the object files are linked together, all the 8416 function bodies are read from these ELF sections and instantiated 8417 as if they had been part of the same translation unit. 8418 8419 To use the link-time optimizer, `-flto' and optimization options 8420 should be specified at compile time and during the final link. 8421 For example: 8422 8423 gcc -c -O2 -flto foo.c 8424 gcc -c -O2 -flto bar.c 8425 gcc -o myprog -flto -O2 foo.o bar.o 8426 8427 The first two invocations to GCC save a bytecode representation of 8428 GIMPLE into special ELF sections inside `foo.o' and `bar.o'. The 8429 final invocation reads the GIMPLE bytecode from `foo.o' and 8430 `bar.o', merges the two files into a single internal image, and 8431 compiles the result as usual. Since both `foo.o' and `bar.o' are 8432 merged into a single image, this causes all the interprocedural 8433 analyses and optimizations in GCC to work across the two files as 8434 if they were a single one. This means, for example, that the 8435 inliner is able to inline functions in `bar.o' into functions in 8436 `foo.o' and vice-versa. 8437 8438 Another (simpler) way to enable link-time optimization is: 8439 8440 gcc -o myprog -flto -O2 foo.c bar.c 8441 8442 The above generates bytecode for `foo.c' and `bar.c', merges them 8443 together into a single GIMPLE representation and optimizes them as 8444 usual to produce `myprog'. 8445 8446 The only important thing to keep in mind is that to enable 8447 link-time optimizations you need to use the GCC driver to perform 8448 the link-step. GCC then automatically performs link-time 8449 optimization if any of the objects involved were compiled with the 8450 `-flto' command-line option. You generally should specify the 8451 optimization options to be used for link-time optimization though 8452 GCC tries to be clever at guessing an optimization level to use 8453 from the options used at compile-time if you fail to specify one 8454 at link-time. You can always override the automatic decision to 8455 do link-time optimization at link-time by passing `-fno-lto' to 8456 the link command. 8457 8458 To make whole program optimization effective, it is necessary to 8459 make certain whole program assumptions. The compiler needs to know 8460 what functions and variables can be accessed by libraries and 8461 runtime outside of the link-time optimized unit. When supported 8462 by the linker, the linker plugin (see `-fuse-linker-plugin') 8463 passes information to the compiler about used and externally 8464 visible symbols. When the linker plugin is not available, 8465 `-fwhole-program' should be used to allow the compiler to make 8466 these assumptions, which leads to more aggressive optimization 8467 decisions. 8468 8469 When `-fuse-linker-plugin' is not enabled then, when a file is 8470 compiled with `-flto', the generated object file is larger than a 8471 regular object file because it contains GIMPLE bytecodes and the 8472 usual final code (see `-ffat-lto-objects'. This means that object 8473 files with LTO information can be linked as normal object files; 8474 if `-fno-lto' is passed to the linker, no interprocedural 8475 optimizations are applied. Note that when `-fno-fat-lto-objects' 8476 is enabled the compile-stage is faster but you cannot perform a 8477 regular, non-LTO link on them. 8478 8479 Additionally, the optimization flags used to compile individual 8480 files are not necessarily related to those used at link time. For 8481 instance, 8482 8483 gcc -c -O0 -ffat-lto-objects -flto foo.c 8484 gcc -c -O0 -ffat-lto-objects -flto bar.c 8485 gcc -o myprog -O3 foo.o bar.o 8486 8487 This produces individual object files with unoptimized assembler 8488 code, but the resulting binary `myprog' is optimized at `-O3'. 8489 If, instead, the final binary is generated with `-fno-lto', then 8490 `myprog' is not optimized. 8491 8492 When producing the final binary, GCC only applies link-time 8493 optimizations to those files that contain bytecode. Therefore, 8494 you can mix and match object files and libraries with GIMPLE 8495 bytecodes and final object code. GCC automatically selects which 8496 files to optimize in LTO mode and which files to link without 8497 further processing. 8498 8499 There are some code generation flags preserved by GCC when 8500 generating bytecodes, as they need to be used during the final link 8501 stage. Generally options specified at link-time override those 8502 specified at compile-time. 8503 8504 If you do not specify an optimization level option `-O' at 8505 link-time then GCC computes one based on the optimization levels 8506 used when compiling the object files. The highest optimization 8507 level wins here. 8508 8509 Currently, the following options and their setting are take from 8510 the first object file that explicitely specified it: `-fPIC', 8511 `-fpic', `-fpie', `-fcommon', `-fexceptions', 8512 `-fnon-call-exceptions', `-fgnu-tm' and all the `-m' target flags. 8513 8514 Certain ABI changing flags are required to match in all 8515 compilation-units and trying to override this at link-time with a 8516 conflicting value is ignored. This includes options such as 8517 `-freg-struct-return' and `-fpcc-struct-return'. 8518 8519 Other options such as `-ffp-contract', `-fno-strict-overflow', 8520 `-fwrapv', `-fno-trapv' or `-fno-strict-aliasing' are passed 8521 through to the link stage and merged conservatively for 8522 conflicting translation units. Specifically 8523 `-fno-strict-overflow', `-fwrapv' and `-fno-trapv' take precedence 8524 and for example `-ffp-contract=off' takes precedence over 8525 `-ffp-contract=fast'. You can override them at linke-time. 8526 8527 It is recommended that you compile all the files participating in 8528 the same link with the same options and also specify those options 8529 at link time. 8530 8531 If LTO encounters objects with C linkage declared with incompatible 8532 types in separate translation units to be linked together 8533 (undefined behavior according to ISO C99 6.2.7), a non-fatal 8534 diagnostic may be issued. The behavior is still undefined at run 8535 time. Similar diagnostics may be raised for other languages. 8536 8537 Another feature of LTO is that it is possible to apply 8538 interprocedural optimizations on files written in different 8539 languages: 8540 8541 gcc -c -flto foo.c 8542 g++ -c -flto bar.cc 8543 gfortran -c -flto baz.f90 8544 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran 8545 8546 Notice that the final link is done with `g++' to get the C++ 8547 runtime libraries and `-lgfortran' is added to get the Fortran 8548 runtime libraries. In general, when mixing languages in LTO mode, 8549 you should use the same link command options as when mixing 8550 languages in a regular (non-LTO) compilation. 8551 8552 If object files containing GIMPLE bytecode are stored in a library 8553 archive, say `libfoo.a', it is possible to extract and use them in 8554 an LTO link if you are using a linker with plugin support. To 8555 create static libraries suitable for LTO, use `gcc-ar' and 8556 `gcc-ranlib' instead of `ar' and `ranlib'; to show the symbols of 8557 object files with GIMPLE bytecode, use `gcc-nm'. Those commands 8558 require that `ar', `ranlib' and `nm' have been compiled with 8559 plugin support. At link time, use the the flag 8560 `-fuse-linker-plugin' to ensure that the library participates in 8561 the LTO optimization process: 8562 8563 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo 8564 8565 With the linker plugin enabled, the linker extracts the needed 8566 GIMPLE files from `libfoo.a' and passes them on to the running GCC 8567 to make them part of the aggregated GIMPLE image to be optimized. 8568 8569 If you are not using a linker with plugin support and/or do not 8570 enable the linker plugin, then the objects inside `libfoo.a' are 8571 extracted and linked as usual, but they do not participate in the 8572 LTO optimization process. In order to make a static library 8573 suitable for both LTO optimization and usual linkage, compile its 8574 object files with `-flto' `-ffat-lto-objects'. 8575 8576 Link-time optimizations do not require the presence of the whole 8577 program to operate. If the program does not require any symbols 8578 to be exported, it is possible to combine `-flto' and 8579 `-fwhole-program' to allow the interprocedural optimizers to use 8580 more aggressive assumptions which may lead to improved 8581 optimization opportunities. Use of `-fwhole-program' is not 8582 needed when linker plugin is active (see `-fuse-linker-plugin'). 8583 8584 The current implementation of LTO makes no attempt to generate 8585 bytecode that is portable between different types of hosts. The 8586 bytecode files are versioned and there is a strict version check, 8587 so bytecode files generated in one version of GCC do not work with 8588 an older or newer version of GCC. 8589 8590 Link-time optimization does not work well with generation of 8591 debugging information. Combining `-flto' with `-g' is currently 8592 experimental and expected to produce unexpected results. 8593 8594 If you specify the optional N, the optimization and code 8595 generation done at link time is executed in parallel using N 8596 parallel jobs by utilizing an installed `make' program. The 8597 environment variable `MAKE' may be used to override the program 8598 used. The default value for N is 1. 8599 8600 You can also specify `-flto=jobserver' to use GNU make's job 8601 server mode to determine the number of parallel jobs. This is 8602 useful when the Makefile calling GCC is already executing in 8603 parallel. You must prepend a `+' to the command recipe in the 8604 parent Makefile for this to work. This option likely only works 8605 if `MAKE' is GNU make. 8606 8607`-flto-partition=ALG' 8608 Specify the partitioning algorithm used by the link-time optimizer. 8609 The value is either `1to1' to specify a partitioning mirroring the 8610 original source files or `balanced' to specify partitioning into 8611 equally sized chunks (whenever possible) or `max' to create new 8612 partition for every symbol where possible. Specifying `none' as 8613 an algorithm disables partitioning and streaming completely. The 8614 default value is `balanced'. While `1to1' can be used as an 8615 workaround for various code ordering issues, the `max' 8616 partitioning is intended for internal testing only. The value 8617 `one' specifies that exactly one partition should be used while 8618 the value `none' bypasses partitioning and executes the link-time 8619 optimization step directly from the WPA phase. 8620 8621`-flto-odr-type-merging' 8622 Enable streaming of mangled types names of C++ types and their 8623 unification at linktime. This increases size of LTO object files, 8624 but enable diagnostics about One Definition Rule violations. 8625 8626`-flto-compression-level=N' 8627 This option specifies the level of compression used for 8628 intermediate language written to LTO object files, and is only 8629 meaningful in conjunction with LTO mode (`-flto'). Valid values 8630 are 0 (no compression) to 9 (maximum compression). Values outside 8631 this range are clamped to either 0 or 9. If the option is not 8632 given, a default balanced compression setting is used. 8633 8634`-flto-report' 8635 Prints a report with internal details on the workings of the 8636 link-time optimizer. The contents of this report vary from 8637 version to version. It is meant to be useful to GCC developers 8638 when processing object files in LTO mode (via `-flto'). 8639 8640 Disabled by default. 8641 8642`-flto-report-wpa' 8643 Like `-flto-report', but only print for the WPA phase of Link Time 8644 Optimization. 8645 8646`-fuse-linker-plugin' 8647 Enables the use of a linker plugin during link-time optimization. 8648 This option relies on plugin support in the linker, which is 8649 available in gold or in GNU ld 2.21 or newer. 8650 8651 This option enables the extraction of object files with GIMPLE 8652 bytecode out of library archives. This improves the quality of 8653 optimization by exposing more code to the link-time optimizer. 8654 This information specifies what symbols can be accessed externally 8655 (by non-LTO object or during dynamic linking). Resulting code 8656 quality improvements on binaries (and shared libraries that use 8657 hidden visibility) are similar to `-fwhole-program'. See `-flto' 8658 for a description of the effect of this flag and how to use it. 8659 8660 This option is enabled by default when LTO support in GCC is 8661 enabled and GCC was configured for use with a linker supporting 8662 plugins (GNU ld 2.21 or newer or gold). 8663 8664`-ffat-lto-objects' 8665 Fat LTO objects are object files that contain both the 8666 intermediate language and the object code. This makes them usable 8667 for both LTO linking and normal linking. This option is effective 8668 only when compiling with `-flto' and is ignored at link time. 8669 8670 `-fno-fat-lto-objects' improves compilation time over plain LTO, 8671 but requires the complete toolchain to be aware of LTO. It 8672 requires a linker with linker plugin support for basic 8673 functionality. Additionally, `nm', `ar' and `ranlib' need to 8674 support linker plugins to allow a full-featured build environment 8675 (capable of building static libraries etc). GCC provides the 8676 `gcc-ar', `gcc-nm', `gcc-ranlib' wrappers to pass the right options 8677 to these tools. With non fat LTO makefiles need to be modified to 8678 use them. 8679 8680 The default is `-fno-fat-lto-objects' on targets with linker plugin 8681 support. 8682 8683`-fcompare-elim' 8684 After register allocation and post-register allocation instruction 8685 splitting, identify arithmetic instructions that compute processor 8686 flags similar to a comparison operation based on that arithmetic. 8687 If possible, eliminate the explicit comparison operation. 8688 8689 This pass only applies to certain targets that cannot explicitly 8690 represent the comparison operation before register allocation is 8691 complete. 8692 8693 Enabled at levels `-O', `-O2', `-O3', `-Os'. 8694 8695`-fcprop-registers' 8696 After register allocation and post-register allocation instruction 8697 splitting, perform a copy-propagation pass to try to reduce 8698 scheduling dependencies and occasionally eliminate the copy. 8699 8700 Enabled at levels `-O', `-O2', `-O3', `-Os'. 8701 8702`-fprofile-correction' 8703 Profiles collected using an instrumented binary for multi-threaded 8704 programs may be inconsistent due to missed counter updates. When 8705 this option is specified, GCC uses heuristics to correct or smooth 8706 out such inconsistencies. By default, GCC emits an error message 8707 when an inconsistent profile is detected. 8708 8709`-fprofile-dir=PATH' 8710 Set the directory to search for the profile data files in to PATH. 8711 This option affects only the profile data generated by 8712 `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used 8713 by `-fprofile-use' and `-fbranch-probabilities' and its related 8714 options. Both absolute and relative paths can be used. By 8715 default, GCC uses the current directory as PATH, thus the profile 8716 data file appears in the same directory as the object file. 8717 8718`-fprofile-generate' 8719`-fprofile-generate=PATH' 8720 Enable options usually used for instrumenting application to 8721 produce profile useful for later recompilation with profile 8722 feedback based optimization. You must use `-fprofile-generate' 8723 both when compiling and when linking your program. 8724 8725 The following options are enabled: `-fprofile-arcs', 8726 `-fprofile-values', `-fvpt'. 8727 8728 If PATH is specified, GCC looks at the PATH to find the profile 8729 feedback data files. See `-fprofile-dir'. 8730 8731`-fprofile-use' 8732`-fprofile-use=PATH' 8733 Enable profile feedback-directed optimizations, and the following 8734 optimizations which are generally profitable only with profile 8735 feedback available: `-fbranch-probabilities', `-fvpt', 8736 `-funroll-loops', `-fpeel-loops', `-ftracer', `-ftree-vectorize', 8737 and `ftree-loop-distribute-patterns'. 8738 8739 By default, GCC emits an error message if the feedback profiles do 8740 not match the source code. This error can be turned into a 8741 warning by using `-Wcoverage-mismatch'. Note this may result in 8742 poorly optimized code. 8743 8744 If PATH is specified, GCC looks at the PATH to find the profile 8745 feedback data files. See `-fprofile-dir'. 8746 8747`-fauto-profile' 8748`-fauto-profile=PATH' 8749 Enable sampling-based feedback-directed optimizations, and the 8750 following optimizations which are generally profitable only with 8751 profile feedback available: `-fbranch-probabilities', `-fvpt', 8752 `-funroll-loops', `-fpeel-loops', `-ftracer', `-ftree-vectorize', 8753 `-finline-functions', `-fipa-cp', `-fipa-cp-clone', 8754 `-fpredictive-commoning', `-funswitch-loops', 8755 `-fgcse-after-reload', and `-ftree-loop-distribute-patterns'. 8756 8757 PATH is the name of a file containing AutoFDO profile information. 8758 If omitted, it defaults to `fbdata.afdo' in the current directory. 8759 8760 Producing an AutoFDO profile data file requires running your 8761 program with the `perf' utility on a supported GNU/Linux target 8762 system. For more information, see `https://perf.wiki.kernel.org/'. 8763 8764 E.g. 8765 perf record -e br_inst_retired:near_taken -b -o perf.data \ 8766 -- your_program 8767 8768 Then use the `create_gcov' tool to convert the raw profile data to 8769 a format that can be used by GCC. You must also supply the 8770 unstripped binary for your program to this tool. See 8771 `https://github.com/google/autofdo'. 8772 8773 E.g. 8774 create_gcov --binary=your_program.unstripped --profile=perf.data \ 8775 --gcov=profile.afdo 8776 8777 The following options control compiler behavior regarding 8778floating-point arithmetic. These options trade off between speed and 8779correctness. All must be specifically enabled. 8780 8781`-ffloat-store' 8782 Do not store floating-point variables in registers, and inhibit 8783 other options that might change whether a floating-point value is 8784 taken from a register or memory. 8785 8786 This option prevents undesirable excess precision on machines such 8787 as the 68000 where the floating registers (of the 68881) keep more 8788 precision than a `double' is supposed to have. Similarly for the 8789 x86 architecture. For most programs, the excess precision does 8790 only good, but a few programs rely on the precise definition of 8791 IEEE floating point. Use `-ffloat-store' for such programs, after 8792 modifying them to store all pertinent intermediate computations 8793 into variables. 8794 8795`-fexcess-precision=STYLE' 8796 This option allows further control over excess precision on 8797 machines where floating-point registers have more precision than 8798 the IEEE `float' and `double' types and the processor does not 8799 support operations rounding to those types. By default, 8800 `-fexcess-precision=fast' is in effect; this means that operations 8801 are carried out in the precision of the registers and that it is 8802 unpredictable when rounding to the types specified in the source 8803 code takes place. When compiling C, if 8804 `-fexcess-precision=standard' is specified then excess precision 8805 follows the rules specified in ISO C99; in particular, both casts 8806 and assignments cause values to be rounded to their semantic types 8807 (whereas `-ffloat-store' only affects assignments). This option 8808 is enabled by default for C if a strict conformance option such as 8809 `-std=c99' is used. 8810 8811 `-fexcess-precision=standard' is not implemented for languages 8812 other than C, and has no effect if `-funsafe-math-optimizations' 8813 or `-ffast-math' is specified. On the x86, it also has no effect 8814 if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the 8815 former case, IEEE semantics apply without excess precision, and in 8816 the latter, rounding is unpredictable. 8817 8818`-ffast-math' 8819 Sets the options `-fno-math-errno', `-funsafe-math-optimizations', 8820 `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans' 8821 and `-fcx-limited-range'. 8822 8823 This option causes the preprocessor macro `__FAST_MATH__' to be 8824 defined. 8825 8826 This option is not turned on by any `-O' option besides `-Ofast' 8827 since it can result in incorrect output for programs that depend 8828 on an exact implementation of IEEE or ISO rules/specifications for 8829 math functions. It may, however, yield faster code for programs 8830 that do not require the guarantees of these specifications. 8831 8832`-fno-math-errno' 8833 Do not set `errno' after calling math functions that are executed 8834 with a single instruction, e.g., `sqrt'. A program that relies on 8835 IEEE exceptions for math error handling may want to use this flag 8836 for speed while maintaining IEEE arithmetic compatibility. 8837 8838 This option is not turned on by any `-O' option since it can 8839 result in incorrect output for programs that depend on an exact 8840 implementation of IEEE or ISO rules/specifications for math 8841 functions. It may, however, yield faster code for programs that do 8842 not require the guarantees of these specifications. 8843 8844 The default is `-fmath-errno'. 8845 8846 On Darwin systems, the math library never sets `errno'. There is 8847 therefore no reason for the compiler to consider the possibility 8848 that it might, and `-fno-math-errno' is the default. 8849 8850`-funsafe-math-optimizations' 8851 Allow optimizations for floating-point arithmetic that (a) assume 8852 that arguments and results are valid and (b) may violate IEEE or 8853 ANSI standards. When used at link-time, it may include libraries 8854 or startup files that change the default FPU control word or other 8855 similar optimizations. 8856 8857 This option is not turned on by any `-O' option since it can 8858 result in incorrect output for programs that depend on an exact 8859 implementation of IEEE or ISO rules/specifications for math 8860 functions. It may, however, yield faster code for programs that do 8861 not require the guarantees of these specifications. Enables 8862 `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math' 8863 and `-freciprocal-math'. 8864 8865 The default is `-fno-unsafe-math-optimizations'. 8866 8867`-fassociative-math' 8868 Allow re-association of operands in series of floating-point 8869 operations. This violates the ISO C and C++ language standard by 8870 possibly changing computation result. NOTE: re-ordering may 8871 change the sign of zero as well as ignore NaNs and inhibit or 8872 create underflow or overflow (and thus cannot be used on code that 8873 relies on rounding behavior like `(x + 2**52) - 2**52'. May also 8874 reorder floating-point comparisons and thus may not be used when 8875 ordered comparisons are required. This option requires that both 8876 `-fno-signed-zeros' and `-fno-trapping-math' be in effect. 8877 Moreover, it doesn't make much sense with `-frounding-math'. For 8878 Fortran the option is automatically enabled when both 8879 `-fno-signed-zeros' and `-fno-trapping-math' are in effect. 8880 8881 The default is `-fno-associative-math'. 8882 8883`-freciprocal-math' 8884 Allow the reciprocal of a value to be used instead of dividing by 8885 the value if this enables optimizations. For example `x / y' can 8886 be replaced with `x * (1/y)', which is useful if `(1/y)' is 8887 subject to common subexpression elimination. Note that this loses 8888 precision and increases the number of flops operating on the value. 8889 8890 The default is `-fno-reciprocal-math'. 8891 8892`-ffinite-math-only' 8893 Allow optimizations for floating-point arithmetic that assume that 8894 arguments and results are not NaNs or +-Infs. 8895 8896 This option is not turned on by any `-O' option since it can 8897 result in incorrect output for programs that depend on an exact 8898 implementation of IEEE or ISO rules/specifications for math 8899 functions. It may, however, yield faster code for programs that do 8900 not require the guarantees of these specifications. 8901 8902 The default is `-fno-finite-math-only'. 8903 8904`-fno-signed-zeros' 8905 Allow optimizations for floating-point arithmetic that ignore the 8906 signedness of zero. IEEE arithmetic specifies the behavior of 8907 distinct +0.0 and -0.0 values, which then prohibits simplification 8908 of expressions such as x+0.0 or 0.0*x (even with 8909 `-ffinite-math-only'). This option implies that the sign of a 8910 zero result isn't significant. 8911 8912 The default is `-fsigned-zeros'. 8913 8914`-fno-trapping-math' 8915 Compile code assuming that floating-point operations cannot 8916 generate user-visible traps. These traps include division by 8917 zero, overflow, underflow, inexact result and invalid operation. 8918 This option requires that `-fno-signaling-nans' be in effect. 8919 Setting this option may allow faster code if one relies on 8920 "non-stop" IEEE arithmetic, for example. 8921 8922 This option should never be turned on by any `-O' option since it 8923 can result in incorrect output for programs that depend on an 8924 exact implementation of IEEE or ISO rules/specifications for math 8925 functions. 8926 8927 The default is `-ftrapping-math'. 8928 8929`-frounding-math' 8930 Disable transformations and optimizations that assume default 8931 floating-point rounding behavior. This is round-to-zero for all 8932 floating point to integer conversions, and round-to-nearest for 8933 all other arithmetic truncations. This option should be specified 8934 for programs that change the FP rounding mode dynamically, or that 8935 may be executed with a non-default rounding mode. This option 8936 disables constant folding of floating-point expressions at compile 8937 time (which may be affected by rounding mode) and arithmetic 8938 transformations that are unsafe in the presence of sign-dependent 8939 rounding modes. 8940 8941 The default is `-fno-rounding-math'. 8942 8943 This option is experimental and does not currently guarantee to 8944 disable all GCC optimizations that are affected by rounding mode. 8945 Future versions of GCC may provide finer control of this setting 8946 using C99's `FENV_ACCESS' pragma. This command-line option will 8947 be used to specify the default state for `FENV_ACCESS'. 8948 8949`-fsignaling-nans' 8950 Compile code assuming that IEEE signaling NaNs may generate 8951 user-visible traps during floating-point operations. Setting this 8952 option disables optimizations that may change the number of 8953 exceptions visible with signaling NaNs. This option implies 8954 `-ftrapping-math'. 8955 8956 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 8957 defined. 8958 8959 The default is `-fno-signaling-nans'. 8960 8961 This option is experimental and does not currently guarantee to 8962 disable all GCC optimizations that affect signaling NaN behavior. 8963 8964`-fsingle-precision-constant' 8965 Treat floating-point constants as single precision instead of 8966 implicitly converting them to double-precision constants. 8967 8968`-fcx-limited-range' 8969 When enabled, this option states that a range reduction step is not 8970 needed when performing complex division. Also, there is no 8971 checking whether the result of a complex multiplication or 8972 division is `NaN + I*NaN', with an attempt to rescue the situation 8973 in that case. The default is `-fno-cx-limited-range', but is 8974 enabled by `-ffast-math'. 8975 8976 This option controls the default setting of the ISO C99 8977 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to 8978 all languages. 8979 8980`-fcx-fortran-rules' 8981 Complex multiplication and division follow Fortran rules. Range 8982 reduction is done as part of complex division, but there is no 8983 checking whether the result of a complex multiplication or 8984 division is `NaN + I*NaN', with an attempt to rescue the situation 8985 in that case. 8986 8987 The default is `-fno-cx-fortran-rules'. 8988 8989 8990 The following options control optimizations that may improve 8991performance, but are not enabled by any `-O' options. This section 8992includes experimental options that may produce broken code. 8993 8994`-fbranch-probabilities' 8995 After running a program compiled with `-fprofile-arcs' (*note 8996 Options for Debugging Your Program or `gcc': Debugging Options.), 8997 you can compile it a second time using `-fbranch-probabilities', 8998 to improve optimizations based on the number of times each branch 8999 was taken. When a program compiled with `-fprofile-arcs' exits, 9000 it saves arc execution counts to a file called `SOURCENAME.gcda' 9001 for each source file. The information in this data file is very 9002 dependent on the structure of the generated code, so you must use 9003 the same source code and the same optimization options for both 9004 compilations. 9005 9006 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 9007 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 9008 optimization. Currently, they are only used in one place: in 9009 `reorg.c', instead of guessing which path a branch is most likely 9010 to take, the `REG_BR_PROB' values are used to exactly determine 9011 which path is taken more often. 9012 9013`-fprofile-values' 9014 If combined with `-fprofile-arcs', it adds code so that some data 9015 about values of expressions in the program is gathered. 9016 9017 With `-fbranch-probabilities', it reads back the data gathered 9018 from profiling values of expressions for usage in optimizations. 9019 9020 Enabled with `-fprofile-generate' and `-fprofile-use'. 9021 9022`-fprofile-reorder-functions' 9023 Function reordering based on profile instrumentation collects 9024 first time of execution of a function and orders these functions 9025 in ascending order. 9026 9027 Enabled with `-fprofile-use'. 9028 9029`-fvpt' 9030 If combined with `-fprofile-arcs', this option instructs the 9031 compiler to add code to gather information about values of 9032 expressions. 9033 9034 With `-fbranch-probabilities', it reads back the data gathered and 9035 actually performs the optimizations based on them. Currently the 9036 optimizations include specialization of division operations using 9037 the knowledge about the value of the denominator. 9038 9039`-frename-registers' 9040 Attempt to avoid false dependencies in scheduled code by making use 9041 of registers left over after register allocation. This 9042 optimization most benefits processors with lots of registers. 9043 Depending on the debug information format adopted by the target, 9044 however, it can make debugging impossible, since variables no 9045 longer stay in a "home register". 9046 9047 Enabled by default with `-funroll-loops' and `-fpeel-loops'. 9048 9049`-fschedule-fusion' 9050 Performs a target dependent pass over the instruction stream to 9051 schedule instructions of same type together because target machine 9052 can execute them more efficiently if they are adjacent to each 9053 other in the instruction flow. 9054 9055 Enabled at levels `-O2', `-O3', `-Os'. 9056 9057`-ftracer' 9058 Perform tail duplication to enlarge superblock size. This 9059 transformation simplifies the control flow of the function 9060 allowing other optimizations to do a better job. 9061 9062 Enabled with `-fprofile-use'. 9063 9064`-funroll-loops' 9065 Unroll loops whose number of iterations can be determined at 9066 compile time or upon entry to the loop. `-funroll-loops' implies 9067 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It 9068 also turns on complete loop peeling (i.e. complete removal of 9069 loops with a small constant number of iterations). This option 9070 makes code larger, and may or may not make it run faster. 9071 9072 Enabled with `-fprofile-use'. 9073 9074`-funroll-all-loops' 9075 Unroll all loops, even if their number of iterations is uncertain 9076 when the loop is entered. This usually makes programs run more 9077 slowly. `-funroll-all-loops' implies the same options as 9078 `-funroll-loops'. 9079 9080`-fpeel-loops' 9081 Peels loops for which there is enough information that they do not 9082 roll much (from profile feedback). It also turns on complete loop 9083 peeling (i.e. complete removal of loops with small constant number 9084 of iterations). 9085 9086 Enabled with `-fprofile-use'. 9087 9088`-fmove-loop-invariants' 9089 Enables the loop invariant motion pass in the RTL loop optimizer. 9090 Enabled at level `-O1' 9091 9092`-funswitch-loops' 9093 Move branches with loop invariant conditions out of the loop, with 9094 duplicates of the loop on both branches (modified according to 9095 result of the condition). 9096 9097`-ffunction-sections' 9098`-fdata-sections' 9099 Place each function or data item into its own section in the output 9100 file if the target supports arbitrary sections. The name of the 9101 function or the name of the data item determines the section's name 9102 in the output file. 9103 9104 Use these options on systems where the linker can perform 9105 optimizations to improve locality of reference in the instruction 9106 space. Most systems using the ELF object format and SPARC 9107 processors running Solaris 2 have linkers with such optimizations. 9108 AIX may have these optimizations in the future. 9109 9110 Only use these options when there are significant benefits from 9111 doing so. When you specify these options, the assembler and linker 9112 create larger object and executable files and are also slower. 9113 You cannot use `gprof' on all systems if you specify this option, 9114 and you may have problems with debugging if you specify both this 9115 option and `-g'. 9116 9117`-fbranch-target-load-optimize' 9118 Perform branch target register load optimization before prologue / 9119 epilogue threading. The use of target registers can typically be 9120 exposed only during reload, thus hoisting loads out of loops and 9121 doing inter-block scheduling needs a separate optimization pass. 9122 9123`-fbranch-target-load-optimize2' 9124 Perform branch target register load optimization after prologue / 9125 epilogue threading. 9126 9127`-fbtr-bb-exclusive' 9128 When performing branch target register load optimization, don't 9129 reuse branch target registers within any basic block. 9130 9131`-fstack-protector' 9132 Emit extra code to check for buffer overflows, such as stack 9133 smashing attacks. This is done by adding a guard variable to 9134 functions with vulnerable objects. This includes functions that 9135 call `alloca', and functions with buffers larger than 8 bytes. 9136 The guards are initialized when a function is entered and then 9137 checked when the function exits. If a guard check fails, an error 9138 message is printed and the program exits. 9139 9140`-fstack-protector-all' 9141 Like `-fstack-protector' except that all functions are protected. 9142 9143`-fstack-protector-strong' 9144 Like `-fstack-protector' but includes additional functions to be 9145 protected -- those that have local array definitions, or have 9146 references to local frame addresses. 9147 9148`-fstack-protector-explicit' 9149 Like `-fstack-protector' but only protects those functions which 9150 have the `stack_protect' attribute 9151 9152`-fstdarg-opt' 9153 Optimize the prologue of variadic argument functions with respect 9154 to usage of those arguments. 9155 9156`-fsection-anchors' 9157 Try to reduce the number of symbolic address calculations by using 9158 shared "anchor" symbols to address nearby objects. This 9159 transformation can help to reduce the number of GOT entries and 9160 GOT accesses on some targets. 9161 9162 For example, the implementation of the following function `foo': 9163 9164 static int a, b, c; 9165 int foo (void) { return a + b + c; } 9166 9167 usually calculates the addresses of all three variables, but if you 9168 compile it with `-fsection-anchors', it accesses the variables 9169 from a common anchor point instead. The effect is similar to the 9170 following pseudocode (which isn't valid C): 9171 9172 int foo (void) 9173 { 9174 register int *xr = &x; 9175 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 9176 } 9177 9178 Not all targets support this option. 9179 9180`--param NAME=VALUE' 9181 In some places, GCC uses various constants to control the amount of 9182 optimization that is done. For example, GCC does not inline 9183 functions that contain more than a certain number of instructions. 9184 You can control some of these constants on the command line using 9185 the `--param' option. 9186 9187 The names of specific parameters, and the meaning of the values, 9188 are tied to the internals of the compiler, and are subject to 9189 change without notice in future releases. 9190 9191 In each case, the VALUE is an integer. The allowable choices for 9192 NAME are: 9193 9194 `predictable-branch-outcome' 9195 When branch is predicted to be taken with probability lower 9196 than this threshold (in percent), then it is considered well 9197 predictable. The default is 10. 9198 9199 `max-crossjump-edges' 9200 The maximum number of incoming edges to consider for 9201 cross-jumping. The algorithm used by `-fcrossjumping' is 9202 O(N^2) in the number of edges incoming to each block. 9203 Increasing values mean more aggressive optimization, making 9204 the compilation time increase with probably small improvement 9205 in executable size. 9206 9207 `min-crossjump-insns' 9208 The minimum number of instructions that must be matched at 9209 the end of two blocks before cross-jumping is performed on 9210 them. This value is ignored in the case where all 9211 instructions in the block being cross-jumped from are 9212 matched. The default value is 5. 9213 9214 `max-grow-copy-bb-insns' 9215 The maximum code size expansion factor when copying basic 9216 blocks instead of jumping. The expansion is relative to a 9217 jump instruction. The default value is 8. 9218 9219 `max-goto-duplication-insns' 9220 The maximum number of instructions to duplicate to a block 9221 that jumps to a computed goto. To avoid O(N^2) behavior in a 9222 number of passes, GCC factors computed gotos early in the 9223 compilation process, and unfactors them as late as possible. 9224 Only computed jumps at the end of a basic blocks with no more 9225 than max-goto-duplication-insns are unfactored. The default 9226 value is 8. 9227 9228 `max-delay-slot-insn-search' 9229 The maximum number of instructions to consider when looking 9230 for an instruction to fill a delay slot. If more than this 9231 arbitrary number of instructions are searched, the time 9232 savings from filling the delay slot are minimal, so stop 9233 searching. Increasing values mean more aggressive 9234 optimization, making the compilation time increase with 9235 probably small improvement in execution time. 9236 9237 `max-delay-slot-live-search' 9238 When trying to fill delay slots, the maximum number of 9239 instructions to consider when searching for a block with 9240 valid live register information. Increasing this arbitrarily 9241 chosen value means more aggressive optimization, increasing 9242 the compilation time. This parameter should be removed when 9243 the delay slot code is rewritten to maintain the control-flow 9244 graph. 9245 9246 `max-gcse-memory' 9247 The approximate maximum amount of memory that can be 9248 allocated in order to perform the global common subexpression 9249 elimination optimization. If more memory than specified is 9250 required, the optimization is not done. 9251 9252 `max-gcse-insertion-ratio' 9253 If the ratio of expression insertions to deletions is larger 9254 than this value for any expression, then RTL PRE inserts or 9255 removes the expression and thus leaves partially redundant 9256 computations in the instruction stream. The default value is 9257 20. 9258 9259 `max-pending-list-length' 9260 The maximum number of pending dependencies scheduling allows 9261 before flushing the current state and starting over. Large 9262 functions with few branches or calls can create excessively 9263 large lists which needlessly consume memory and resources. 9264 9265 `max-modulo-backtrack-attempts' 9266 The maximum number of backtrack attempts the scheduler should 9267 make when modulo scheduling a loop. Larger values can 9268 exponentially increase compilation time. 9269 9270 `max-inline-insns-single' 9271 Several parameters control the tree inliner used in GCC. 9272 This number sets the maximum number of instructions (counted 9273 in GCC's internal representation) in a single function that 9274 the tree inliner considers for inlining. This only affects 9275 functions declared inline and methods implemented in a class 9276 declaration (C++). The default value is 400. 9277 9278 `max-inline-insns-auto' 9279 When you use `-finline-functions' (included in `-O3'), a lot 9280 of functions that would otherwise not be considered for 9281 inlining by the compiler are investigated. To those 9282 functions, a different (more restrictive) limit compared to 9283 functions declared inline can be applied. The default value 9284 is 40. 9285 9286 `inline-min-speedup' 9287 When estimated performance improvement of caller + callee 9288 runtime exceeds this threshold (in precent), the function can 9289 be inlined regardless the limit on `--param 9290 max-inline-insns-single' and `--param max-inline-insns-auto'. 9291 9292 `large-function-insns' 9293 The limit specifying really large functions. For functions 9294 larger than this limit after inlining, inlining is 9295 constrained by `--param large-function-growth'. This 9296 parameter is useful primarily to avoid extreme compilation 9297 time caused by non-linear algorithms used by the back end. 9298 The default value is 2700. 9299 9300 `large-function-growth' 9301 Specifies maximal growth of large function caused by inlining 9302 in percents. The default value is 100 which limits large 9303 function growth to 2.0 times the original size. 9304 9305 `large-unit-insns' 9306 The limit specifying large translation unit. Growth caused 9307 by inlining of units larger than this limit is limited by 9308 `--param inline-unit-growth'. For small units this might be 9309 too tight. For example, consider a unit consisting of 9310 function A that is inline and B that just calls A three 9311 times. If B is small relative to A, the growth of unit is 9312 300\% and yet such inlining is very sane. For very large 9313 units consisting of small inlineable functions, however, the 9314 overall unit growth limit is needed to avoid exponential 9315 explosion of code size. Thus for smaller units, the size is 9316 increased to `--param large-unit-insns' before applying 9317 `--param inline-unit-growth'. The default is 10000. 9318 9319 `inline-unit-growth' 9320 Specifies maximal overall growth of the compilation unit 9321 caused by inlining. The default value is 20 which limits 9322 unit growth to 1.2 times the original size. Cold functions 9323 (either marked cold via an attribute or by profile feedback) 9324 are not accounted into the unit size. 9325 9326 `ipcp-unit-growth' 9327 Specifies maximal overall growth of the compilation unit 9328 caused by interprocedural constant propagation. The default 9329 value is 10 which limits unit growth to 1.1 times the 9330 original size. 9331 9332 `large-stack-frame' 9333 The limit specifying large stack frames. While inlining the 9334 algorithm is trying to not grow past this limit too much. 9335 The default value is 256 bytes. 9336 9337 `large-stack-frame-growth' 9338 Specifies maximal growth of large stack frames caused by 9339 inlining in percents. The default value is 1000 which limits 9340 large stack frame growth to 11 times the original size. 9341 9342 `max-inline-insns-recursive' 9343 `max-inline-insns-recursive-auto' 9344 Specifies the maximum number of instructions an out-of-line 9345 copy of a self-recursive inline function can grow into by 9346 performing recursive inlining. 9347 9348 `--param max-inline-insns-recursive' applies to functions 9349 declared inline. For functions not declared inline, 9350 recursive inlining happens only when `-finline-functions' 9351 (included in `-O3') is enabled; `--param 9352 max-inline-insns-recursive-auto' applies instead. The 9353 default value is 450. 9354 9355 `max-inline-recursive-depth' 9356 `max-inline-recursive-depth-auto' 9357 Specifies the maximum recursion depth used for recursive 9358 inlining. 9359 9360 `--param max-inline-recursive-depth' applies to functions 9361 declared inline. For functions not declared inline, 9362 recursive inlining happens only when `-finline-functions' 9363 (included in `-O3') is enabled; `--param 9364 max-inline-recursive-depth-auto' applies instead. The 9365 default value is 8. 9366 9367 `min-inline-recursive-probability' 9368 Recursive inlining is profitable only for function having 9369 deep recursion in average and can hurt for function having 9370 little recursion depth by increasing the prologue size or 9371 complexity of function body to other optimizers. 9372 9373 When profile feedback is available (see `-fprofile-generate') 9374 the actual recursion depth can be guessed from probability 9375 that function recurses via a given call expression. This 9376 parameter limits inlining only to call expressions whose 9377 probability exceeds the given threshold (in percents). The 9378 default value is 10. 9379 9380 `early-inlining-insns' 9381 Specify growth that the early inliner can make. In effect it 9382 increases the amount of inlining for code having a large 9383 abstraction penalty. The default value is 14. 9384 9385 `max-early-inliner-iterations' 9386 Limit of iterations of the early inliner. This basically 9387 bounds the number of nested indirect calls the early inliner 9388 can resolve. Deeper chains are still handled by late 9389 inlining. 9390 9391 `comdat-sharing-probability' 9392 Probability (in percent) that C++ inline function with comdat 9393 visibility are shared across multiple compilation units. The 9394 default value is 20. 9395 9396 `profile-func-internal-id' 9397 A parameter to control whether to use function internal id in 9398 profile database lookup. If the value is 0, the compiler uses 9399 an id that is based on function assembler name and filename, 9400 which makes old profile data more tolerant to source changes 9401 such as function reordering etc. The default value is 0. 9402 9403 `min-vect-loop-bound' 9404 The minimum number of iterations under which loops are not 9405 vectorized when `-ftree-vectorize' is used. The number of 9406 iterations after vectorization needs to be greater than the 9407 value specified by this option to allow vectorization. The 9408 default value is 0. 9409 9410 `gcse-cost-distance-ratio' 9411 Scaling factor in calculation of maximum distance an 9412 expression can be moved by GCSE optimizations. This is 9413 currently supported only in the code hoisting pass. The 9414 bigger the ratio, the more aggressive code hoisting is with 9415 simple expressions, i.e., the expressions that have cost less 9416 than `gcse-unrestricted-cost'. Specifying 0 disables 9417 hoisting of simple expressions. The default value is 10. 9418 9419 `gcse-unrestricted-cost' 9420 Cost, roughly measured as the cost of a single typical machine 9421 instruction, at which GCSE optimizations do not constrain the 9422 distance an expression can travel. This is currently 9423 supported only in the code hoisting pass. The lesser the 9424 cost, the more aggressive code hoisting is. Specifying 0 9425 allows all expressions to travel unrestricted distances. The 9426 default value is 3. 9427 9428 `max-hoist-depth' 9429 The depth of search in the dominator tree for expressions to 9430 hoist. This is used to avoid quadratic behavior in hoisting 9431 algorithm. The value of 0 does not limit on the search, but 9432 may slow down compilation of huge functions. The default 9433 value is 30. 9434 9435 `max-tail-merge-comparisons' 9436 The maximum amount of similar bbs to compare a bb with. This 9437 is used to avoid quadratic behavior in tree tail merging. 9438 The default value is 10. 9439 9440 `max-tail-merge-iterations' 9441 The maximum amount of iterations of the pass over the 9442 function. This is used to limit compilation time in tree 9443 tail merging. The default value is 2. 9444 9445 `max-unrolled-insns' 9446 The maximum number of instructions that a loop may have to be 9447 unrolled. If a loop is unrolled, this parameter also 9448 determines how many times the loop code is unrolled. 9449 9450 `max-average-unrolled-insns' 9451 The maximum number of instructions biased by probabilities of 9452 their execution that a loop may have to be unrolled. If a 9453 loop is unrolled, this parameter also determines how many 9454 times the loop code is unrolled. 9455 9456 `max-unroll-times' 9457 The maximum number of unrollings of a single loop. 9458 9459 `max-peeled-insns' 9460 The maximum number of instructions that a loop may have to be 9461 peeled. If a loop is peeled, this parameter also determines 9462 how many times the loop code is peeled. 9463 9464 `max-peel-times' 9465 The maximum number of peelings of a single loop. 9466 9467 `max-peel-branches' 9468 The maximum number of branches on the hot path through the 9469 peeled sequence. 9470 9471 `max-completely-peeled-insns' 9472 The maximum number of insns of a completely peeled loop. 9473 9474 `max-completely-peel-times' 9475 The maximum number of iterations of a loop to be suitable for 9476 complete peeling. 9477 9478 `max-completely-peel-loop-nest-depth' 9479 The maximum depth of a loop nest suitable for complete 9480 peeling. 9481 9482 `max-unswitch-insns' 9483 The maximum number of insns of an unswitched loop. 9484 9485 `max-unswitch-level' 9486 The maximum number of branches unswitched in a single loop. 9487 9488 `lim-expensive' 9489 The minimum cost of an expensive expression in the loop 9490 invariant motion. 9491 9492 `iv-consider-all-candidates-bound' 9493 Bound on number of candidates for induction variables, below 9494 which all candidates are considered for each use in induction 9495 variable optimizations. If there are more candidates than 9496 this, only the most relevant ones are considered to avoid 9497 quadratic time complexity. 9498 9499 `iv-max-considered-uses' 9500 The induction variable optimizations give up on loops that 9501 contain more induction variable uses. 9502 9503 `iv-always-prune-cand-set-bound' 9504 If the number of candidates in the set is smaller than this 9505 value, always try to remove unnecessary ivs from the set when 9506 adding a new one. 9507 9508 `scev-max-expr-size' 9509 Bound on size of expressions used in the scalar evolutions 9510 analyzer. Large expressions slow the analyzer. 9511 9512 `scev-max-expr-complexity' 9513 Bound on the complexity of the expressions in the scalar 9514 evolutions analyzer. Complex expressions slow the analyzer. 9515 9516 `omega-max-vars' 9517 The maximum number of variables in an Omega constraint system. 9518 The default value is 128. 9519 9520 `omega-max-geqs' 9521 The maximum number of inequalities in an Omega constraint 9522 system. The default value is 256. 9523 9524 `omega-max-eqs' 9525 The maximum number of equalities in an Omega constraint 9526 system. The default value is 128. 9527 9528 `omega-max-wild-cards' 9529 The maximum number of wildcard variables that the Omega 9530 solver is able to insert. The default value is 18. 9531 9532 `omega-hash-table-size' 9533 The size of the hash table in the Omega solver. The default 9534 value is 550. 9535 9536 `omega-max-keys' 9537 The maximal number of keys used by the Omega solver. The 9538 default value is 500. 9539 9540 `omega-eliminate-redundant-constraints' 9541 When set to 1, use expensive methods to eliminate all 9542 redundant constraints. The default value is 0. 9543 9544 `vect-max-version-for-alignment-checks' 9545 The maximum number of run-time checks that can be performed 9546 when doing loop versioning for alignment in the vectorizer. 9547 9548 `vect-max-version-for-alias-checks' 9549 The maximum number of run-time checks that can be performed 9550 when doing loop versioning for alias in the vectorizer. 9551 9552 `vect-max-peeling-for-alignment' 9553 The maximum number of loop peels to enhance access alignment 9554 for vectorizer. Value -1 means 'no limit'. 9555 9556 `max-iterations-to-track' 9557 The maximum number of iterations of a loop the brute-force 9558 algorithm for analysis of the number of iterations of the 9559 loop tries to evaluate. 9560 9561 `hot-bb-count-ws-permille' 9562 A basic block profile count is considered hot if it 9563 contributes to the given permillage (i.e. 0...1000) of the 9564 entire profiled execution. 9565 9566 `hot-bb-frequency-fraction' 9567 Select fraction of the entry block frequency of executions of 9568 basic block in function given basic block needs to have to be 9569 considered hot. 9570 9571 `max-predicted-iterations' 9572 The maximum number of loop iterations we predict statically. 9573 This is useful in cases where a function contains a single 9574 loop with known bound and another loop with unknown bound. 9575 The known number of iterations is predicted correctly, while 9576 the unknown number of iterations average to roughly 10. This 9577 means that the loop without bounds appears artificially cold 9578 relative to the other one. 9579 9580 `builtin-expect-probability' 9581 Control the probability of the expression having the 9582 specified value. This parameter takes a percentage (i.e. 0 9583 ... 100) as input. The default probability of 90 is obtained 9584 empirically. 9585 9586 `align-threshold' 9587 Select fraction of the maximal frequency of executions of a 9588 basic block in a function to align the basic block. 9589 9590 `align-loop-iterations' 9591 A loop expected to iterate at least the selected number of 9592 iterations is aligned. 9593 9594 `tracer-dynamic-coverage' 9595 `tracer-dynamic-coverage-feedback' 9596 This value is used to limit superblock formation once the 9597 given percentage of executed instructions is covered. This 9598 limits unnecessary code size expansion. 9599 9600 The `tracer-dynamic-coverage-feedback' parameter is used only 9601 when profile feedback is available. The real profiles (as 9602 opposed to statically estimated ones) are much less balanced 9603 allowing the threshold to be larger value. 9604 9605 `tracer-max-code-growth' 9606 Stop tail duplication once code growth has reached given 9607 percentage. This is a rather artificial limit, as most of 9608 the duplicates are eliminated later in cross jumping, so it 9609 may be set to much higher values than is the desired code 9610 growth. 9611 9612 `tracer-min-branch-ratio' 9613 Stop reverse growth when the reverse probability of best edge 9614 is less than this threshold (in percent). 9615 9616 `tracer-min-branch-ratio' 9617 `tracer-min-branch-ratio-feedback' 9618 Stop forward growth if the best edge has probability lower 9619 than this threshold. 9620 9621 Similarly to `tracer-dynamic-coverage' two values are 9622 present, one for compilation for profile feedback and one for 9623 compilation without. The value for compilation with profile 9624 feedback needs to be more conservative (higher) in order to 9625 make tracer effective. 9626 9627 `max-cse-path-length' 9628 The maximum number of basic blocks on path that CSE considers. 9629 The default is 10. 9630 9631 `max-cse-insns' 9632 The maximum number of instructions CSE processes before 9633 flushing. The default is 1000. 9634 9635 `ggc-min-expand' 9636 GCC uses a garbage collector to manage its own memory 9637 allocation. This parameter specifies the minimum percentage 9638 by which the garbage collector's heap should be allowed to 9639 expand between collections. Tuning this may improve 9640 compilation speed; it has no effect on code generation. 9641 9642 The default is 30% + 70% * (RAM/1GB) with an upper bound of 9643 100% when RAM >= 1GB. If `getrlimit' is available, the 9644 notion of "RAM" is the smallest of actual RAM and 9645 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to 9646 calculate RAM on a particular platform, the lower bound of 9647 30% is used. Setting this parameter and `ggc-min-heapsize' 9648 to zero causes a full collection to occur at every 9649 opportunity. This is extremely slow, but can be useful for 9650 debugging. 9651 9652 `ggc-min-heapsize' 9653 Minimum size of the garbage collector's heap before it begins 9654 bothering to collect garbage. The first collection occurs 9655 after the heap expands by `ggc-min-expand'% beyond 9656 `ggc-min-heapsize'. Again, tuning this may improve 9657 compilation speed, and has no effect on code generation. 9658 9659 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 9660 that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 9661 exceeded, but with a lower bound of 4096 (four megabytes) and 9662 an upper bound of 131072 (128 megabytes). If GCC is not able 9663 to calculate RAM on a particular platform, the lower bound is 9664 used. Setting this parameter very large effectively disables 9665 garbage collection. Setting this parameter and 9666 `ggc-min-expand' to zero causes a full collection to occur at 9667 every opportunity. 9668 9669 `max-reload-search-insns' 9670 The maximum number of instruction reload should look backward 9671 for equivalent register. Increasing values mean more 9672 aggressive optimization, making the compilation time increase 9673 with probably slightly better performance. The default value 9674 is 100. 9675 9676 `max-cselib-memory-locations' 9677 The maximum number of memory locations cselib should take 9678 into account. Increasing values mean more aggressive 9679 optimization, making the compilation time increase with 9680 probably slightly better performance. The default value is 9681 500. 9682 9683 `reorder-blocks-duplicate' 9684 `reorder-blocks-duplicate-feedback' 9685 Used by the basic block reordering pass to decide whether to 9686 use unconditional branch or duplicate the code on its 9687 destination. Code is duplicated when its estimated size is 9688 smaller than this value multiplied by the estimated size of 9689 unconditional jump in the hot spots of the program. 9690 9691 The `reorder-block-duplicate-feedback' parameter is used only 9692 when profile feedback is available. It may be set to higher 9693 values than `reorder-block-duplicate' since information about 9694 the hot spots is more accurate. 9695 9696 `max-sched-ready-insns' 9697 The maximum number of instructions ready to be issued the 9698 scheduler should consider at any given time during the first 9699 scheduling pass. Increasing values mean more thorough 9700 searches, making the compilation time increase with probably 9701 little benefit. The default value is 100. 9702 9703 `max-sched-region-blocks' 9704 The maximum number of blocks in a region to be considered for 9705 interblock scheduling. The default value is 10. 9706 9707 `max-pipeline-region-blocks' 9708 The maximum number of blocks in a region to be considered for 9709 pipelining in the selective scheduler. The default value is 9710 15. 9711 9712 `max-sched-region-insns' 9713 The maximum number of insns in a region to be considered for 9714 interblock scheduling. The default value is 100. 9715 9716 `max-pipeline-region-insns' 9717 The maximum number of insns in a region to be considered for 9718 pipelining in the selective scheduler. The default value is 9719 200. 9720 9721 `min-spec-prob' 9722 The minimum probability (in percents) of reaching a source 9723 block for interblock speculative scheduling. The default 9724 value is 40. 9725 9726 `max-sched-extend-regions-iters' 9727 The maximum number of iterations through CFG to extend 9728 regions. A value of 0 (the default) disables region 9729 extensions. 9730 9731 `max-sched-insn-conflict-delay' 9732 The maximum conflict delay for an insn to be considered for 9733 speculative motion. The default value is 3. 9734 9735 `sched-spec-prob-cutoff' 9736 The minimal probability of speculation success (in percents), 9737 so that speculative insns are scheduled. The default value 9738 is 40. 9739 9740 `sched-spec-state-edge-prob-cutoff' 9741 The minimum probability an edge must have for the scheduler 9742 to save its state across it. The default value is 10. 9743 9744 `sched-mem-true-dep-cost' 9745 Minimal distance (in CPU cycles) between store and load 9746 targeting same memory locations. The default value is 1. 9747 9748 `selsched-max-lookahead' 9749 The maximum size of the lookahead window of selective 9750 scheduling. It is a depth of search for available 9751 instructions. The default value is 50. 9752 9753 `selsched-max-sched-times' 9754 The maximum number of times that an instruction is scheduled 9755 during selective scheduling. This is the limit on the number 9756 of iterations through which the instruction may be pipelined. 9757 The default value is 2. 9758 9759 `selsched-max-insns-to-rename' 9760 The maximum number of best instructions in the ready list 9761 that are considered for renaming in the selective scheduler. 9762 The default value is 2. 9763 9764 `sms-min-sc' 9765 The minimum value of stage count that swing modulo scheduler 9766 generates. The default value is 2. 9767 9768 `max-last-value-rtl' 9769 The maximum size measured as number of RTLs that can be 9770 recorded in an expression in combiner for a pseudo register 9771 as last known value of that register. The default is 10000. 9772 9773 `max-combine-insns' 9774 The maximum number of instructions the RTL combiner tries to 9775 combine. The default value is 2 at `-Og' and 4 otherwise. 9776 9777 `integer-share-limit' 9778 Small integer constants can use a shared data structure, 9779 reducing the compiler's memory usage and increasing its 9780 speed. This sets the maximum value of a shared integer 9781 constant. The default value is 256. 9782 9783 `ssp-buffer-size' 9784 The minimum size of buffers (i.e. arrays) that receive stack 9785 smashing protection when `-fstack-protection' is used. 9786 9787 `min-size-for-stack-sharing' 9788 The minimum size of variables taking part in stack slot 9789 sharing when not optimizing. The default value is 32. 9790 9791 `max-jump-thread-duplication-stmts' 9792 Maximum number of statements allowed in a block that needs to 9793 be duplicated when threading jumps. 9794 9795 `max-fields-for-field-sensitive' 9796 Maximum number of fields in a structure treated in a field 9797 sensitive manner during pointer analysis. The default is zero 9798 for `-O0' and `-O1', and 100 for `-Os', `-O2', and `-O3'. 9799 9800 `prefetch-latency' 9801 Estimate on average number of instructions that are executed 9802 before prefetch finishes. The distance prefetched ahead is 9803 proportional to this constant. Increasing this number may 9804 also lead to less streams being prefetched (see 9805 `simultaneous-prefetches'). 9806 9807 `simultaneous-prefetches' 9808 Maximum number of prefetches that can run at the same time. 9809 9810 `l1-cache-line-size' 9811 The size of cache line in L1 cache, in bytes. 9812 9813 `l1-cache-size' 9814 The size of L1 cache, in kilobytes. 9815 9816 `l2-cache-size' 9817 The size of L2 cache, in kilobytes. 9818 9819 `min-insn-to-prefetch-ratio' 9820 The minimum ratio between the number of instructions and the 9821 number of prefetches to enable prefetching in a loop. 9822 9823 `prefetch-min-insn-to-mem-ratio' 9824 The minimum ratio between the number of instructions and the 9825 number of memory references to enable prefetching in a loop. 9826 9827 `use-canonical-types' 9828 Whether the compiler should use the "canonical" type system. 9829 By default, this should always be 1, which uses a more 9830 efficient internal mechanism for comparing types in C++ and 9831 Objective-C++. However, if bugs in the canonical type system 9832 are causing compilation failures, set this value to 0 to 9833 disable canonical types. 9834 9835 `switch-conversion-max-branch-ratio' 9836 Switch initialization conversion refuses to create arrays 9837 that are bigger than `switch-conversion-max-branch-ratio' 9838 times the number of branches in the switch. 9839 9840 `max-partial-antic-length' 9841 Maximum length of the partial antic set computed during the 9842 tree partial redundancy elimination optimization 9843 (`-ftree-pre') when optimizing at `-O3' and above. For some 9844 sorts of source code the enhanced partial redundancy 9845 elimination optimization can run away, consuming all of the 9846 memory available on the host machine. This parameter sets a 9847 limit on the length of the sets that are computed, which 9848 prevents the runaway behavior. Setting a value of 0 for this 9849 parameter allows an unlimited set length. 9850 9851 `sccvn-max-scc-size' 9852 Maximum size of a strongly connected component (SCC) during 9853 SCCVN processing. If this limit is hit, SCCVN processing for 9854 the whole function is not done and optimizations depending on 9855 it are disabled. The default maximum SCC size is 10000. 9856 9857 `sccvn-max-alias-queries-per-access' 9858 Maximum number of alias-oracle queries we perform when 9859 looking for redundancies for loads and stores. If this limit 9860 is hit the search is aborted and the load or store is not 9861 considered redundant. The number of queries is 9862 algorithmically limited to the number of stores on all paths 9863 from the load to the function entry. The default maxmimum 9864 number of queries is 1000. 9865 9866 `ira-max-loops-num' 9867 IRA uses regional register allocation by default. If a 9868 function contains more loops than the number given by this 9869 parameter, only at most the given number of the most 9870 frequently-executed loops form regions for regional register 9871 allocation. The default value of the parameter is 100. 9872 9873 `ira-max-conflict-table-size' 9874 Although IRA uses a sophisticated algorithm to compress the 9875 conflict table, the table can still require excessive amounts 9876 of memory for huge functions. If the conflict table for a 9877 function could be more than the size in MB given by this 9878 parameter, the register allocator instead uses a faster, 9879 simpler, and lower-quality algorithm that does not require 9880 building a pseudo-register conflict table. The default value 9881 of the parameter is 2000. 9882 9883 `ira-loop-reserved-regs' 9884 IRA can be used to evaluate more accurate register pressure 9885 in loops for decisions to move loop invariants (see `-O3'). 9886 The number of available registers reserved for some other 9887 purposes is given by this parameter. The default value of 9888 the parameter is 2, which is the minimal number of registers 9889 needed by typical instructions. This value is the best found 9890 from numerous experiments. 9891 9892 `lra-inheritance-ebb-probability-cutoff' 9893 LRA tries to reuse values reloaded in registers in subsequent 9894 insns. This optimization is called inheritance. EBB is used 9895 as a region to do this optimization. The parameter defines a 9896 minimal fall-through edge probability in percentage used to 9897 add BB to inheritance EBB in LRA. The default value of the 9898 parameter is 40. The value was chosen from numerous runs of 9899 SPEC2000 on x86-64. 9900 9901 `loop-invariant-max-bbs-in-loop' 9902 Loop invariant motion can be very expensive, both in 9903 compilation time and in amount of needed compile-time memory, 9904 with very large loops. Loops with more basic blocks than 9905 this parameter won't have loop invariant motion optimization 9906 performed on them. The default value of the parameter is 9907 1000 for `-O1' and 10000 for `-O2' and above. 9908 9909 `loop-max-datarefs-for-datadeps' 9910 Building data dapendencies is expensive for very large loops. 9911 This parameter limits the number of data references in loops 9912 that are considered for data dependence analysis. These 9913 large loops are no handled by the optimizations using loop 9914 data dependencies. The default value is 1000. 9915 9916 `max-vartrack-size' 9917 Sets a maximum number of hash table slots to use during 9918 variable tracking dataflow analysis of any function. If this 9919 limit is exceeded with variable tracking at assignments 9920 enabled, analysis for that function is retried without it, 9921 after removing all debug insns from the function. If the 9922 limit is exceeded even without debug insns, var tracking 9923 analysis is completely disabled for the function. Setting 9924 the parameter to zero makes it unlimited. 9925 9926 `max-vartrack-expr-depth' 9927 Sets a maximum number of recursion levels when attempting to 9928 map variable names or debug temporaries to value expressions. 9929 This trades compilation time for more complete debug 9930 information. If this is set too low, value expressions that 9931 are available and could be represented in debug information 9932 may end up not being used; setting this higher may enable the 9933 compiler to find more complex debug expressions, but compile 9934 time and memory use may grow. The default is 12. 9935 9936 `min-nondebug-insn-uid' 9937 Use uids starting at this parameter for nondebug insns. The 9938 range below the parameter is reserved exclusively for debug 9939 insns created by `-fvar-tracking-assignments', but debug 9940 insns may get (non-overlapping) uids above it if the reserved 9941 range is exhausted. 9942 9943 `ipa-sra-ptr-growth-factor' 9944 IPA-SRA replaces a pointer to an aggregate with one or more 9945 new parameters only when their cumulative size is less or 9946 equal to `ipa-sra-ptr-growth-factor' times the size of the 9947 original pointer parameter. 9948 9949 `sra-max-scalarization-size-Ospeed' 9950 9951 `sra-max-scalarization-size-Osize' 9952 The two Scalar Reduction of Aggregates passes (SRA and 9953 IPA-SRA) aim to replace scalar parts of aggregates with uses 9954 of independent scalar variables. These parameters control 9955 the maximum size, in storage units, of aggregate which is 9956 considered for replacement when compiling for speed 9957 (`sra-max-scalarization-size-Ospeed') or size 9958 (`sra-max-scalarization-size-Osize') respectively. 9959 9960 `tm-max-aggregate-size' 9961 When making copies of thread-local variables in a 9962 transaction, this parameter specifies the size in bytes after 9963 which variables are saved with the logging functions as 9964 opposed to save/restore code sequence pairs. This option 9965 only applies when using `-fgnu-tm'. 9966 9967 `graphite-max-nb-scop-params' 9968 To avoid exponential effects in the Graphite loop transforms, 9969 the number of parameters in a Static Control Part (SCoP) is 9970 bounded. The default value is 10 parameters. A variable 9971 whose value is unknown at compilation time and defined 9972 outside a SCoP is a parameter of the SCoP. 9973 9974 `graphite-max-bbs-per-function' 9975 To avoid exponential effects in the detection of SCoPs, the 9976 size of the functions analyzed by Graphite is bounded. The 9977 default value is 100 basic blocks. 9978 9979 `loop-block-tile-size' 9980 Loop blocking or strip mining transforms, enabled with 9981 `-floop-block' or `-floop-strip-mine', strip mine each loop 9982 in the loop nest by a given number of iterations. The strip 9983 length can be changed using the `loop-block-tile-size' 9984 parameter. The default value is 51 iterations. 9985 9986 `loop-unroll-jam-size' 9987 Specify the unroll factor for the `-floop-unroll-and-jam' 9988 option. The default value is 4. 9989 9990 `loop-unroll-jam-depth' 9991 Specify the dimension to be unrolled (counting from the most 9992 inner loop) for the `-floop-unroll-and-jam'. The default 9993 value is 2. 9994 9995 `ipa-cp-value-list-size' 9996 IPA-CP attempts to track all possible values and types passed 9997 to a function's parameter in order to propagate them and 9998 perform devirtualization. `ipa-cp-value-list-size' is the 9999 maximum number of values and types it stores per one formal 10000 parameter of a function. 10001 10002 `ipa-cp-eval-threshold' 10003 IPA-CP calculates its own score of cloning profitability 10004 heuristics and performs those cloning opportunities with 10005 scores that exceed `ipa-cp-eval-threshold'. 10006 10007 `ipa-cp-recursion-penalty' 10008 Percentage penalty the recursive functions will receive when 10009 they are evaluated for cloning. 10010 10011 `ipa-cp-single-call-penalty' 10012 Percentage penalty functions containg a single call to another 10013 function will receive when they are evaluated for cloning. 10014 10015 `ipa-max-agg-items' 10016 IPA-CP is also capable to propagate a number of scalar values 10017 passed in an aggregate. `ipa-max-agg-items' controls the 10018 maximum number of such values per one parameter. 10019 10020 `ipa-cp-loop-hint-bonus' 10021 When IPA-CP determines that a cloning candidate would make 10022 the number of iterations of a loop known, it adds a bonus of 10023 `ipa-cp-loop-hint-bonus' to the profitability score of the 10024 candidate. 10025 10026 `ipa-cp-array-index-hint-bonus' 10027 When IPA-CP determines that a cloning candidate would make 10028 the index of an array access known, it adds a bonus of 10029 `ipa-cp-array-index-hint-bonus' to the profitability score of 10030 the candidate. 10031 10032 `ipa-max-aa-steps' 10033 During its analysis of function bodies, IPA-CP employs alias 10034 analysis in order to track values pointed to by function 10035 parameters. In order not spend too much time analyzing huge 10036 functions, it gives up and consider all memory clobbered 10037 after examining `ipa-max-aa-steps' statements modifying 10038 memory. 10039 10040 `lto-partitions' 10041 Specify desired number of partitions produced during WHOPR 10042 compilation. The number of partitions should exceed the 10043 number of CPUs used for compilation. The default value is 32. 10044 10045 `lto-minpartition' 10046 Size of minimal partition for WHOPR (in estimated 10047 instructions). This prevents expenses of splitting very 10048 small programs into too many partitions. 10049 10050 `cxx-max-namespaces-for-diagnostic-help' 10051 The maximum number of namespaces to consult for suggestions 10052 when C++ name lookup fails for an identifier. The default is 10053 1000. 10054 10055 `sink-frequency-threshold' 10056 The maximum relative execution frequency (in percents) of the 10057 target block relative to a statement's original block to 10058 allow statement sinking of a statement. Larger numbers 10059 result in more aggressive statement sinking. The default 10060 value is 75. A small positive adjustment is applied for 10061 statements with memory operands as those are even more 10062 profitable so sink. 10063 10064 `max-stores-to-sink' 10065 The maximum number of conditional stores paires that can be 10066 sunk. Set to 0 if either vectorization (`-ftree-vectorize') 10067 or if-conversion (`-ftree-loop-if-convert') is disabled. The 10068 default is 2. 10069 10070 `allow-store-data-races' 10071 Allow optimizers to introduce new data races on stores. Set 10072 to 1 to allow, otherwise to 0. This option is enabled by 10073 default at optimization level `-Ofast'. 10074 10075 `case-values-threshold' 10076 The smallest number of different values for which it is best 10077 to use a jump-table instead of a tree of conditional 10078 branches. If the value is 0, use the default for the 10079 machine. The default is 0. 10080 10081 `tree-reassoc-width' 10082 Set the maximum number of instructions executed in parallel in 10083 reassociated tree. This parameter overrides target dependent 10084 heuristics used by default if has non zero value. 10085 10086 `sched-pressure-algorithm' 10087 Choose between the two available implementations of 10088 `-fsched-pressure'. Algorithm 1 is the original 10089 implementation and is the more likely to prevent instructions 10090 from being reordered. Algorithm 2 was designed to be a 10091 compromise between the relatively conservative approach taken 10092 by algorithm 1 and the rather aggressive approach taken by 10093 the default scheduler. It relies more heavily on having a 10094 regular register file and accurate register pressure classes. 10095 See `haifa-sched.c' in the GCC sources for more details. 10096 10097 The default choice depends on the target. 10098 10099 `max-slsr-cand-scan' 10100 Set the maximum number of existing candidates that are 10101 considered when seeking a basis for a new straight-line 10102 strength reduction candidate. 10103 10104 `asan-globals' 10105 Enable buffer overflow detection for global objects. This 10106 kind of protection is enabled by default if you are using 10107 `-fsanitize=address' option. To disable global objects 10108 protection use `--param asan-globals=0'. 10109 10110 `asan-stack' 10111 Enable buffer overflow detection for stack objects. This 10112 kind of protection is enabled by default when 10113 using`-fsanitize=address'. To disable stack protection use 10114 `--param asan-stack=0' option. 10115 10116 `asan-instrument-reads' 10117 Enable buffer overflow detection for memory reads. This kind 10118 of protection is enabled by default when using 10119 `-fsanitize=address'. To disable memory reads protection use 10120 `--param asan-instrument-reads=0'. 10121 10122 `asan-instrument-writes' 10123 Enable buffer overflow detection for memory writes. This 10124 kind of protection is enabled by default when using 10125 `-fsanitize=address'. To disable memory writes protection use 10126 `--param asan-instrument-writes=0' option. 10127 10128 `asan-memintrin' 10129 Enable detection for built-in functions. This kind of 10130 protection is enabled by default when using 10131 `-fsanitize=address'. To disable built-in functions 10132 protection use `--param asan-memintrin=0'. 10133 10134 `asan-use-after-return' 10135 Enable detection of use-after-return. This kind of protection 10136 is enabled by default when using `-fsanitize=address' option. 10137 To disable use-after-return detection use `--param 10138 asan-use-after-return=0'. 10139 10140 `asan-instrumentation-with-call-threshold' 10141 If number of memory accesses in function being instrumented 10142 is greater or equal to this number, use callbacks instead of 10143 inline checks. E.g. to disable inline code use `--param 10144 asan-instrumentation-with-call-threshold=0'. 10145 10146 `chkp-max-ctor-size' 10147 Static constructors generated by Pointer Bounds Checker may 10148 become very large and significantly increase compile time at 10149 optimization level `-O1' and higher. This parameter is a 10150 maximum nubmer of statements in a single generated 10151 constructor. Default value is 5000. 10152 10153 `max-fsm-thread-path-insns' 10154 Maximum number of instructions to copy when duplicating 10155 blocks on a finite state automaton jump thread path. The 10156 default is 100. 10157 10158 `max-fsm-thread-length' 10159 Maximum number of basic blocks on a finite state automaton 10160 jump thread path. The default is 10. 10161 10162 `max-fsm-thread-paths' 10163 Maximum number of new jump thread paths to create for a 10164 finite state automaton. The default is 50. 10165 10166 10167 10168File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 10169 101703.11 Options Controlling the Preprocessor 10171========================================= 10172 10173These options control the C preprocessor, which is run on each C source 10174file before actual compilation. 10175 10176 If you use the `-E' option, nothing is done except preprocessing. 10177Some of these options make sense only together with `-E' because they 10178cause the preprocessor output to be unsuitable for actual compilation. 10179 10180`-Wp,OPTION' 10181 You can use `-Wp,OPTION' to bypass the compiler driver and pass 10182 OPTION directly through to the preprocessor. If OPTION contains 10183 commas, it is split into multiple options at the commas. However, 10184 many options are modified, translated or interpreted by the 10185 compiler driver before being passed to the preprocessor, and `-Wp' 10186 forcibly bypasses this phase. The preprocessor's direct interface 10187 is undocumented and subject to change, so whenever possible you 10188 should avoid using `-Wp' and let the driver handle the options 10189 instead. 10190 10191`-Xpreprocessor OPTION' 10192 Pass OPTION as an option to the preprocessor. You can use this to 10193 supply system-specific preprocessor options that GCC does not 10194 recognize. 10195 10196 If you want to pass an option that takes an argument, you must use 10197 `-Xpreprocessor' twice, once for the option and once for the 10198 argument. 10199 10200`-no-integrated-cpp' 10201 Perform preprocessing as a separate pass before compilation. By 10202 default, GCC performs preprocessing as an integrated part of input 10203 tokenization and parsing. If this option is provided, the 10204 appropriate language front end (`cc1', `cc1plus', or `cc1obj' for 10205 C, C++, and Objective-C, respectively) is instead invoked twice, 10206 once for preprocessing only and once for actual compilation of the 10207 preprocessed input. This option may be useful in conjunction with 10208 the `-B' or `-wrapper' options to specify an alternate 10209 preprocessor or perform additional processing of the program 10210 source between normal preprocessing and compilation. 10211 10212`-D NAME' 10213 Predefine NAME as a macro, with definition `1'. 10214 10215`-D NAME=DEFINITION' 10216 The contents of DEFINITION are tokenized and processed as if they 10217 appeared during translation phase three in a `#define' directive. 10218 In particular, the definition will be truncated by embedded 10219 newline characters. 10220 10221 If you are invoking the preprocessor from a shell or shell-like 10222 program you may need to use the shell's quoting syntax to protect 10223 characters such as spaces that have a meaning in the shell syntax. 10224 10225 If you wish to define a function-like macro on the command line, 10226 write its argument list with surrounding parentheses before the 10227 equals sign (if any). Parentheses are meaningful to most shells, 10228 so you will need to quote the option. With `sh' and `csh', 10229 `-D'NAME(ARGS...)=DEFINITION'' works. 10230 10231 `-D' and `-U' options are processed in the order they are given on 10232 the command line. All `-imacros FILE' and `-include FILE' options 10233 are processed after all `-D' and `-U' options. 10234 10235`-U NAME' 10236 Cancel any previous definition of NAME, either built in or 10237 provided with a `-D' option. 10238 10239`-undef' 10240 Do not predefine any system-specific or GCC-specific macros. The 10241 standard predefined macros remain defined. 10242 10243`-I DIR' 10244 Add the directory DIR to the list of directories to be searched 10245 for header files. Directories named by `-I' are searched before 10246 the standard system include directories. If the directory DIR is 10247 a standard system include directory, the option is ignored to 10248 ensure that the default search order for system directories and 10249 the special treatment of system headers are not defeated . If DIR 10250 begins with `=', then the `=' will be replaced by the sysroot 10251 prefix; see `--sysroot' and `-isysroot'. 10252 10253`-o FILE' 10254 Write output to FILE. This is the same as specifying FILE as the 10255 second non-option argument to `cpp'. `gcc' has a different 10256 interpretation of a second non-option argument, so you must use 10257 `-o' to specify the output file. 10258 10259`-Wall' 10260 Turns on all optional warnings which are desirable for normal code. 10261 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 10262 warning about integer promotion causing a change of sign in `#if' 10263 expressions. Note that many of the preprocessor's warnings are on 10264 by default and have no options to control them. 10265 10266`-Wcomment' 10267`-Wcomments' 10268 Warn whenever a comment-start sequence `/*' appears in a `/*' 10269 comment, or whenever a backslash-newline appears in a `//' comment. 10270 (Both forms have the same effect.) 10271 10272`-Wtrigraphs' 10273 Most trigraphs in comments cannot affect the meaning of the 10274 program. However, a trigraph that would form an escaped newline 10275 (`??/' at the end of a line) can, by changing where the comment 10276 begins or ends. Therefore, only trigraphs that would form escaped 10277 newlines produce warnings inside a comment. 10278 10279 This option is implied by `-Wall'. If `-Wall' is not given, this 10280 option is still enabled unless trigraphs are enabled. To get 10281 trigraph conversion without warnings, but get the other `-Wall' 10282 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 10283 10284`-Wtraditional' 10285 Warn about certain constructs that behave differently in 10286 traditional and ISO C. Also warn about ISO C constructs that have 10287 no traditional C equivalent, and problematic constructs which 10288 should be avoided. 10289 10290`-Wundef' 10291 Warn whenever an identifier which is not a macro is encountered in 10292 an `#if' directive, outside of `defined'. Such identifiers are 10293 replaced with zero. 10294 10295`-Wunused-macros' 10296 Warn about macros defined in the main file that are unused. A 10297 macro is "used" if it is expanded or tested for existence at least 10298 once. The preprocessor will also warn if the macro has not been 10299 used at the time it is redefined or undefined. 10300 10301 Built-in macros, macros defined on the command line, and macros 10302 defined in include files are not warned about. 10303 10304 _Note:_ If a macro is actually used, but only used in skipped 10305 conditional blocks, then CPP will report it as unused. To avoid 10306 the warning in such a case, you might improve the scope of the 10307 macro's definition by, for example, moving it into the first 10308 skipped block. Alternatively, you could provide a dummy use with 10309 something like: 10310 10311 #if defined the_macro_causing_the_warning 10312 #endif 10313 10314`-Wendif-labels' 10315 Warn whenever an `#else' or an `#endif' are followed by text. 10316 This usually happens in code of the form 10317 10318 #if FOO 10319 ... 10320 #else FOO 10321 ... 10322 #endif FOO 10323 10324 The second and third `FOO' should be in comments, but often are not 10325 in older programs. This warning is on by default. 10326 10327`-Werror' 10328 Make all warnings into hard errors. Source code which triggers 10329 warnings will be rejected. 10330 10331`-Wsystem-headers' 10332 Issue warnings for code in system headers. These are normally 10333 unhelpful in finding bugs in your own code, therefore suppressed. 10334 If you are responsible for the system library, you may want to see 10335 them. 10336 10337`-w' 10338 Suppress all warnings, including those which GNU CPP issues by 10339 default. 10340 10341`-pedantic' 10342 Issue all the mandatory diagnostics listed in the C standard. 10343 Some of them are left out by default, since they trigger 10344 frequently on harmless code. 10345 10346`-pedantic-errors' 10347 Issue all the mandatory diagnostics, and make all mandatory 10348 diagnostics into errors. This includes mandatory diagnostics that 10349 GCC issues without `-pedantic' but treats as warnings. 10350 10351`-M' 10352 Instead of outputting the result of preprocessing, output a rule 10353 suitable for `make' describing the dependencies of the main source 10354 file. The preprocessor outputs one `make' rule containing the 10355 object file name for that source file, a colon, and the names of 10356 all the included files, including those coming from `-include' or 10357 `-imacros' command-line options. 10358 10359 Unless specified explicitly (with `-MT' or `-MQ'), the object file 10360 name consists of the name of the source file with any suffix 10361 replaced with object file suffix and with any leading directory 10362 parts removed. If there are many included files then the rule is 10363 split into several lines using `\'-newline. The rule has no 10364 commands. 10365 10366 This option does not suppress the preprocessor's debug output, 10367 such as `-dM'. To avoid mixing such debug output with the 10368 dependency rules you should explicitly specify the dependency 10369 output file with `-MF', or use an environment variable like 10370 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 10371 output will still be sent to the regular output stream as normal. 10372 10373 Passing `-M' to the driver implies `-E', and suppresses warnings 10374 with an implicit `-w'. 10375 10376`-MM' 10377 Like `-M' but do not mention header files that are found in system 10378 header directories, nor header files that are included, directly 10379 or indirectly, from such a header. 10380 10381 This implies that the choice of angle brackets or double quotes in 10382 an `#include' directive does not in itself determine whether that 10383 header will appear in `-MM' dependency output. This is a slight 10384 change in semantics from GCC versions 3.0 and earlier. 10385 10386`-MF FILE' 10387 When used with `-M' or `-MM', specifies a file to write the 10388 dependencies to. If no `-MF' switch is given the preprocessor 10389 sends the rules to the same place it would have sent preprocessed 10390 output. 10391 10392 When used with the driver options `-MD' or `-MMD', `-MF' overrides 10393 the default dependency output file. 10394 10395`-MG' 10396 In conjunction with an option such as `-M' requesting dependency 10397 generation, `-MG' assumes missing header files are generated files 10398 and adds them to the dependency list without raising an error. 10399 The dependency filename is taken directly from the `#include' 10400 directive without prepending any path. `-MG' also suppresses 10401 preprocessed output, as a missing header file renders this useless. 10402 10403 This feature is used in automatic updating of makefiles. 10404 10405`-MP' 10406 This option instructs CPP to add a phony target for each dependency 10407 other than the main file, causing each to depend on nothing. These 10408 dummy rules work around errors `make' gives if you remove header 10409 files without updating the `Makefile' to match. 10410 10411 This is typical output: 10412 10413 test.o: test.c test.h 10414 10415 test.h: 10416 10417`-MT TARGET' 10418 Change the target of the rule emitted by dependency generation. By 10419 default CPP takes the name of the main input file, deletes any 10420 directory components and any file suffix such as `.c', and appends 10421 the platform's usual object suffix. The result is the target. 10422 10423 An `-MT' option will set the target to be exactly the string you 10424 specify. If you want multiple targets, you can specify them as a 10425 single argument to `-MT', or use multiple `-MT' options. 10426 10427 For example, `-MT '$(objpfx)foo.o'' might give 10428 10429 $(objpfx)foo.o: foo.c 10430 10431`-MQ TARGET' 10432 Same as `-MT', but it quotes any characters which are special to 10433 Make. `-MQ '$(objpfx)foo.o'' gives 10434 10435 $$(objpfx)foo.o: foo.c 10436 10437 The default target is automatically quoted, as if it were given 10438 with `-MQ'. 10439 10440`-MD' 10441 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 10442 implied. The driver determines FILE based on whether an `-o' 10443 option is given. If it is, the driver uses its argument but with 10444 a suffix of `.d', otherwise it takes the name of the input file, 10445 removes any directory components and suffix, and applies a `.d' 10446 suffix. 10447 10448 If `-MD' is used in conjunction with `-E', any `-o' switch is 10449 understood to specify the dependency output file (*note -MF: 10450 dashMF.), but if used without `-E', each `-o' is understood to 10451 specify a target object file. 10452 10453 Since `-E' is not implied, `-MD' can be used to generate a 10454 dependency output file as a side-effect of the compilation process. 10455 10456`-MMD' 10457 Like `-MD' except mention only user header files, not system 10458 header files. 10459 10460`-fpch-deps' 10461 When using precompiled headers (*note Precompiled Headers::), this 10462 flag will cause the dependency-output flags to also list the files 10463 from the precompiled header's dependencies. If not specified only 10464 the precompiled header would be listed and not the files that were 10465 used to create it because those files are not consulted when a 10466 precompiled header is used. 10467 10468`-fpch-preprocess' 10469 This option allows use of a precompiled header (*note Precompiled 10470 Headers::) together with `-E'. It inserts a special `#pragma', 10471 `#pragma GCC pch_preprocess "FILENAME"' in the output to mark the 10472 place where the precompiled header was found, and its FILENAME. 10473 When `-fpreprocessed' is in use, GCC recognizes this `#pragma' and 10474 loads the PCH. 10475 10476 This option is off by default, because the resulting preprocessed 10477 output is only really suitable as input to GCC. It is switched on 10478 by `-save-temps'. 10479 10480 You should not write this `#pragma' in your own code, but it is 10481 safe to edit the filename if the PCH file is available in a 10482 different location. The filename may be absolute or it may be 10483 relative to GCC's current directory. 10484 10485`-x c' 10486`-x c++' 10487`-x objective-c' 10488`-x assembler-with-cpp' 10489 Specify the source language: C, C++, Objective-C, or assembly. 10490 This has nothing to do with standards conformance or extensions; 10491 it merely selects which base syntax to expect. If you give none 10492 of these options, cpp will deduce the language from the extension 10493 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 10494 extensions for C++ and assembly are also recognized. If cpp does 10495 not recognize the extension, it will treat the file as C; this is 10496 the most generic mode. 10497 10498 _Note:_ Previous versions of cpp accepted a `-lang' option which 10499 selected both the language and the standards conformance level. 10500 This option has been removed, because it conflicts with the `-l' 10501 option. 10502 10503`-std=STANDARD' 10504`-ansi' 10505 Specify the standard to which the code should conform. Currently 10506 CPP knows about C and C++ standards; others may be added in the 10507 future. 10508 10509 STANDARD may be one of: 10510 `c90' 10511 `c89' 10512 `iso9899:1990' 10513 The ISO C standard from 1990. `c90' is the customary 10514 shorthand for this version of the standard. 10515 10516 The `-ansi' option is equivalent to `-std=c90'. 10517 10518 `iso9899:199409' 10519 The 1990 C standard, as amended in 1994. 10520 10521 `iso9899:1999' 10522 `c99' 10523 `iso9899:199x' 10524 `c9x' 10525 The revised ISO C standard, published in December 1999. 10526 Before publication, this was known as C9X. 10527 10528 `iso9899:2011' 10529 `c11' 10530 `c1x' 10531 The revised ISO C standard, published in December 2011. 10532 Before publication, this was known as C1X. 10533 10534 `gnu90' 10535 `gnu89' 10536 The 1990 C standard plus GNU extensions. This is the default. 10537 10538 `gnu99' 10539 `gnu9x' 10540 The 1999 C standard plus GNU extensions. 10541 10542 `gnu11' 10543 `gnu1x' 10544 The 2011 C standard plus GNU extensions. 10545 10546 `c++98' 10547 The 1998 ISO C++ standard plus amendments. 10548 10549 `gnu++98' 10550 The same as `-std=c++98' plus GNU extensions. This is the 10551 default for C++ code. 10552 10553`-I-' 10554 Split the include path. Any directories specified with `-I' 10555 options before `-I-' are searched only for headers requested with 10556 `#include "FILE"'; they are not searched for `#include <FILE>'. 10557 If additional directories are specified with `-I' options after 10558 the `-I-', those directories are searched for all `#include' 10559 directives. 10560 10561 In addition, `-I-' inhibits the use of the directory of the current 10562 file directory as the first search directory for `#include "FILE"'. 10563 This option has been deprecated. 10564 10565`-nostdinc' 10566 Do not search the standard system directories for header files. 10567 Only the directories you have specified with `-I' options (and the 10568 directory of the current file, if appropriate) are searched. 10569 10570`-nostdinc++' 10571 Do not search for header files in the C++-specific standard 10572 directories, but do still search the other standard directories. 10573 (This option is used when building the C++ library.) 10574 10575`-include FILE' 10576 Process FILE as if `#include "file"' appeared as the first line of 10577 the primary source file. However, the first directory searched 10578 for FILE is the preprocessor's working directory _instead of_ the 10579 directory containing the main source file. If not found there, it 10580 is searched for in the remainder of the `#include "..."' search 10581 chain as normal. 10582 10583 If multiple `-include' options are given, the files are included 10584 in the order they appear on the command line. 10585 10586`-imacros FILE' 10587 Exactly like `-include', except that any output produced by 10588 scanning FILE is thrown away. Macros it defines remain defined. 10589 This allows you to acquire all the macros from a header without 10590 also processing its declarations. 10591 10592 All files specified by `-imacros' are processed before all files 10593 specified by `-include'. 10594 10595`-idirafter DIR' 10596 Search DIR for header files, but do it _after_ all directories 10597 specified with `-I' and the standard system directories have been 10598 exhausted. DIR is treated as a system include directory. If DIR 10599 begins with `=', then the `=' will be replaced by the sysroot 10600 prefix; see `--sysroot' and `-isysroot'. 10601 10602`-iprefix PREFIX' 10603 Specify PREFIX as the prefix for subsequent `-iwithprefix' 10604 options. If the prefix represents a directory, you should include 10605 the final `/'. 10606 10607`-iwithprefix DIR' 10608`-iwithprefixbefore DIR' 10609 Append DIR to the prefix specified previously with `-iprefix', and 10610 add the resulting directory to the include search path. 10611 `-iwithprefixbefore' puts it in the same place `-I' would; 10612 `-iwithprefix' puts it where `-idirafter' would. 10613 10614`-isysroot DIR' 10615 This option is like the `--sysroot' option, but applies only to 10616 header files (except for Darwin targets, where it applies to both 10617 header files and libraries). See the `--sysroot' option for more 10618 information. 10619 10620`-imultilib DIR' 10621 Use DIR as a subdirectory of the directory containing 10622 target-specific C++ headers. 10623 10624`-isystem DIR' 10625 Search DIR for header files, after all directories specified by 10626 `-I' but before the standard system directories. Mark it as a 10627 system directory, so that it gets the same special treatment as is 10628 applied to the standard system directories. If DIR begins with 10629 `=', then the `=' will be replaced by the sysroot prefix; see 10630 `--sysroot' and `-isysroot'. 10631 10632`-cxx-isystem DIR' 10633 Search DIR for C++ header files, after all directories specified by 10634 `-I' but before the standard system directories. Mark it as a 10635 system directory, so that it gets the same special treatment as is 10636 applied to the standard system directories. 10637 10638`-iquote DIR' 10639 Search DIR only for header files requested with `#include "FILE"'; 10640 they are not searched for `#include <FILE>', before all 10641 directories specified by `-I' and before the standard system 10642 directories. If DIR begins with `=', then the `=' will be replaced 10643 by the sysroot prefix; see `--sysroot' and `-isysroot'. 10644 10645`-fdirectives-only' 10646 When preprocessing, handle directives, but do not expand macros. 10647 10648 The option's behavior depends on the `-E' and `-fpreprocessed' 10649 options. 10650 10651 With `-E', preprocessing is limited to the handling of directives 10652 such as `#define', `#ifdef', and `#error'. Other preprocessor 10653 operations, such as macro expansion and trigraph conversion are 10654 not performed. In addition, the `-dD' option is implicitly 10655 enabled. 10656 10657 With `-fpreprocessed', predefinition of command line and most 10658 builtin macros is disabled. Macros such as `__LINE__', which are 10659 contextually dependent, are handled normally. This enables 10660 compilation of files previously preprocessed with `-E 10661 -fdirectives-only'. 10662 10663 With both `-E' and `-fpreprocessed', the rules for 10664 `-fpreprocessed' take precedence. This enables full preprocessing 10665 of files previously preprocessed with `-E -fdirectives-only'. 10666 10667`-iremap SRC:DST' 10668 Replace the prefix SRC in __FILE__ with DST at expansion time. 10669 This option can be specified more than once. Processing stops at 10670 the first match. 10671 10672`-fdollars-in-identifiers' 10673 Accept `$' in identifiers. 10674 10675`-fextended-identifiers' 10676 Accept universal character names in identifiers. This option is 10677 enabled by default for C99 (and later C standard versions) and C++. 10678 10679`-fno-canonical-system-headers' 10680 When preprocessing, do not shorten system header paths with 10681 canonicalization. 10682 10683`-fpreprocessed' 10684 Indicate to the preprocessor that the input file has already been 10685 preprocessed. This suppresses things like macro expansion, 10686 trigraph conversion, escaped newline splicing, and processing of 10687 most directives. The preprocessor still recognizes and removes 10688 comments, so that you can pass a file preprocessed with `-C' to 10689 the compiler without problems. In this mode the integrated 10690 preprocessor is little more than a tokenizer for the front ends. 10691 10692 `-fpreprocessed' is implicit if the input file has one of the 10693 extensions `.i', `.ii' or `.mi'. These are the extensions that 10694 GCC uses for preprocessed files created by `-save-temps'. 10695 10696`-ftabstop=WIDTH' 10697 Set the distance between tab stops. This helps the preprocessor 10698 report correct column numbers in warnings or errors, even if tabs 10699 appear on the line. If the value is less than 1 or greater than 10700 100, the option is ignored. The default is 8. 10701 10702`-fdebug-cpp' 10703 This option is only useful for debugging GCC. When used with 10704 `-E', dumps debugging information about location maps. Every 10705 token in the output is preceded by the dump of the map its location 10706 belongs to. The dump of the map holding the location of a token 10707 would be: 10708 {`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} 10709 10710 When used without `-E', this option has no effect. 10711 10712`-ftrack-macro-expansion[=LEVEL]' 10713 Track locations of tokens across macro expansions. This allows the 10714 compiler to emit diagnostic about the current macro expansion stack 10715 when a compilation error occurs in a macro expansion. Using this 10716 option makes the preprocessor and the compiler consume more 10717 memory. The LEVEL parameter can be used to choose the level of 10718 precision of token location tracking thus decreasing the memory 10719 consumption if necessary. Value `0' of LEVEL de-activates this 10720 option just as if no `-ftrack-macro-expansion' was present on the 10721 command line. Value `1' tracks tokens locations in a degraded mode 10722 for the sake of minimal memory overhead. In this mode all tokens 10723 resulting from the expansion of an argument of a function-like 10724 macro have the same location. Value `2' tracks tokens locations 10725 completely. This value is the most memory hungry. When this 10726 option is given no argument, the default parameter value is `2'. 10727 10728 Note that `-ftrack-macro-expansion=2' is activated by default. 10729 10730`-fexec-charset=CHARSET' 10731 Set the execution character set, used for string and character 10732 constants. The default is UTF-8. CHARSET can be any encoding 10733 supported by the system's `iconv' library routine. 10734 10735`-fwide-exec-charset=CHARSET' 10736 Set the wide execution character set, used for wide string and 10737 character constants. The default is UTF-32 or UTF-16, whichever 10738 corresponds to the width of `wchar_t'. As with `-fexec-charset', 10739 CHARSET can be any encoding supported by the system's `iconv' 10740 library routine; however, you will have problems with encodings 10741 that do not fit exactly in `wchar_t'. 10742 10743`-finput-charset=CHARSET' 10744 Set the input character set, used for translation from the 10745 character set of the input file to the source character set used 10746 by GCC. If the locale does not specify, or GCC cannot get this 10747 information from the locale, the default is UTF-8. This can be 10748 overridden by either the locale or this command-line option. 10749 Currently the command-line option takes precedence if there's a 10750 conflict. CHARSET can be any encoding supported by the system's 10751 `iconv' library routine. 10752 10753`-fworking-directory' 10754 Enable generation of linemarkers in the preprocessor output that 10755 will let the compiler know the current working directory at the 10756 time of preprocessing. When this option is enabled, the 10757 preprocessor will emit, after the initial linemarker, a second 10758 linemarker with the current working directory followed by two 10759 slashes. GCC will use this directory, when it's present in the 10760 preprocessed input, as the directory emitted as the current 10761 working directory in some debugging information formats. This 10762 option is implicitly enabled if debugging information is enabled, 10763 but this can be inhibited with the negated form 10764 `-fno-working-directory'. If the `-P' flag is present in the 10765 command line, this option has no effect, since no `#line' 10766 directives are emitted whatsoever. 10767 10768`-fno-show-column' 10769 Do not print column numbers in diagnostics. This may be necessary 10770 if diagnostics are being scanned by a program that does not 10771 understand the column numbers, such as `dejagnu'. 10772 10773`-A PREDICATE=ANSWER' 10774 Make an assertion with the predicate PREDICATE and answer ANSWER. 10775 This form is preferred to the older form `-A PREDICATE(ANSWER)', 10776 which is still supported, because it does not use shell special 10777 characters. 10778 10779`-A -PREDICATE=ANSWER' 10780 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 10781 10782`-dCHARS' 10783 CHARS is a sequence of one or more of the following characters, 10784 and must not be preceded by a space. Other characters are 10785 interpreted by the compiler proper, or reserved for future 10786 versions of GCC, and so are silently ignored. If you specify 10787 characters whose behavior conflicts, the result is undefined. 10788 10789 `M' 10790 Instead of the normal output, generate a list of `#define' 10791 directives for all the macros defined during the execution of 10792 the preprocessor, including predefined macros. This gives 10793 you a way of finding out what is predefined in your version 10794 of the preprocessor. Assuming you have no file `foo.h', the 10795 command 10796 10797 touch foo.h; cpp -dM foo.h 10798 10799 will show all the predefined macros. 10800 10801 If you use `-dM' without the `-E' option, `-dM' is 10802 interpreted as a synonym for `-fdump-rtl-mach'. *Note 10803 Debugging Options: (gcc)Debugging Options. 10804 10805 `D' 10806 Like `M' except in two respects: it does _not_ include the 10807 predefined macros, and it outputs _both_ the `#define' 10808 directives and the result of preprocessing. Both kinds of 10809 output go to the standard output file. 10810 10811 `N' 10812 Like `D', but emit only the macro names, not their expansions. 10813 10814 `I' 10815 Output `#include' directives in addition to the result of 10816 preprocessing. 10817 10818 `U' 10819 Like `D' except that only macros that are expanded, or whose 10820 definedness is tested in preprocessor directives, are output; 10821 the output is delayed until the use or test of the macro; and 10822 `#undef' directives are also output for macros tested but 10823 undefined at the time. 10824 10825`-P' 10826 Inhibit generation of linemarkers in the output from the 10827 preprocessor. This might be useful when running the preprocessor 10828 on something that is not C code, and will be sent to a program 10829 which might be confused by the linemarkers. 10830 10831`-C' 10832 Do not discard comments. All comments are passed through to the 10833 output file, except for comments in processed directives, which 10834 are deleted along with the directive. 10835 10836 You should be prepared for side effects when using `-C'; it causes 10837 the preprocessor to treat comments as tokens in their own right. 10838 For example, comments appearing at the start of what would be a 10839 directive line have the effect of turning that line into an 10840 ordinary source line, since the first token on the line is no 10841 longer a `#'. 10842 10843`-CC' 10844 Do not discard comments, including during macro expansion. This is 10845 like `-C', except that comments contained within macros are also 10846 passed through to the output file where the macro is expanded. 10847 10848 In addition to the side-effects of the `-C' option, the `-CC' 10849 option causes all C++-style comments inside a macro to be 10850 converted to C-style comments. This is to prevent later use of 10851 that macro from inadvertently commenting out the remainder of the 10852 source line. 10853 10854 The `-CC' option is generally used to support lint comments. 10855 10856`-traditional-cpp' 10857 Try to imitate the behavior of old-fashioned C preprocessors, as 10858 opposed to ISO C preprocessors. 10859 10860`-trigraphs' 10861 Process trigraph sequences. These are three-character sequences, 10862 all starting with `??', that are defined by ISO C to stand for 10863 single characters. For example, `??/' stands for `\', so `'??/n'' 10864 is a character constant for a newline. By default, GCC ignores 10865 trigraphs, but in standard-conforming modes it converts them. See 10866 the `-std' and `-ansi' options. 10867 10868 The nine trigraphs and their replacements are 10869 10870 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 10871 Replacement: [ ] { } # \ ^ | ~ 10872 10873`-remap' 10874 Enable special code to work around file systems which only permit 10875 very short file names, such as MS-DOS. 10876 10877`--help' 10878`--target-help' 10879 Print text describing all the command-line options instead of 10880 preprocessing anything. 10881 10882`-v' 10883 Verbose mode. Print out GNU CPP's version number at the beginning 10884 of execution, and report the final form of the include path. 10885 10886`-H' 10887 Print the name of each header file used, in addition to other 10888 normal activities. Each name is indented to show how deep in the 10889 `#include' stack it is. Precompiled header files are also 10890 printed, even if they are found to be invalid; an invalid 10891 precompiled header file is printed with `...x' and a valid one 10892 with `...!' . 10893 10894`-version' 10895`--version' 10896 Print out GNU CPP's version number. With one dash, proceed to 10897 preprocess as normal. With two dashes, exit immediately. 10898 10899 10900File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 10901 109023.12 Passing Options to the Assembler 10903===================================== 10904 10905You can pass options to the assembler. 10906 10907`-Wa,OPTION' 10908 Pass OPTION as an option to the assembler. If OPTION contains 10909 commas, it is split into multiple options at the commas. 10910 10911`-Xassembler OPTION' 10912 Pass OPTION as an option to the assembler. You can use this to 10913 supply system-specific assembler options that GCC does not 10914 recognize. 10915 10916 If you want to pass an option that takes an argument, you must use 10917 `-Xassembler' twice, once for the option and once for the argument. 10918 10919 10920 10921File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 10922 109233.13 Options for Linking 10924======================== 10925 10926These options come into play when the compiler links object files into 10927an executable output file. They are meaningless if the compiler is not 10928doing a link step. 10929 10930`OBJECT-FILE-NAME' 10931 A file name that does not end in a special recognized suffix is 10932 considered to name an object file or library. (Object files are 10933 distinguished from libraries by the linker according to the file 10934 contents.) If linking is done, these object files are used as 10935 input to the linker. 10936 10937`-c' 10938`-S' 10939`-E' 10940 If any of these options is used, then the linker is not run, and 10941 object file names should not be used as arguments. *Note Overall 10942 Options::. 10943 10944`-fuse-ld=bfd' 10945 Use the `bfd' linker instead of the default linker. 10946 10947`-fuse-ld=gold' 10948 Use the `gold' linker instead of the default linker. 10949 10950`-lLIBRARY' 10951`-l LIBRARY' 10952 Search the library named LIBRARY when linking. (The second 10953 alternative with the library as a separate argument is only for 10954 POSIX compliance and is not recommended.) 10955 10956 It makes a difference where in the command you write this option; 10957 the linker searches and processes libraries and object files in 10958 the order they are specified. Thus, `foo.o -lz bar.o' searches 10959 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 10960 refers to functions in `z', those functions may not be loaded. 10961 10962 The linker searches a standard list of directories for the library, 10963 which is actually a file named `libLIBRARY.a'. The linker then 10964 uses this file as if it had been specified precisely by name. 10965 10966 The directories searched include several standard system 10967 directories plus any that you specify with `-L'. 10968 10969 Normally the files found this way are library files--archive files 10970 whose members are object files. The linker handles an archive 10971 file by scanning through it for members which define symbols that 10972 have so far been referenced but not defined. But if the file that 10973 is found is an ordinary object file, it is linked in the usual 10974 fashion. The only difference between using an `-l' option and 10975 specifying a file name is that `-l' surrounds LIBRARY with `lib' 10976 and `.a' and searches several directories. 10977 10978`-lobjc' 10979 You need this special case of the `-l' option in order to link an 10980 Objective-C or Objective-C++ program. 10981 10982`-nostartfiles' 10983 Do not use the standard system startup files when linking. The 10984 standard system libraries are used normally, unless `-nostdlib' or 10985 `-nodefaultlibs' is used. 10986 10987`-nodefaultlibs' 10988 Do not use the standard system libraries when linking. Only the 10989 libraries you specify are passed to the linker, and options 10990 specifying linkage of the system libraries, such as 10991 `-static-libgcc' or `-shared-libgcc', are ignored. The standard 10992 startup files are used normally, unless `-nostartfiles' is used. 10993 10994 The compiler may generate calls to `memcmp', `memset', `memcpy' 10995 and `memmove'. These entries are usually resolved by entries in 10996 libc. These entry points should be supplied through some other 10997 mechanism when this option is specified. 10998 10999`-nostdlib' 11000 Do not use the standard system startup files or libraries when 11001 linking. No startup files and only the libraries you specify are 11002 passed to the linker, and options specifying linkage of the system 11003 libraries, such as `-static-libgcc' or `-shared-libgcc', are 11004 ignored. 11005 11006 The compiler may generate calls to `memcmp', `memset', `memcpy' 11007 and `memmove'. These entries are usually resolved by entries in 11008 libc. These entry points should be supplied through some other 11009 mechanism when this option is specified. 11010 11011 One of the standard libraries bypassed by `-nostdlib' and 11012 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 11013 which GCC uses to overcome shortcomings of particular machines, or 11014 special needs for some languages. (*Note Interfacing to GCC 11015 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 11016 most cases, you need `libgcc.a' even when you want to avoid other 11017 standard libraries. In other words, when you specify `-nostdlib' 11018 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 11019 This ensures that you have no unresolved references to internal GCC 11020 library subroutines. (An example of such an internal subroutine 11021 is `__main', used to ensure C++ constructors are called; *note 11022 `collect2': (gccint)Collect2.) 11023 11024`-pie' 11025 Produce a position independent executable on targets that support 11026 it. For predictable results, you must also specify the same set 11027 of options used for compilation (`-fpie', `-fPIE', or model 11028 suboptions) when you specify this linker option. 11029 11030`-rdynamic' 11031 Pass the flag `-export-dynamic' to the ELF linker, on targets that 11032 support it. This instructs the linker to add all symbols, not only 11033 used ones, to the dynamic symbol table. This option is needed for 11034 some uses of `dlopen' or to allow obtaining backtraces from within 11035 a program. 11036 11037`-s' 11038 Remove all symbol table and relocation information from the 11039 executable. 11040 11041`-static' 11042 On systems that support dynamic linking, this prevents linking 11043 with the shared libraries. On other systems, this option has no 11044 effect. 11045 11046`-shared' 11047 Produce a shared object which can then be linked with other 11048 objects to form an executable. Not all systems support this 11049 option. For predictable results, you must also specify the same 11050 set of options used for compilation (`-fpic', `-fPIC', or model 11051 suboptions) when you specify this linker option.(1) 11052 11053`-shared-libgcc' 11054`-static-libgcc' 11055 On systems that provide `libgcc' as a shared library, these options 11056 force the use of either the shared or static version, respectively. 11057 If no shared version of `libgcc' was built when the compiler was 11058 configured, these options have no effect. 11059 11060 There are several situations in which an application should use the 11061 shared `libgcc' instead of the static version. The most common of 11062 these is when the application wishes to throw and catch exceptions 11063 across different shared libraries. In that case, each of the 11064 libraries as well as the application itself should use the shared 11065 `libgcc'. 11066 11067 Therefore, the G++ and GCJ drivers automatically add 11068 `-shared-libgcc' whenever you build a shared library or a main 11069 executable, because C++ and Java programs typically use 11070 exceptions, so this is the right thing to do. 11071 11072 If, instead, you use the GCC driver to create shared libraries, 11073 you may find that they are not always linked with the shared 11074 `libgcc'. If GCC finds, at its configuration time, that you have 11075 a non-GNU linker or a GNU linker that does not support option 11076 `--eh-frame-hdr', it links the shared version of `libgcc' into 11077 shared libraries by default. Otherwise, it takes advantage of the 11078 linker and optimizes away the linking with the shared version of 11079 `libgcc', linking with the static version of libgcc by default. 11080 This allows exceptions to propagate through such shared libraries, 11081 without incurring relocation costs at library load time. 11082 11083 However, if a library or main executable is supposed to throw or 11084 catch exceptions, you must link it using the G++ or GCJ driver, as 11085 appropriate for the languages used in the program, or using the 11086 option `-shared-libgcc', such that it is linked with the shared 11087 `libgcc'. 11088 11089`-static-libasan' 11090 When the `-fsanitize=address' option is used to link a program, 11091 the GCC driver automatically links against `libasan'. If 11092 `libasan' is available as a shared library, and the `-static' 11093 option is not used, then this links against the shared version of 11094 `libasan'. The `-static-libasan' option directs the GCC driver to 11095 link `libasan' statically, without necessarily linking other 11096 libraries statically. 11097 11098`-static-libtsan' 11099 When the `-fsanitize=thread' option is used to link a program, the 11100 GCC driver automatically links against `libtsan'. If `libtsan' is 11101 available as a shared library, and the `-static' option is not 11102 used, then this links against the shared version of `libtsan'. 11103 The `-static-libtsan' option directs the GCC driver to link 11104 `libtsan' statically, without necessarily linking other libraries 11105 statically. 11106 11107`-static-liblsan' 11108 When the `-fsanitize=leak' option is used to link a program, the 11109 GCC driver automatically links against `liblsan'. If `liblsan' is 11110 available as a shared library, and the `-static' option is not 11111 used, then this links against the shared version of `liblsan'. 11112 The `-static-liblsan' option directs the GCC driver to link 11113 `liblsan' statically, without necessarily linking other libraries 11114 statically. 11115 11116`-static-libubsan' 11117 When the `-fsanitize=undefined' option is used to link a program, 11118 the GCC driver automatically links against `libubsan'. If 11119 `libubsan' is available as a shared library, and the `-static' 11120 option is not used, then this links against the shared version of 11121 `libubsan'. The `-static-libubsan' option directs the GCC driver 11122 to link `libubsan' statically, without necessarily linking other 11123 libraries statically. 11124 11125`-static-libmpx' 11126 When the `-fcheck-pointer bounds' and `-mmpx' options are used to 11127 link a program, the GCC driver automatically links against 11128 `libmpx'. If `libmpx' is available as a shared library, and the 11129 `-static' option is not used, then this links against the shared 11130 version of `libmpx'. The `-static-libmpx' option directs the GCC 11131 driver to link `libmpx' statically, without necessarily linking 11132 other libraries statically. 11133 11134`-static-libmpxwrappers' 11135 When the `-fcheck-pointer bounds' and `-mmpx' options are used to 11136 link a program without also using `-fno-chkp-use-wrappers', the 11137 GCC driver automatically links against `libmpxwrappers'. If 11138 `libmpxwrappers' is available as a shared library, and the 11139 `-static' option is not used, then this links against the shared 11140 version of `libmpxwrappers'. The `-static-libmpxwrappers' option 11141 directs the GCC driver to link `libmpxwrappers' statically, 11142 without necessarily linking other libraries statically. 11143 11144`-static-libstdc++' 11145 When the `g++' program is used to link a C++ program, it normally 11146 automatically links against `libstdc++'. If `libstdc++' is 11147 available as a shared library, and the `-static' option is not 11148 used, then this links against the shared version of `libstdc++'. 11149 That is normally fine. However, it is sometimes useful to freeze 11150 the version of `libstdc++' used by the program without going all 11151 the way to a fully static link. The `-static-libstdc++' option 11152 directs the `g++' driver to link `libstdc++' statically, without 11153 necessarily linking other libraries statically. 11154 11155`-symbolic' 11156 Bind references to global symbols when building a shared object. 11157 Warn about any unresolved references (unless overridden by the 11158 link editor option `-Xlinker -z -Xlinker defs'). Only a few 11159 systems support this option. 11160 11161`-T SCRIPT' 11162 Use SCRIPT as the linker script. This option is supported by most 11163 systems using the GNU linker. On some targets, such as bare-board 11164 targets without an operating system, the `-T' option may be 11165 required when linking to avoid references to undefined symbols. 11166 11167`-Xlinker OPTION' 11168 Pass OPTION as an option to the linker. You can use this to 11169 supply system-specific linker options that GCC does not recognize. 11170 11171 If you want to pass an option that takes a separate argument, you 11172 must use `-Xlinker' twice, once for the option and once for the 11173 argument. For example, to pass `-assert definitions', you must 11174 write `-Xlinker -assert -Xlinker definitions'. It does not work 11175 to write `-Xlinker "-assert definitions"', because this passes the 11176 entire string as a single argument, which is not what the linker 11177 expects. 11178 11179 When using the GNU linker, it is usually more convenient to pass 11180 arguments to linker options using the `OPTION=VALUE' syntax than 11181 as separate arguments. For example, you can specify `-Xlinker 11182 -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'. 11183 Other linkers may not support this syntax for command-line options. 11184 11185`-Wl,OPTION' 11186 Pass OPTION as an option to the linker. If OPTION contains 11187 commas, it is split into multiple options at the commas. You can 11188 use this syntax to pass an argument to the option. For example, 11189 `-Wl,-Map,output.map' passes `-Map output.map' to the linker. 11190 When using the GNU linker, you can also get the same effect with 11191 `-Wl,-Map=output.map'. 11192 11193`-u SYMBOL' 11194 Pretend the symbol SYMBOL is undefined, to force linking of 11195 library modules to define it. You can use `-u' multiple times with 11196 different symbols to force loading of additional library modules. 11197 11198`-z KEYWORD' 11199 `-z' is passed directly on to the linker along with the keyword 11200 KEYWORD. See the section in the documentation of your linker for 11201 permitted values and their meanings. 11202 11203 ---------- Footnotes ---------- 11204 11205 (1) On some systems, `gcc -shared' needs to build supplementary stub 11206code for constructors to work. On multi-libbed systems, `gcc -shared' 11207must select the correct support libraries to link against. Failing to 11208supply the correct flags may lead to subtle defects. Supplying them in 11209cases where they are not necessary is innocuous. 11210 11211 11212File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 11213 112143.14 Options for Directory Search 11215================================= 11216 11217These options specify directories to search for header files, for 11218libraries and for parts of the compiler: 11219 11220`-IDIR' 11221 Add the directory DIR to the head of the list of directories to be 11222 searched for header files. This can be used to override a system 11223 header file, substituting your own version, since these 11224 directories are searched before the system header file 11225 directories. However, you should not use this option to add 11226 directories that contain vendor-supplied system header files (use 11227 `-isystem' for that). If you use more than one `-I' option, the 11228 directories are scanned in left-to-right order; the standard 11229 system directories come after. 11230 11231 If a standard system include directory, or a directory specified 11232 with `-isystem', is also specified with `-I', the `-I' option is 11233 ignored. The directory is still searched but as a system 11234 directory at its normal position in the system include chain. 11235 This is to ensure that GCC's procedure to fix buggy system headers 11236 and the ordering for the `include_next' directive are not 11237 inadvertently changed. If you really need to change the search 11238 order for system directories, use the `-nostdinc' and/or 11239 `-isystem' options. 11240 11241`-iplugindir=DIR' 11242 Set the directory to search for plugins that are passed by 11243 `-fplugin=NAME' instead of `-fplugin=PATH/NAME.so'. This option 11244 is not meant to be used by the user, but only passed by the driver. 11245 11246`-iquoteDIR' 11247 Add the directory DIR to the head of the list of directories to be 11248 searched for header files only for the case of `#include "FILE"'; 11249 they are not searched for `#include <FILE>', otherwise just like 11250 `-I'. 11251 11252`-iremap SRC:DST' 11253 Replace the prefix SRC in __FILE__ with DST at expansion time. 11254 This option can be specified more than once. Processing stops at 11255 the first match. 11256 11257`-LDIR' 11258 Add directory DIR to the list of directories to be searched for 11259 `-l'. 11260 11261`-BPREFIX' 11262 This option specifies where to find the executables, libraries, 11263 include files, and data files of the compiler itself. 11264 11265 The compiler driver program runs one or more of the subprograms 11266 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 11267 program it tries to run, both with and without `MACHINE/VERSION/' 11268 (*note Target Options::). 11269 11270 For each subprogram to be run, the compiler driver first tries the 11271 `-B' prefix, if any. If that name is not found, or if `-B' is not 11272 specified, the driver tries two standard prefixes, `/usr/lib/gcc/' 11273 and `/usr/local/lib/gcc/'. If neither of those results in a file 11274 name that is found, the unmodified program name is searched for 11275 using the directories specified in your `PATH' environment 11276 variable. 11277 11278 The compiler checks to see if the path provided by `-B' refers to 11279 a directory, and if necessary it adds a directory separator 11280 character at the end of the path. 11281 11282 `-B' prefixes that effectively specify directory names also apply 11283 to libraries in the linker, because the compiler translates these 11284 options into `-L' options for the linker. They also apply to 11285 include files in the preprocessor, because the compiler translates 11286 these options into `-isystem' options for the preprocessor. In 11287 this case, the compiler appends `include' to the prefix. 11288 11289 The runtime support file `libgcc.a' can also be searched for using 11290 the `-B' prefix, if needed. If it is not found there, the two 11291 standard prefixes above are tried, and that is all. The file is 11292 left out of the link if it is not found by those means. 11293 11294 Another way to specify a prefix much like the `-B' prefix is to use 11295 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 11296 Variables::. 11297 11298 As a special kludge, if the path provided by `-B' is 11299 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 11300 is replaced by `[dir/]include'. This is to help with 11301 boot-strapping the compiler. 11302 11303`-specs=FILE' 11304 Process FILE after the compiler reads in the standard `specs' 11305 file, in order to override the defaults which the `gcc' driver 11306 program uses when determining what switches to pass to `cc1', 11307 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 11308 specified on the command line, and they are processed in order, 11309 from left to right. 11310 11311`--sysroot=DIR' 11312 Use DIR as the logical root directory for headers and libraries. 11313 For example, if the compiler normally searches for headers in 11314 `/usr/include' and libraries in `/usr/lib', it instead searches 11315 `DIR/usr/include' and `DIR/usr/lib'. 11316 11317 If you use both this option and the `-isysroot' option, then the 11318 `--sysroot' option applies to libraries, but the `-isysroot' 11319 option applies to header files. 11320 11321 The GNU linker (beginning with version 2.16) has the necessary 11322 support for this option. If your linker does not support this 11323 option, the header file aspect of `--sysroot' still works, but the 11324 library aspect does not. 11325 11326`--no-sysroot-suffix' 11327 For some targets, a suffix is added to the root directory specified 11328 with `--sysroot', depending on the other options used, so that 11329 headers may for example be found in `DIR/SUFFIX/usr/include' 11330 instead of `DIR/usr/include'. This option disables the addition of 11331 such a suffix. 11332 11333`-I-' 11334 This option has been deprecated. Please use `-iquote' instead for 11335 `-I' directories before the `-I-' and remove the `-I-' option. 11336 Any directories you specify with `-I' options before the `-I-' 11337 option are searched only for the case of `#include "FILE"'; they 11338 are not searched for `#include <FILE>'. 11339 11340 If additional directories are specified with `-I' options after 11341 the `-I-' option, these directories are searched for all `#include' 11342 directives. (Ordinarily _all_ `-I' directories are used this way.) 11343 11344 In addition, the `-I-' option inhibits the use of the current 11345 directory (where the current input file came from) as the first 11346 search directory for `#include "FILE"'. There is no way to 11347 override this effect of `-I-'. With `-I.' you can specify 11348 searching the directory that is current when the compiler is 11349 invoked. That is not exactly the same as what the preprocessor 11350 does by default, but it is often satisfactory. 11351 11352 `-I-' does not inhibit the use of the standard system directories 11353 for header files. Thus, `-I-' and `-nostdinc' are independent. 11354 11355 11356File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 11357 113583.15 Specifying Subprocesses and the Switches to Pass to Them 11359============================================================= 11360 11361`gcc' is a driver program. It performs its job by invoking a sequence 11362of other programs to do the work of compiling, assembling and linking. 11363GCC interprets its command-line parameters and uses these to deduce 11364which programs it should invoke, and which command-line options it 11365ought to place on their command lines. This behavior is controlled by 11366"spec strings". In most cases there is one spec string for each 11367program that GCC can invoke, but a few programs have multiple spec 11368strings to control their behavior. The spec strings built into GCC can 11369be overridden by using the `-specs=' command-line switch to specify a 11370spec file. 11371 11372 "Spec files" are plaintext files that are used to construct spec 11373strings. They consist of a sequence of directives separated by blank 11374lines. The type of directive is determined by the first non-whitespace 11375character on the line, which can be one of the following: 11376 11377`%COMMAND' 11378 Issues a COMMAND to the spec file processor. The commands that can 11379 appear here are: 11380 11381 `%include <FILE>' 11382 Search for FILE and insert its text at the current point in 11383 the specs file. 11384 11385 `%include_noerr <FILE>' 11386 Just like `%include', but do not generate an error message if 11387 the include file cannot be found. 11388 11389 `%rename OLD_NAME NEW_NAME' 11390 Rename the spec string OLD_NAME to NEW_NAME. 11391 11392 11393`*[SPEC_NAME]:' 11394 This tells the compiler to create, override or delete the named 11395 spec string. All lines after this directive up to the next 11396 directive or blank line are considered to be the text for the spec 11397 string. If this results in an empty string then the spec is 11398 deleted. (Or, if the spec did not exist, then nothing happens.) 11399 Otherwise, if the spec does not currently exist a new spec is 11400 created. If the spec does exist then its contents are overridden 11401 by the text of this directive, unless the first character of that 11402 text is the `+' character, in which case the text is appended to 11403 the spec. 11404 11405`[SUFFIX]:' 11406 Creates a new `[SUFFIX] spec' pair. All lines after this directive 11407 and up to the next directive or blank line are considered to make 11408 up the spec string for the indicated suffix. When the compiler 11409 encounters an input file with the named suffix, it processes the 11410 spec string in order to work out how to compile that file. For 11411 example: 11412 11413 .ZZ: 11414 z-compile -input %i 11415 11416 This says that any input file whose name ends in `.ZZ' should be 11417 passed to the program `z-compile', which should be invoked with the 11418 command-line switch `-input' and with the result of performing the 11419 `%i' substitution. (See below.) 11420 11421 As an alternative to providing a spec string, the text following a 11422 suffix directive can be one of the following: 11423 11424 `@LANGUAGE' 11425 This says that the suffix is an alias for a known LANGUAGE. 11426 This is similar to using the `-x' command-line switch to GCC 11427 to specify a language explicitly. For example: 11428 11429 .ZZ: 11430 @c++ 11431 11432 Says that .ZZ files are, in fact, C++ source files. 11433 11434 `#NAME' 11435 This causes an error messages saying: 11436 11437 NAME compiler not installed on this system. 11438 11439 GCC already has an extensive list of suffixes built into it. This 11440 directive adds an entry to the end of the list of suffixes, but 11441 since the list is searched from the end backwards, it is 11442 effectively possible to override earlier entries using this 11443 technique. 11444 11445 11446 GCC has the following spec strings built into it. Spec files can 11447override these strings or create their own. Note that individual 11448targets can also add their own spec strings to this list. 11449 11450 asm Options to pass to the assembler 11451 asm_final Options to pass to the assembler post-processor 11452 cpp Options to pass to the C preprocessor 11453 cc1 Options to pass to the C compiler 11454 cc1plus Options to pass to the C++ compiler 11455 endfile Object files to include at the end of the link 11456 link Options to pass to the linker 11457 lib Libraries to include on the command line to the linker 11458 libgcc Decides which GCC support library to pass to the linker 11459 linker Sets the name of the linker 11460 predefines Defines to be passed to the C preprocessor 11461 signed_char Defines to pass to CPP to say whether `char' is signed 11462 by default 11463 startfile Object files to include at the start of the link 11464 11465 Here is a small example of a spec file: 11466 11467 %rename lib old_lib 11468 11469 *lib: 11470 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 11471 11472 This example renames the spec called `lib' to `old_lib' and then 11473overrides the previous definition of `lib' with a new one. The new 11474definition adds in some extra command-line options before including the 11475text of the old definition. 11476 11477 "Spec strings" are a list of command-line options to be passed to their 11478corresponding program. In addition, the spec strings can contain 11479`%'-prefixed sequences to substitute variable text or to conditionally 11480insert text into the command line. Using these constructs it is 11481possible to generate quite complex command lines. 11482 11483 Here is a table of all defined `%'-sequences for spec strings. Note 11484that spaces are not generated automatically around the results of 11485expanding these sequences. Therefore you can concatenate them together 11486or combine them with constant text in a single argument. 11487 11488`%%' 11489 Substitute one `%' into the program name or argument. 11490 11491`%i' 11492 Substitute the name of the input file being processed. 11493 11494`%b' 11495 Substitute the basename of the input file being processed. This 11496 is the substring up to (and not including) the last period and not 11497 including the directory. 11498 11499`%B' 11500 This is the same as `%b', but include the file suffix (text after 11501 the last period). 11502 11503`%d' 11504 Marks the argument containing or following the `%d' as a temporary 11505 file name, so that that file is deleted if GCC exits successfully. 11506 Unlike `%g', this contributes no text to the argument. 11507 11508`%gSUFFIX' 11509 Substitute a file name that has suffix SUFFIX and is chosen once 11510 per compilation, and mark the argument in the same way as `%d'. 11511 To reduce exposure to denial-of-service attacks, the file name is 11512 now chosen in a way that is hard to predict even when previously 11513 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 11514 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 11515 matches the regexp `[.A-Za-z]*' or the special string `%O', which 11516 is treated exactly as if `%O' had been preprocessed. Previously, 11517 `%g' was simply substituted with a file name chosen once per 11518 compilation, without regard to any appended suffix (which was 11519 therefore treated just like ordinary text), making such attacks 11520 more likely to succeed. 11521 11522`%uSUFFIX' 11523 Like `%g', but generates a new temporary file name each time it 11524 appears instead of once per compilation. 11525 11526`%USUFFIX' 11527 Substitutes the last file name generated with `%uSUFFIX', 11528 generating a new one if there is no such last file name. In the 11529 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 11530 they don't share the same suffix _space_, so `%g.s ... %U.s ... 11531 %g.s ... %U.s' involves the generation of two distinct file names, 11532 one for each `%g.s' and another for each `%U.s'. Previously, `%U' 11533 was simply substituted with a file name chosen for the previous 11534 `%u', without regard to any appended suffix. 11535 11536`%jSUFFIX' 11537 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 11538 writable, and if `-save-temps' is not used; otherwise, substitute 11539 the name of a temporary file, just like `%u'. This temporary file 11540 is not meant for communication between processes, but rather as a 11541 junk disposal mechanism. 11542 11543`%|SUFFIX' 11544`%mSUFFIX' 11545 Like `%g', except if `-pipe' is in effect. In that case `%|' 11546 substitutes a single dash and `%m' substitutes nothing at all. 11547 These are the two most common ways to instruct a program that it 11548 should read from standard input or write to standard output. If 11549 you need something more elaborate you can use an `%{pipe:`X'}' 11550 construct: see for example `f/lang-specs.h'. 11551 11552`%.SUFFIX' 11553 Substitutes .SUFFIX for the suffixes of a matched switch's args 11554 when it is subsequently output with `%*'. SUFFIX is terminated by 11555 the next space or %. 11556 11557`%w' 11558 Marks the argument containing or following the `%w' as the 11559 designated output file of this compilation. This puts the argument 11560 into the sequence of arguments that `%o' substitutes. 11561 11562`%o' 11563 Substitutes the names of all the output files, with spaces 11564 automatically placed around them. You should write spaces around 11565 the `%o' as well or the results are undefined. `%o' is for use in 11566 the specs for running the linker. Input files whose names have no 11567 recognized suffix are not compiled at all, but they are included 11568 among the output files, so they are linked. 11569 11570`%O' 11571 Substitutes the suffix for object files. Note that this is 11572 handled specially when it immediately follows `%g, %u, or %U', 11573 because of the need for those to form complete file names. The 11574 handling is such that `%O' is treated exactly as if it had already 11575 been substituted, except that `%g, %u, and %U' do not currently 11576 support additional SUFFIX characters following `%O' as they do 11577 following, for example, `.o'. 11578 11579`%p' 11580 Substitutes the standard macro predefinitions for the current 11581 target machine. Use this when running `cpp'. 11582 11583`%P' 11584 Like `%p', but puts `__' before and after the name of each 11585 predefined macro, except for macros that start with `__' or with 11586 `_L', where L is an uppercase letter. This is for ISO C. 11587 11588`%I' 11589 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 11590 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made 11591 from `COMPILER_PATH' and `-B' options) and `-imultilib' as 11592 necessary. 11593 11594`%s' 11595 Current argument is the name of a library or startup file of some 11596 sort. Search for that file in a standard list of directories and 11597 substitute the full name found. The current working directory is 11598 included in the list of directories scanned. 11599 11600`%T' 11601 Current argument is the name of a linker script. Search for that 11602 file in the current list of directories to scan for libraries. If 11603 the file is located insert a `--script' option into the command 11604 line followed by the full path name found. If the file is not 11605 found then generate an error message. Note: the current working 11606 directory is not searched. 11607 11608`%eSTR' 11609 Print STR as an error message. STR is terminated by a newline. 11610 Use this when inconsistent options are detected. 11611 11612`%(NAME)' 11613 Substitute the contents of spec string NAME at this point. 11614 11615`%x{OPTION}' 11616 Accumulate an option for `%X'. 11617 11618`%X' 11619 Output the accumulated linker options specified by `-Wl' or a `%x' 11620 spec string. 11621 11622`%Y' 11623 Output the accumulated assembler options specified by `-Wa'. 11624 11625`%Z' 11626 Output the accumulated preprocessor options specified by `-Wp'. 11627 11628`%a' 11629 Process the `asm' spec. This is used to compute the switches to 11630 be passed to the assembler. 11631 11632`%A' 11633 Process the `asm_final' spec. This is a spec string for passing 11634 switches to an assembler post-processor, if such a program is 11635 needed. 11636 11637`%l' 11638 Process the `link' spec. This is the spec for computing the 11639 command line passed to the linker. Typically it makes use of the 11640 `%L %G %S %D and %E' sequences. 11641 11642`%D' 11643 Dump out a `-L' option for each directory that GCC believes might 11644 contain startup files. If the target supports multilibs then the 11645 current multilib directory is prepended to each of these paths. 11646 11647`%L' 11648 Process the `lib' spec. This is a spec string for deciding which 11649 libraries are included on the command line to the linker. 11650 11651`%G' 11652 Process the `libgcc' spec. This is a spec string for deciding 11653 which GCC support library is included on the command line to the 11654 linker. 11655 11656`%S' 11657 Process the `startfile' spec. This is a spec for deciding which 11658 object files are the first ones passed to the linker. Typically 11659 this might be a file named `crt0.o'. 11660 11661`%E' 11662 Process the `endfile' spec. This is a spec string that specifies 11663 the last object files that are passed to the linker. 11664 11665`%C' 11666 Process the `cpp' spec. This is used to construct the arguments 11667 to be passed to the C preprocessor. 11668 11669`%1' 11670 Process the `cc1' spec. This is used to construct the options to 11671 be passed to the actual C compiler (`cc1'). 11672 11673`%2' 11674 Process the `cc1plus' spec. This is used to construct the options 11675 to be passed to the actual C++ compiler (`cc1plus'). 11676 11677`%*' 11678 Substitute the variable part of a matched option. See below. 11679 Note that each comma in the substituted string is replaced by a 11680 single space. 11681 11682`%<`S'' 11683 Remove all occurrences of `-S' from the command line. Note--this 11684 command is position dependent. `%' commands in the spec string 11685 before this one see `-S', `%' commands in the spec string after 11686 this one do not. 11687 11688`%:FUNCTION(ARGS)' 11689 Call the named function FUNCTION, passing it ARGS. ARGS is first 11690 processed as a nested spec string, then split into an argument 11691 vector in the usual fashion. The function returns a string which 11692 is processed as if it had appeared literally as part of the 11693 current spec. 11694 11695 The following built-in spec functions are provided: 11696 11697 ``getenv'' 11698 The `getenv' spec function takes two arguments: an environment 11699 variable name and a string. If the environment variable is 11700 not defined, a fatal error is issued. Otherwise, the return 11701 value is the value of the environment variable concatenated 11702 with the string. For example, if `TOPDIR' is defined as 11703 `/path/to/top', then: 11704 11705 %:getenv(TOPDIR /include) 11706 11707 expands to `/path/to/top/include'. 11708 11709 ``if-exists'' 11710 The `if-exists' spec function takes one argument, an absolute 11711 pathname to a file. If the file exists, `if-exists' returns 11712 the pathname. Here is a small example of its usage: 11713 11714 *startfile: 11715 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 11716 11717 ``if-exists-else'' 11718 The `if-exists-else' spec function is similar to the 11719 `if-exists' spec function, except that it takes two 11720 arguments. The first argument is an absolute pathname to a 11721 file. If the file exists, `if-exists-else' returns the 11722 pathname. If it does not exist, it returns the second 11723 argument. This way, `if-exists-else' can be used to select 11724 one file or another, based on the existence of the first. 11725 Here is a small example of its usage: 11726 11727 *startfile: 11728 crt0%O%s %:if-exists(crti%O%s) \ 11729 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 11730 11731 ``replace-outfile'' 11732 The `replace-outfile' spec function takes two arguments. It 11733 looks for the first argument in the outfiles array and 11734 replaces it with the second argument. Here is a small 11735 example of its usage: 11736 11737 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 11738 11739 ``remove-outfile'' 11740 The `remove-outfile' spec function takes one argument. It 11741 looks for the first argument in the outfiles array and 11742 removes it. Here is a small example its usage: 11743 11744 %:remove-outfile(-lm) 11745 11746 ``pass-through-libs'' 11747 The `pass-through-libs' spec function takes any number of 11748 arguments. It finds any `-l' options and any non-options 11749 ending in `.a' (which it assumes are the names of linker 11750 input library archive files) and returns a result containing 11751 all the found arguments each prepended by 11752 `-plugin-opt=-pass-through=' and joined by spaces. This list 11753 is intended to be passed to the LTO linker plugin. 11754 11755 %:pass-through-libs(%G %L %G) 11756 11757 ``print-asm-header'' 11758 The `print-asm-header' function takes no arguments and simply 11759 prints a banner like: 11760 11761 Assembler options 11762 ================= 11763 11764 Use "-Wa,OPTION" to pass "OPTION" to the assembler. 11765 11766 It is used to separate compiler options from assembler options 11767 in the `--target-help' output. 11768 11769`%{`S'}' 11770 Substitutes the `-S' switch, if that switch is given to GCC. If 11771 that switch is not specified, this substitutes nothing. Note that 11772 the leading dash is omitted when specifying this option, and it is 11773 automatically inserted if the substitution is performed. Thus the 11774 spec string `%{foo}' matches the command-line option `-foo' and 11775 outputs the command-line option `-foo'. 11776 11777`%W{`S'}' 11778 Like %{`S'} but mark last argument supplied within as a file to be 11779 deleted on failure. 11780 11781`%{`S'*}' 11782 Substitutes all the switches specified to GCC whose names start 11783 with `-S', but which also take an argument. This is used for 11784 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 11785 being one switch whose name starts with `o'. %{o*} substitutes 11786 this text, including the space. Thus two arguments are generated. 11787 11788`%{`S'*&`T'*}' 11789 Like %{`S'*}, but preserve order of `S' and `T' options (the order 11790 of `S' and `T' in the spec is not significant). There can be any 11791 number of ampersand-separated variables; for each the wild card is 11792 optional. Useful for CPP as `%{D*&U*&A*}'. 11793 11794`%{`S':`X'}' 11795 Substitutes `X', if the `-S' switch is given to GCC. 11796 11797`%{!`S':`X'}' 11798 Substitutes `X', if the `-S' switch is _not_ given to GCC. 11799 11800`%{`S'*:`X'}' 11801 Substitutes `X' if one or more switches whose names start with 11802 `-S' are specified to GCC. Normally `X' is substituted only once, 11803 no matter how many such switches appeared. However, if `%*' 11804 appears somewhere in `X', then `X' is substituted once for each 11805 matching switch, with the `%*' replaced by the part of that switch 11806 matching the `*'. 11807 11808 If `%*' appears as the last part of a spec sequence then a space 11809 is added after the end of the last substitution. If there is more 11810 text in the sequence, however, then a space is not generated. This 11811 allows the `%*' substitution to be used as part of a larger 11812 string. For example, a spec string like this: 11813 11814 %{mcu=*:--script=%*/memory.ld} 11815 11816 when matching an option like `-mcu=newchip' produces: 11817 11818 --script=newchip/memory.ld 11819 11820`%{.`S':`X'}' 11821 Substitutes `X', if processing a file with suffix `S'. 11822 11823`%{!.`S':`X'}' 11824 Substitutes `X', if _not_ processing a file with suffix `S'. 11825 11826`%{,`S':`X'}' 11827 Substitutes `X', if processing a file for language `S'. 11828 11829`%{!,`S':`X'}' 11830 Substitutes `X', if not processing a file for language `S'. 11831 11832`%{`S'|`P':`X'}' 11833 Substitutes `X' if either `-S' or `-P' is given to GCC. This may 11834 be combined with `!', `.', `,', and `*' sequences as well, 11835 although they have a stronger binding than the `|'. If `%*' 11836 appears in `X', all of the alternatives must be starred, and only 11837 the first matching alternative is substituted. 11838 11839 For example, a spec string like this: 11840 11841 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 11842 11843 outputs the following command-line options from the following input 11844 command-line options: 11845 11846 fred.c -foo -baz 11847 jim.d -bar -boggle 11848 -d fred.c -foo -baz -boggle 11849 -d jim.d -bar -baz -boggle 11850 11851`%{S:X; T:Y; :D}' 11852 If `S' is given to GCC, substitutes `X'; else if `T' is given to 11853 GCC, substitutes `Y'; else substitutes `D'. There can be as many 11854 clauses as you need. This may be combined with `.', `,', `!', 11855 `|', and `*' as needed. 11856 11857 11858 The conditional text `X' in a %{`S':`X'} or similar construct may 11859contain other nested `%' constructs or spaces, or even newlines. They 11860are processed as usual, as described above. Trailing white space in 11861`X' is ignored. White space may also appear anywhere on the left side 11862of the colon in these constructs, except between `.' or `*' and the 11863corresponding word. 11864 11865 The `-O', `-f', `-m', and `-W' switches are handled specifically in 11866these constructs. If another value of `-O' or the negated form of a 11867`-f', `-m', or `-W' switch is found later in the command line, the 11868earlier switch value is ignored, except with {`S'*} where `S' is just 11869one letter, which passes all matching options. 11870 11871 The character `|' at the beginning of the predicate text is used to 11872indicate that a command should be piped to the following command, but 11873only if `-pipe' is specified. 11874 11875 It is built into GCC which switches take arguments and which do not. 11876(You might think it would be useful to generalize this to allow each 11877compiler's spec to say which switches take arguments. But this cannot 11878be done in a consistent fashion. GCC cannot even decide which input 11879files have been specified without knowing which switches take arguments, 11880and it must know which input files to compile in order to tell which 11881compilers to run). 11882 11883 GCC also knows implicitly that arguments starting in `-l' are to be 11884treated as compiler output files, and passed to the linker in their 11885proper position among the other output files. 11886 11887 11888File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 11889 118903.16 Specifying Target Machine and Compiler Version 11891=================================================== 11892 11893The usual way to run GCC is to run the executable called `gcc', or 11894`MACHINE-gcc' when cross-compiling, or `MACHINE-gcc-VERSION' to run a 11895version other than the one that was installed last. 11896 11897 11898File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 11899 119003.17 Hardware Models and Configurations 11901======================================= 11902 11903Each target machine types can have its own special options, starting 11904with `-m', to choose among various hardware models or 11905configurations--for example, 68010 vs 68020, floating coprocessor or 11906none. A single installed version of the compiler can compile for any 11907model or configuration, according to the options specified. 11908 11909 Some configurations of the compiler also support additional special 11910options, usually for compatibility with other compilers on the same 11911platform. 11912 11913* Menu: 11914 11915* AArch64 Options:: 11916* Adapteva Epiphany Options:: 11917* ARC Options:: 11918* ARM Options:: 11919* AVR Options:: 11920* Blackfin Options:: 11921* C6X Options:: 11922* CRIS Options:: 11923* CR16 Options:: 11924* Darwin Options:: 11925* DEC Alpha Options:: 11926* FR30 Options:: 11927* FRV Options:: 11928* GNU/Linux Options:: 11929* H8/300 Options:: 11930* HPPA Options:: 11931* IA-64 Options:: 11932* LM32 Options:: 11933* M32C Options:: 11934* M32R/D Options:: 11935* M680x0 Options:: 11936* MCore Options:: 11937* MeP Options:: 11938* MicroBlaze Options:: 11939* MIPS Options:: 11940* MMIX Options:: 11941* MN10300 Options:: 11942* Moxie Options:: 11943* MSP430 Options:: 11944* NDS32 Options:: 11945* Nios II Options:: 11946* Nvidia PTX Options:: 11947* PDP-11 Options:: 11948* picoChip Options:: 11949* PowerPC Options:: 11950* RL78 Options:: 11951* RS/6000 and PowerPC Options:: 11952* RX Options:: 11953* S/390 and zSeries Options:: 11954* Score Options:: 11955* SH Options:: 11956* Solaris 2 Options:: 11957* SPARC Options:: 11958* SPU Options:: 11959* System V Options:: 11960* TILE-Gx Options:: 11961* TILEPro Options:: 11962* V850 Options:: 11963* VAX Options:: 11964* Visium Options:: 11965* VMS Options:: 11966* VxWorks Options:: 11967* x86 Options:: 11968* x86 Windows Options:: 11969* Xstormy16 Options:: 11970* Xtensa Options:: 11971* zSeries Options:: 11972 11973 11974File: gcc.info, Node: AArch64 Options, Next: Adapteva Epiphany Options, Up: Submodel Options 11975 119763.17.1 AArch64 Options 11977---------------------- 11978 11979These options are defined for AArch64 implementations: 11980 11981`-mabi=NAME' 11982 Generate code for the specified data model. Permissible values 11983 are `ilp32' for SysV-like data model where int, long int and 11984 pointer are 32-bit, and `lp64' for SysV-like data model where int 11985 is 32-bit, but long int and pointer are 64-bit. 11986 11987 The default depends on the specific target configuration. Note 11988 that the LP64 and ILP32 ABIs are not link-compatible; you must 11989 compile your entire program with the same ABI, and link with a 11990 compatible set of libraries. 11991 11992`-mbig-endian' 11993 Generate big-endian code. This is the default when GCC is 11994 configured for an `aarch64_be-*-*' target. 11995 11996`-mgeneral-regs-only' 11997 Generate code which uses only the general registers. 11998 11999`-mlittle-endian' 12000 Generate little-endian code. This is the default when GCC is 12001 configured for an `aarch64-*-*' but not an `aarch64_be-*-*' target. 12002 12003`-mcmodel=tiny' 12004 Generate code for the tiny code model. The program and its 12005 statically defined symbols must be within 1GB of each other. 12006 Pointers are 64 bits. Programs can be statically or dynamically 12007 linked. This model is not fully implemented and mostly treated as 12008 `small'. 12009 12010`-mcmodel=small' 12011 Generate code for the small code model. The program and its 12012 statically defined symbols must be within 4GB of each other. 12013 Pointers are 64 bits. Programs can be statically or dynamically 12014 linked. This is the default code model. 12015 12016`-mcmodel=large' 12017 Generate code for the large code model. This makes no assumptions 12018 about addresses and sizes of sections. Pointers are 64 bits. 12019 Programs can be statically linked only. 12020 12021`-mstrict-align' 12022 Do not assume that unaligned memory references are handled by the 12023 system. 12024 12025`-momit-leaf-frame-pointer' 12026`-mno-omit-leaf-frame-pointer' 12027 Omit or keep the frame pointer in leaf functions. The former 12028 behaviour is the default. 12029 12030`-mtls-dialect=desc' 12031 Use TLS descriptors as the thread-local storage mechanism for 12032 dynamic accesses of TLS variables. This is the default. 12033 12034`-mtls-dialect=traditional' 12035 Use traditional TLS as the thread-local storage mechanism for 12036 dynamic accesses of TLS variables. 12037 12038`-mfix-cortex-a53-835769' 12039`-mno-fix-cortex-a53-835769' 12040 Enable or disable the workaround for the ARM Cortex-A53 erratum 12041 number 835769. This involves inserting a NOP instruction between 12042 memory instructions and 64-bit integer multiply-accumulate 12043 instructions. 12044 12045`-mfix-cortex-a53-843419' 12046`-mno-fix-cortex-a53-843419' 12047 Enable or disable the workaround for the ARM Cortex-A53 erratum 12048 number 843419. This erratum workaround is made at link time and 12049 this will only pass the corresponding flag to the linker. 12050 12051`-march=NAME' 12052 Specify the name of the target architecture, optionally suffixed 12053 by one or more feature modifiers. This option has the form 12054 `-march=ARCH{+[no]FEATURE}*', where the only permissible value for 12055 ARCH is `armv8-a'. The permissible values for FEATURE are 12056 documented in the sub-section below. 12057 12058 Where conflicting feature modifiers are specified, the right-most 12059 feature is used. 12060 12061 GCC uses this name to determine what kind of instructions it can 12062 emit when generating assembly code. 12063 12064 Where `-march' is specified without either of `-mtune' or `-mcpu' 12065 also being specified, the code is tuned to perform well across a 12066 range of target processors implementing the target architecture. 12067 12068`-mtune=NAME' 12069 Specify the name of the target processor for which GCC should tune 12070 the performance of the code. Permissible values for this option 12071 are: `generic', `cortex-a53', `cortex-a57', `cortex-a72', 12072 `exynos-m1', `thunderx', `xgene1'. 12073 12074 Additionally, this option can specify that GCC should tune the 12075 performance of the code for a big.LITTLE system. Permissible 12076 values for this option are: `cortex-a57.cortex-a53', 12077 `cortex-a72.cortex-a53'. 12078 12079 Where none of `-mtune=', `-mcpu=' or `-march=' are specified, the 12080 code is tuned to perform well across a range of target processors. 12081 12082 This option cannot be suffixed by feature modifiers. 12083 12084`-mcpu=NAME' 12085 Specify the name of the target processor, optionally suffixed by 12086 one or more feature modifiers. This option has the form 12087 `-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU 12088 are the same as those available for `-mtune'. 12089 12090 The permissible values for FEATURE are documented in the 12091 sub-section below. 12092 12093 Where conflicting feature modifiers are specified, the right-most 12094 feature is used. 12095 12096 GCC uses this name to determine what kind of instructions it can 12097 emit when generating assembly code (as if by `-march') and to 12098 determine the target processor for which to tune for performance 12099 (as if by `-mtune'). Where this option is used in conjunction 12100 with `-march' or `-mtune', those options take precedence over the 12101 appropriate part of this option. 12102 121033.17.1.1 `-march' and `-mcpu' Feature Modifiers 12104............................................... 12105 12106Feature modifiers used with `-march' and `-mcpu' can be one the 12107following: 12108 12109`crc' 12110 Enable CRC extension. 12111 12112`crypto' 12113 Enable Crypto extension. This implies Advanced SIMD is enabled. 12114 12115`fp' 12116 Enable floating-point instructions. 12117 12118`simd' 12119 Enable Advanced SIMD instructions. This implies floating-point 12120 instructions are enabled. This is the default for all current 12121 possible values for options `-march' and `-mcpu='. 12122 12123 12124File: gcc.info, Node: Adapteva Epiphany Options, Next: ARC Options, Prev: AArch64 Options, Up: Submodel Options 12125 121263.17.2 Adapteva Epiphany Options 12127-------------------------------- 12128 12129These `-m' options are defined for Adapteva Epiphany: 12130 12131`-mhalf-reg-file' 12132 Don't allocate any register in the range `r32'...`r63'. That 12133 allows code to run on hardware variants that lack these registers. 12134 12135`-mprefer-short-insn-regs' 12136 Preferrentially allocate registers that allow short instruction 12137 generation. This can result in increased instruction count, so 12138 this may either reduce or increase overall code size. 12139 12140`-mbranch-cost=NUM' 12141 Set the cost of branches to roughly NUM "simple" instructions. 12142 This cost is only a heuristic and is not guaranteed to produce 12143 consistent results across releases. 12144 12145`-mcmove' 12146 Enable the generation of conditional moves. 12147 12148`-mnops=NUM' 12149 Emit NUM NOPs before every other generated instruction. 12150 12151`-mno-soft-cmpsf' 12152 For single-precision floating-point comparisons, emit an `fsub' 12153 instruction and test the flags. This is faster than a software 12154 comparison, but can get incorrect results in the presence of NaNs, 12155 or when two different small numbers are compared such that their 12156 difference is calculated as zero. The default is `-msoft-cmpsf', 12157 which uses slower, but IEEE-compliant, software comparisons. 12158 12159`-mstack-offset=NUM' 12160 Set the offset between the top of the stack and the stack pointer. 12161 E.g., a value of 8 means that the eight bytes in the range 12162 `sp+0...sp+7' can be used by leaf functions without stack 12163 allocation. Values other than `8' or `16' are untested and 12164 unlikely to work. Note also that this option changes the ABI; 12165 compiling a program with a different stack offset than the 12166 libraries have been compiled with generally does not work. This 12167 option can be useful if you want to evaluate if a different stack 12168 offset would give you better code, but to actually use a different 12169 stack offset to build working programs, it is recommended to 12170 configure the toolchain with the appropriate 12171 `--with-stack-offset=NUM' option. 12172 12173`-mno-round-nearest' 12174 Make the scheduler assume that the rounding mode has been set to 12175 truncating. The default is `-mround-nearest'. 12176 12177`-mlong-calls' 12178 If not otherwise specified by an attribute, assume all calls might 12179 be beyond the offset range of the `b' / `bl' instructions, and 12180 therefore load the function address into a register before 12181 performing a (otherwise direct) call. This is the default. 12182 12183`-mshort-calls' 12184 If not otherwise specified by an attribute, assume all direct 12185 calls are in the range of the `b' / `bl' instructions, so use 12186 these instructions for direct calls. The default is 12187 `-mlong-calls'. 12188 12189`-msmall16' 12190 Assume addresses can be loaded as 16-bit unsigned values. This 12191 does not apply to function addresses for which `-mlong-calls' 12192 semantics are in effect. 12193 12194`-mfp-mode=MODE' 12195 Set the prevailing mode of the floating-point unit. This 12196 determines the floating-point mode that is provided and expected 12197 at function call and return time. Making this mode match the mode 12198 you predominantly need at function start can make your programs 12199 smaller and faster by avoiding unnecessary mode switches. 12200 12201 MODE can be set to one the following values: 12202 12203 `caller' 12204 Any mode at function entry is valid, and retained or restored 12205 when the function returns, and when it calls other functions. 12206 This mode is useful for compiling libraries or other 12207 compilation units you might want to incorporate into 12208 different programs with different prevailing FPU modes, and 12209 the convenience of being able to use a single object file 12210 outweighs the size and speed overhead for any extra mode 12211 switching that might be needed, compared with what would be 12212 needed with a more specific choice of prevailing FPU mode. 12213 12214 `truncate' 12215 This is the mode used for floating-point calculations with 12216 truncating (i.e. round towards zero) rounding mode. That 12217 includes conversion from floating point to integer. 12218 12219 `round-nearest' 12220 This is the mode used for floating-point calculations with 12221 round-to-nearest-or-even rounding mode. 12222 12223 `int' 12224 This is the mode used to perform integer calculations in the 12225 FPU, e.g. integer multiply, or integer 12226 multiply-and-accumulate. 12227 12228 The default is `-mfp-mode=caller' 12229 12230`-mnosplit-lohi' 12231`-mno-postinc' 12232`-mno-postmodify' 12233 Code generation tweaks that disable, respectively, splitting of 12234 32-bit loads, generation of post-increment addresses, and 12235 generation of post-modify addresses. The defaults are 12236 `msplit-lohi', `-mpost-inc', and `-mpost-modify'. 12237 12238`-mnovect-double' 12239 Change the preferred SIMD mode to SImode. The default is 12240 `-mvect-double', which uses DImode as preferred SIMD mode. 12241 12242`-max-vect-align=NUM' 12243 The maximum alignment for SIMD vector mode types. NUM may be 4 or 12244 8. The default is 8. Note that this is an ABI change, even 12245 though many library function interfaces are unaffected if they 12246 don't use SIMD vector modes in places that affect size and/or 12247 alignment of relevant types. 12248 12249`-msplit-vecmove-early' 12250 Split vector moves into single word moves before reload. In 12251 theory this can give better register allocation, but so far the 12252 reverse seems to be generally the case. 12253 12254`-m1reg-REG' 12255 Specify a register to hold the constant -1, which makes loading 12256 small negative constants and certain bitmasks faster. Allowable 12257 values for REG are `r43' and `r63', which specify use of that 12258 register as a fixed register, and `none', which means that no 12259 register is used for this purpose. The default is `-m1reg-none'. 12260 12261 12262 12263File: gcc.info, Node: ARC Options, Next: ARM Options, Prev: Adapteva Epiphany Options, Up: Submodel Options 12264 122653.17.3 ARC Options 12266------------------ 12267 12268The following options control the architecture variant for which code 12269is being compiled: 12270 12271`-mbarrel-shifter' 12272 Generate instructions supported by barrel shifter. This is the 12273 default unless `-mcpu=ARC601' is in effect. 12274 12275`-mcpu=CPU' 12276 Set architecture type, register usage, and instruction scheduling 12277 parameters for CPU. There are also shortcut alias options 12278 available for backward compatibility and convenience. Supported 12279 values for CPU are 12280 12281 `ARC600' 12282 Compile for ARC600. Aliases: `-mA6', `-mARC600'. 12283 12284 `ARC601' 12285 Compile for ARC601. Alias: `-mARC601'. 12286 12287 `ARC700' 12288 Compile for ARC700. Aliases: `-mA7', `-mARC700'. This is 12289 the default when configured with `--with-cpu=arc700'. 12290 12291`-mdpfp' 12292`-mdpfp-compact' 12293 FPX: Generate Double Precision FPX instructions, tuned for the 12294 compact implementation. 12295 12296`-mdpfp-fast' 12297 FPX: Generate Double Precision FPX instructions, tuned for the fast 12298 implementation. 12299 12300`-mno-dpfp-lrsr' 12301 Disable LR and SR instructions from using FPX extension aux 12302 registers. 12303 12304`-mea' 12305 Generate Extended arithmetic instructions. Currently only 12306 `divaw', `adds', `subs', and `sat16' are supported. This is 12307 always enabled for `-mcpu=ARC700'. 12308 12309`-mno-mpy' 12310 Do not generate mpy instructions for ARC700. 12311 12312`-mmul32x16' 12313 Generate 32x16 bit multiply and mac instructions. 12314 12315`-mmul64' 12316 Generate mul64 and mulu64 instructions. Only valid for 12317 `-mcpu=ARC600'. 12318 12319`-mnorm' 12320 Generate norm instruction. This is the default if `-mcpu=ARC700' 12321 is in effect. 12322 12323`-mspfp' 12324`-mspfp-compact' 12325 FPX: Generate Single Precision FPX instructions, tuned for the 12326 compact implementation. 12327 12328`-mspfp-fast' 12329 FPX: Generate Single Precision FPX instructions, tuned for the fast 12330 implementation. 12331 12332`-msimd' 12333 Enable generation of ARC SIMD instructions via target-specific 12334 builtins. Only valid for `-mcpu=ARC700'. 12335 12336`-msoft-float' 12337 This option ignored; it is provided for compatibility purposes 12338 only. Software floating point code is emitted by default, and 12339 this default can overridden by FPX options; `mspfp', 12340 `mspfp-compact', or `mspfp-fast' for single precision, and `mdpfp', 12341 `mdpfp-compact', or `mdpfp-fast' for double precision. 12342 12343`-mswap' 12344 Generate swap instructions. 12345 12346 12347 The following options are passed through to the assembler, and also 12348define preprocessor macro symbols. 12349 12350`-mdsp-packa' 12351 Passed down to the assembler to enable the DSP Pack A extensions. 12352 Also sets the preprocessor symbol `__Xdsp_packa'. 12353 12354`-mdvbf' 12355 Passed down to the assembler to enable the dual viterbi butterfly 12356 extension. Also sets the preprocessor symbol `__Xdvbf'. 12357 12358`-mlock' 12359 Passed down to the assembler to enable the Locked Load/Store 12360 Conditional extension. Also sets the preprocessor symbol 12361 `__Xlock'. 12362 12363`-mmac-d16' 12364 Passed down to the assembler. Also sets the preprocessor symbol 12365 `__Xxmac_d16'. 12366 12367`-mmac-24' 12368 Passed down to the assembler. Also sets the preprocessor symbol 12369 `__Xxmac_24'. 12370 12371`-mrtsc' 12372 Passed down to the assembler to enable the 64-bit Time-Stamp 12373 Counter extension instruction. Also sets the preprocessor symbol 12374 `__Xrtsc'. 12375 12376`-mswape' 12377 Passed down to the assembler to enable the swap byte ordering 12378 extension instruction. Also sets the preprocessor symbol 12379 `__Xswape'. 12380 12381`-mtelephony' 12382 Passed down to the assembler to enable dual and single operand 12383 instructions for telephony. Also sets the preprocessor symbol 12384 `__Xtelephony'. 12385 12386`-mxy' 12387 Passed down to the assembler to enable the XY Memory extension. 12388 Also sets the preprocessor symbol `__Xxy'. 12389 12390 12391 The following options control how the assembly code is annotated: 12392 12393`-misize' 12394 Annotate assembler instructions with estimated addresses. 12395 12396`-mannotate-align' 12397 Explain what alignment considerations lead to the decision to make 12398 an instruction short or long. 12399 12400 12401 The following options are passed through to the linker: 12402 12403`-marclinux' 12404 Passed through to the linker, to specify use of the `arclinux' 12405 emulation. This option is enabled by default in tool chains built 12406 for `arc-linux-uclibc' and `arceb-linux-uclibc' targets when 12407 profiling is not requested. 12408 12409`-marclinux_prof' 12410 Passed through to the linker, to specify use of the 12411 `arclinux_prof' emulation. This option is enabled by default in 12412 tool chains built for `arc-linux-uclibc' and `arceb-linux-uclibc' 12413 targets when profiling is requested. 12414 12415 12416 The following options control the semantics of generated code: 12417 12418`-mepilogue-cfi' 12419 Enable generation of call frame information for epilogues. 12420 12421`-mno-epilogue-cfi' 12422 Disable generation of call frame information for epilogues. 12423 12424`-mlong-calls' 12425 Generate call insns as register indirect calls, thus providing 12426 access to the full 32-bit address range. 12427 12428`-mmedium-calls' 12429 Don't use less than 25 bit addressing range for calls, which is the 12430 offset available for an unconditional branch-and-link instruction. 12431 Conditional execution of function calls is suppressed, to allow 12432 use of the 25-bit range, rather than the 21-bit range with 12433 conditional branch-and-link. This is the default for tool chains 12434 built for `arc-linux-uclibc' and `arceb-linux-uclibc' targets. 12435 12436`-mno-sdata' 12437 Do not generate sdata references. This is the default for tool 12438 chains built for `arc-linux-uclibc' and `arceb-linux-uclibc' 12439 targets. 12440 12441`-mucb-mcount' 12442 Instrument with mcount calls as used in UCB code. I.e. do the 12443 counting in the callee, not the caller. By default ARC 12444 instrumentation counts in the caller. 12445 12446`-mvolatile-cache' 12447 Use ordinarily cached memory accesses for volatile references. 12448 This is the default. 12449 12450`-mno-volatile-cache' 12451 Enable cache bypass for volatile references. 12452 12453 12454 The following options fine tune code generation: 12455`-malign-call' 12456 Do alignment optimizations for call instructions. 12457 12458`-mauto-modify-reg' 12459 Enable the use of pre/post modify with register displacement. 12460 12461`-mbbit-peephole' 12462 Enable bbit peephole2. 12463 12464`-mno-brcc' 12465 This option disables a target-specific pass in `arc_reorg' to 12466 generate `BRcc' instructions. It has no effect on `BRcc' 12467 generation driven by the combiner pass. 12468 12469`-mcase-vector-pcrel' 12470 Use pc-relative switch case tables - this enables case table 12471 shortening. This is the default for `-Os'. 12472 12473`-mcompact-casesi' 12474 Enable compact casesi pattern. This is the default for `-Os'. 12475 12476`-mno-cond-exec' 12477 Disable ARCompact specific pass to generate conditional execution 12478 instructions. Due to delay slot scheduling and interactions 12479 between operand numbers, literal sizes, instruction lengths, and 12480 the support for conditional execution, the target-independent pass 12481 to generate conditional execution is often lacking, so the ARC 12482 port has kept a special pass around that tries to find more 12483 conditional execution generating opportunities after register 12484 allocation, branch shortening, and delay slot scheduling have been 12485 done. This pass generally, but not always, improves performance 12486 and code size, at the cost of extra compilation time, which is why 12487 there is an option to switch it off. If you have a problem with 12488 call instructions exceeding their allowable offset range because 12489 they are conditionalized, you should consider using 12490 `-mmedium-calls' instead. 12491 12492`-mearly-cbranchsi' 12493 Enable pre-reload use of the cbranchsi pattern. 12494 12495`-mexpand-adddi' 12496 Expand `adddi3' and `subdi3' at rtl generation time into `add.f', 12497 `adc' etc. 12498 12499`-mindexed-loads' 12500 Enable the use of indexed loads. This can be problematic because 12501 some optimizers then assume that indexed stores exist, which is not 12502 the case. 12503 12504`-mlra' 12505 Enable Local Register Allocation. This is still experimental for 12506 ARC, so by default the compiler uses standard reload (i.e. 12507 `-mno-lra'). 12508 12509`-mlra-priority-none' 12510 Don't indicate any priority for target registers. 12511 12512`-mlra-priority-compact' 12513 Indicate target register priority for r0..r3 / r12..r15. 12514 12515`-mlra-priority-noncompact' 12516 Reduce target regsiter priority for r0..r3 / r12..r15. 12517 12518`-mno-millicode' 12519 When optimizing for size (using `-Os'), prologues and epilogues 12520 that have to save or restore a large number of registers are often 12521 shortened by using call to a special function in libgcc; this is 12522 referred to as a _millicode_ call. As these calls can pose 12523 performance issues, and/or cause linking issues when linking in a 12524 nonstandard way, this option is provided to turn off millicode call 12525 generation. 12526 12527`-mmixed-code' 12528 Tweak register allocation to help 16-bit instruction generation. 12529 This generally has the effect of decreasing the average 12530 instruction size while increasing the instruction count. 12531 12532`-mq-class' 12533 Enable 'q' instruction alternatives. This is the default for 12534 `-Os'. 12535 12536`-mRcq' 12537 Enable Rcq constraint handling - most short code generation 12538 depends on this. This is the default. 12539 12540`-mRcw' 12541 Enable Rcw constraint handling - ccfsm condexec mostly depends on 12542 this. This is the default. 12543 12544`-msize-level=LEVEL' 12545 Fine-tune size optimization with regards to instruction lengths 12546 and alignment. The recognized values for LEVEL are: 12547 `0' 12548 No size optimization. This level is deprecated and treated 12549 like `1'. 12550 12551 `1' 12552 Short instructions are used opportunistically. 12553 12554 `2' 12555 In addition, alignment of loops and of code after barriers 12556 are dropped. 12557 12558 `3' 12559 In addition, optional data alignment is dropped, and the 12560 option `Os' is enabled. 12561 12562 12563 This defaults to `3' when `-Os' is in effect. Otherwise, the 12564 behavior when this is not set is equivalent to level `1'. 12565 12566`-mtune=CPU' 12567 Set instruction scheduling parameters for CPU, overriding any 12568 implied by `-mcpu='. 12569 12570 Supported values for CPU are 12571 12572 `ARC600' 12573 Tune for ARC600 cpu. 12574 12575 `ARC601' 12576 Tune for ARC601 cpu. 12577 12578 `ARC700' 12579 Tune for ARC700 cpu with standard multiplier block. 12580 12581 `ARC700-xmac' 12582 Tune for ARC700 cpu with XMAC block. 12583 12584 `ARC725D' 12585 Tune for ARC725D cpu. 12586 12587 `ARC750D' 12588 Tune for ARC750D cpu. 12589 12590 12591`-mmultcost=NUM' 12592 Cost to assume for a multiply instruction, with `4' being equal to 12593 a normal instruction. 12594 12595`-munalign-prob-threshold=PROBABILITY' 12596 Set probability threshold for unaligning branches. When tuning 12597 for `ARC700' and optimizing for speed, branches without filled 12598 delay slot are preferably emitted unaligned and long, unless 12599 profiling indicates that the probability for the branch to be taken 12600 is below PROBABILITY. *Note Cross-profiling::. The default is 12601 (REG_BR_PROB_BASE/2), i.e. 5000. 12602 12603 12604 The following options are maintained for backward compatibility, but 12605are now deprecated and will be removed in a future release: 12606 12607`-margonaut' 12608 Obsolete FPX. 12609 12610`-mbig-endian' 12611`-EB' 12612 Compile code for big endian targets. Use of these options is now 12613 deprecated. Users wanting big-endian code, should use the 12614 `arceb-elf32' and `arceb-linux-uclibc' targets when building the 12615 tool chain, for which big-endian is the default. 12616 12617`-mlittle-endian' 12618`-EL' 12619 Compile code for little endian targets. Use of these options is 12620 now deprecated. Users wanting little-endian code should use the 12621 `arc-elf32' and `arc-linux-uclibc' targets when building the tool 12622 chain, for which little-endian is the default. 12623 12624`-mbarrel_shifter' 12625 Replaced by `-mbarrel-shifter'. 12626 12627`-mdpfp_compact' 12628 Replaced by `-mdpfp-compact'. 12629 12630`-mdpfp_fast' 12631 Replaced by `-mdpfp-fast'. 12632 12633`-mdsp_packa' 12634 Replaced by `-mdsp-packa'. 12635 12636`-mEA' 12637 Replaced by `-mea'. 12638 12639`-mmac_24' 12640 Replaced by `-mmac-24'. 12641 12642`-mmac_d16' 12643 Replaced by `-mmac-d16'. 12644 12645`-mspfp_compact' 12646 Replaced by `-mspfp-compact'. 12647 12648`-mspfp_fast' 12649 Replaced by `-mspfp-fast'. 12650 12651`-mtune=CPU' 12652 Values `arc600', `arc601', `arc700' and `arc700-xmac' for CPU are 12653 replaced by `ARC600', `ARC601', `ARC700' and `ARC700-xmac' 12654 respectively 12655 12656`-multcost=NUM' 12657 Replaced by `-mmultcost'. 12658 12659 12660 12661File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options 12662 126633.17.4 ARM Options 12664------------------ 12665 12666These `-m' options are defined for the ARM port: 12667 12668`-mabi=NAME' 12669 Generate code for the specified ABI. Permissible values are: 12670 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 12671 12672`-mapcs-frame' 12673 Generate a stack frame that is compliant with the ARM Procedure 12674 Call Standard for all functions, even if this is not strictly 12675 necessary for correct execution of the code. Specifying 12676 `-fomit-frame-pointer' with this option causes the stack frames 12677 not to be generated for leaf functions. The default is 12678 `-mno-apcs-frame'. This option is deprecated. 12679 12680`-mapcs' 12681 This is a synonym for `-mapcs-frame' and is deprecated. 12682 12683`-mthumb-interwork' 12684 Generate code that supports calling between the ARM and Thumb 12685 instruction sets. Without this option, on pre-v5 architectures, 12686 the two instruction sets cannot be reliably used inside one 12687 program. The default is `-mno-thumb-interwork', since slightly 12688 larger code is generated when `-mthumb-interwork' is specified. 12689 In AAPCS configurations this option is meaningless. 12690 12691`-mno-sched-prolog' 12692 Prevent the reordering of instructions in the function prologue, 12693 or the merging of those instruction with the instructions in the 12694 function's body. This means that all functions start with a 12695 recognizable set of instructions (or in fact one of a choice from 12696 a small set of different function prologues), and this information 12697 can be used to locate the start of functions inside an executable 12698 piece of code. The default is `-msched-prolog'. 12699 12700`-mfloat-abi=NAME' 12701 Specifies which floating-point ABI to use. Permissible values 12702 are: `soft', `softfp' and `hard'. 12703 12704 Specifying `soft' causes GCC to generate output containing library 12705 calls for floating-point operations. `softfp' allows the 12706 generation of code using hardware floating-point instructions, but 12707 still uses the soft-float calling conventions. `hard' allows 12708 generation of floating-point instructions and uses FPU-specific 12709 calling conventions. 12710 12711 The default depends on the specific target configuration. Note 12712 that the hard-float and soft-float ABIs are not link-compatible; 12713 you must compile your entire program with the same ABI, and link 12714 with a compatible set of libraries. 12715 12716`-mlittle-endian' 12717 Generate code for a processor running in little-endian mode. This 12718 is the default for all standard configurations. 12719 12720`-mbig-endian' 12721 Generate code for a processor running in big-endian mode; the 12722 default is to compile code for a little-endian processor. 12723 12724`-march=NAME' 12725 This specifies the name of the target ARM architecture. GCC uses 12726 this name to determine what kind of instructions it can emit when 12727 generating assembly code. This option can be used in conjunction 12728 with or instead of the `-mcpu=' option. Permissible names are: 12729 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 12730 `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2', 12731 `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r', 12732 `armv7-m', `armv7e-m', `armv7ve', `armv8-a', `armv8-a+crc', 12733 `iwmmxt', `iwmmxt2', `ep9312'. 12734 12735 `-march=armv7ve' is the armv7-a architecture with virtualization 12736 extensions. 12737 12738 `-march=armv8-a+crc' enables code generation for the ARMv8-A 12739 architecture together with the optional CRC32 extensions. 12740 12741 `-march=native' causes the compiler to auto-detect the architecture 12742 of the build computer. At present, this feature is only supported 12743 on GNU/Linux, and not all architectures are recognized. If the 12744 auto-detect is unsuccessful the option has no effect. 12745 12746`-mtune=NAME' 12747 This option specifies the name of the target ARM processor for 12748 which GCC should tune the performance of the code. For some ARM 12749 implementations better performance can be obtained by using this 12750 option. Permissible names are: `arm2', `arm250', `arm3', `arm6', 12751 `arm60', `arm600', `arm610', `arm620', `arm7', `arm7m', `arm7d', 12752 `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', `arm700i', 12753 `arm710', `arm710c', `arm7100', `arm720', `arm7500', `arm7500fe', 12754 `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', `arm740t', 12755 `strongarm', `strongarm110', `strongarm1100', `strongarm1110', 12756 `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t', `arm922t', 12757 `arm946e-s', `arm966e-s', `arm968e-s', `arm926ej-s', `arm940t', 12758 `arm9tdmi', `arm10tdmi', `arm1020t', `arm1026ej-s', `arm10e', 12759 `arm1020e', `arm1022e', `arm1136j-s', `arm1136jf-s', `mpcore', 12760 `mpcorenovfp', `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', 12761 `arm1176jzf-s', `cortex-a5', `cortex-a7', `cortex-a8', `cortex-a9', 12762 `cortex-a12', `cortex-a15', `cortex-a53', `cortex-a57', 12763 `cortex-a72', `cortex-r4', `cortex-r4f', `cortex-r5', `cortex-r7', 12764 `cortex-m7', `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0', 12765 `cortex-m0plus', `cortex-m1.small-multiply', 12766 `cortex-m0.small-multiply', `cortex-m0plus.small-multiply', 12767 `exynos-m1', `marvell-pj4', `xscale', `iwmmxt', `iwmmxt2', 12768 `ep9312', `fa526', `fa626', `fa606te', `fa626te', `fmp626', 12769 `fa726te', `xgene1'. 12770 12771 Additionally, this option can specify that GCC should tune the 12772 performance of the code for a big.LITTLE system. Permissible 12773 names are: `cortex-a15.cortex-a7', `cortex-a57.cortex-a53', 12774 `cortex-a72.cortex-a53'. 12775 12776 `-mtune=generic-ARCH' specifies that GCC should tune the 12777 performance for a blend of processors within architecture ARCH. 12778 The aim is to generate code that run well on the current most 12779 popular processors, balancing between optimizations that benefit 12780 some CPUs in the range, and avoiding performance pitfalls of other 12781 CPUs. The effects of this option may change in future GCC 12782 versions as CPU models come and go. 12783 12784 `-mtune=native' causes the compiler to auto-detect the CPU of the 12785 build computer. At present, this feature is only supported on 12786 GNU/Linux, and not all architectures are recognized. If the 12787 auto-detect is unsuccessful the option has no effect. 12788 12789`-mcpu=NAME' 12790 This specifies the name of the target ARM processor. GCC uses 12791 this name to derive the name of the target ARM architecture (as if 12792 specified by `-march') and the ARM processor type for which to 12793 tune for performance (as if specified by `-mtune'). Where this 12794 option is used in conjunction with `-march' or `-mtune', those 12795 options take precedence over the appropriate part of this option. 12796 12797 Permissible names for this option are the same as those for 12798 `-mtune'. 12799 12800 `-mcpu=generic-ARCH' is also permissible, and is equivalent to 12801 `-march=ARCH -mtune=generic-ARCH'. See `-mtune' for more 12802 information. 12803 12804 `-mcpu=native' causes the compiler to auto-detect the CPU of the 12805 build computer. At present, this feature is only supported on 12806 GNU/Linux, and not all architectures are recognized. If the 12807 auto-detect is unsuccessful the option has no effect. 12808 12809`-mfpu=NAME' 12810 This specifies what floating-point hardware (or hardware 12811 emulation) is available on the target. Permissible names are: 12812 `vfp', `vfpv3', `vfpv3-fp16', `vfpv3-d16', `vfpv3-d16-fp16', 12813 `vfpv3xd', `vfpv3xd-fp16', `neon', `neon-fp16', `vfpv4', 12814 `vfpv4-d16', `fpv4-sp-d16', `neon-vfpv4', `fpv5-d16', 12815 `fpv5-sp-d16', `fp-armv8', `neon-fp-armv8', and 12816 `crypto-neon-fp-armv8'. 12817 12818 If `-msoft-float' is specified this specifies the format of 12819 floating-point values. 12820 12821 If the selected floating-point hardware includes the NEON extension 12822 (e.g. `-mfpu'=`neon'), note that floating-point operations are not 12823 generated by GCC's auto-vectorization pass unless 12824 `-funsafe-math-optimizations' is also specified. This is because 12825 NEON hardware does not fully implement the IEEE 754 standard for 12826 floating-point arithmetic (in particular denormal values are 12827 treated as zero), so the use of NEON instructions may lead to a 12828 loss of precision. 12829 12830`-mfp16-format=NAME' 12831 Specify the format of the `__fp16' half-precision floating-point 12832 type. Permissible names are `none', `ieee', and `alternative'; 12833 the default is `none', in which case the `__fp16' type is not 12834 defined. *Note Half-Precision::, for more information. 12835 12836`-mstructure-size-boundary=N' 12837 The sizes of all structures and unions are rounded up to a multiple 12838 of the number of bits set by this option. Permissible values are 12839 8, 32 and 64. The default value varies for different toolchains. 12840 For the COFF targeted toolchain the default value is 8. A value 12841 of 64 is only allowed if the underlying ABI supports it. 12842 12843 Specifying a larger number can produce faster, more efficient 12844 code, but can also increase the size of the program. Different 12845 values are potentially incompatible. Code compiled with one value 12846 cannot necessarily expect to work with code or libraries compiled 12847 with another value, if they exchange information using structures 12848 or unions. 12849 12850`-mabort-on-noreturn' 12851 Generate a call to the function `abort' at the end of a `noreturn' 12852 function. It is executed if the function tries to return. 12853 12854`-mlong-calls' 12855`-mno-long-calls' 12856 Tells the compiler to perform function calls by first loading the 12857 address of the function into a register and then performing a 12858 subroutine call on this register. This switch is needed if the 12859 target function lies outside of the 64-megabyte addressing range 12860 of the offset-based version of subroutine call instruction. 12861 12862 Even if this switch is enabled, not all function calls are turned 12863 into long calls. The heuristic is that static functions, functions 12864 that have the `short_call' attribute, functions that are inside 12865 the scope of a `#pragma no_long_calls' directive, and functions 12866 whose definitions have already been compiled within the current 12867 compilation unit are not turned into long calls. The exceptions 12868 to this rule are that weak function definitions, functions with 12869 the `long_call' attribute or the `section' attribute, and 12870 functions that are within the scope of a `#pragma long_calls' 12871 directive are always turned into long calls. 12872 12873 This feature is not enabled by default. Specifying 12874 `-mno-long-calls' restores the default behavior, as does placing 12875 the function calls within the scope of a `#pragma long_calls_off' 12876 directive. Note these switches have no effect on how the compiler 12877 generates code to handle function calls via function pointers. 12878 12879`-msingle-pic-base' 12880 Treat the register used for PIC addressing as read-only, rather 12881 than loading it in the prologue for each function. The runtime 12882 system is responsible for initializing this register with an 12883 appropriate value before execution begins. 12884 12885`-mpic-register=REG' 12886 Specify the register to be used for PIC addressing. For standard 12887 PIC base case, the default is any suitable register determined by 12888 compiler. For single PIC base case, the default is `R9' if target 12889 is EABI based or stack-checking is enabled, otherwise the default 12890 is `R10'. 12891 12892`-mpic-data-is-text-relative' 12893 Assume that each data segments are relative to text segment at 12894 load time. Therefore, it permits addressing data using 12895 PC-relative operations. This option is on by default for targets 12896 other than VxWorks RTP. 12897 12898`-mpoke-function-name' 12899 Write the name of each function into the text section, directly 12900 preceding the function prologue. The generated code is similar to 12901 this: 12902 12903 t0 12904 .ascii "arm_poke_function_name", 0 12905 .align 12906 t1 12907 .word 0xff000000 + (t1 - t0) 12908 arm_poke_function_name 12909 mov ip, sp 12910 stmfd sp!, {fp, ip, lr, pc} 12911 sub fp, ip, #4 12912 12913 When performing a stack backtrace, code can inspect the value of 12914 `pc' stored at `fp + 0'. If the trace function then looks at 12915 location `pc - 12' and the top 8 bits are set, then we know that 12916 there is a function name embedded immediately preceding this 12917 location and has length `((pc[-3]) & 0xff000000)'. 12918 12919`-mthumb' 12920`-marm' 12921 Select between generating code that executes in ARM and Thumb 12922 states. The default for most configurations is to generate code 12923 that executes in ARM state, but the default can be changed by 12924 configuring GCC with the `--with-mode='STATE configure option. 12925 12926`-mtpcs-frame' 12927 Generate a stack frame that is compliant with the Thumb Procedure 12928 Call Standard for all non-leaf functions. (A leaf function is one 12929 that does not call any other functions.) The default is 12930 `-mno-tpcs-frame'. 12931 12932`-mtpcs-leaf-frame' 12933 Generate a stack frame that is compliant with the Thumb Procedure 12934 Call Standard for all leaf functions. (A leaf function is one 12935 that does not call any other functions.) The default is 12936 `-mno-apcs-leaf-frame'. 12937 12938`-mcallee-super-interworking' 12939 Gives all externally visible functions in the file being compiled 12940 an ARM instruction set header which switches to Thumb mode before 12941 executing the rest of the function. This allows these functions 12942 to be called from non-interworking code. This option is not valid 12943 in AAPCS configurations because interworking is enabled by default. 12944 12945`-mcaller-super-interworking' 12946 Allows calls via function pointers (including virtual functions) to 12947 execute correctly regardless of whether the target code has been 12948 compiled for interworking or not. There is a small overhead in 12949 the cost of executing a function pointer if this option is 12950 enabled. This option is not valid in AAPCS configurations because 12951 interworking is enabled by default. 12952 12953`-mtp=NAME' 12954 Specify the access model for the thread local storage pointer. 12955 The valid models are `soft', which generates calls to 12956 `__aeabi_read_tp', `cp15', which fetches the thread pointer from 12957 `cp15' directly (supported in the arm6k architecture), and `auto', 12958 which uses the best available method for the selected processor. 12959 The default setting is `auto'. 12960 12961`-mtls-dialect=DIALECT' 12962 Specify the dialect to use for accessing thread local storage. Two 12963 DIALECTs are supported--`gnu' and `gnu2'. The `gnu' dialect 12964 selects the original GNU scheme for supporting local and global 12965 dynamic TLS models. The `gnu2' dialect selects the GNU descriptor 12966 scheme, which provides better performance for shared libraries. 12967 The GNU descriptor scheme is compatible with the original scheme, 12968 but does require new assembler, linker and library support. 12969 Initial and local exec TLS models are unaffected by this option 12970 and always use the original scheme. 12971 12972`-mword-relocations' 12973 Only generate absolute relocations on word-sized values (i.e. 12974 R_ARM_ABS32). This is enabled by default on targets (uClinux, 12975 SymbianOS) where the runtime loader imposes this restriction, and 12976 when `-fpic' or `-fPIC' is specified. 12977 12978`-mfix-cortex-m3-ldrd' 12979 Some Cortex-M3 cores can cause data corruption when `ldrd' 12980 instructions with overlapping destination and base registers are 12981 used. This option avoids generating these instructions. This 12982 option is enabled by default when `-mcpu=cortex-m3' is specified. 12983 12984`-munaligned-access' 12985`-mno-unaligned-access' 12986 Enables (or disables) reading and writing of 16- and 32- bit values 12987 from addresses that are not 16- or 32- bit aligned. By default 12988 unaligned access is disabled for all pre-ARMv6 and all ARMv6-M 12989 architectures, and enabled for all other architectures. If 12990 unaligned access is not enabled then words in packed data 12991 structures are accessed a byte at a time. 12992 12993 The ARM attribute `Tag_CPU_unaligned_access' is set in the 12994 generated object file to either true or false, depending upon the 12995 setting of this option. If unaligned access is enabled then the 12996 preprocessor symbol `__ARM_FEATURE_UNALIGNED' is also defined. 12997 12998`-mneon-for-64bits' 12999 Enables using Neon to handle scalar 64-bits operations. This is 13000 disabled by default since the cost of moving data from core 13001 registers to Neon is high. 13002 13003`-mslow-flash-data' 13004 Assume loading data from flash is slower than fetching instruction. 13005 Therefore literal load is minimized for better performance. This 13006 option is only supported when compiling for ARMv7 M-profile and 13007 off by default. 13008 13009`-masm-syntax-unified' 13010 Assume inline assembler is using unified asm syntax. The default 13011 is currently off which implies divided syntax. Currently this 13012 option is available only for Thumb1 and has no effect on ARM state 13013 and Thumb2. However, this may change in future releases of GCC. 13014 Divided syntax should be considered deprecated. 13015 13016`-mrestrict-it' 13017 Restricts generation of IT blocks to conform to the rules of ARMv8. 13018 IT blocks can only contain a single 16-bit instruction from a 13019 select set of instructions. This option is on by default for ARMv8 13020 Thumb mode. 13021 13022`-mprint-tune-info' 13023 Print CPU tuning information as comment in assembler file. This is 13024 an option used only for regression testing of the compiler and not 13025 intended for ordinary use in compiling code. This option is 13026 disabled by default. 13027 13028 13029File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 13030 130313.17.5 AVR Options 13032------------------ 13033 13034These options are defined for AVR implementations: 13035 13036`-mmcu=MCU' 13037 Specify Atmel AVR instruction set architectures (ISA) or MCU type. 13038 13039 The default for this option is `avr2'. 13040 13041 GCC supports the following AVR devices and ISAs: 13042 13043 `avr2' 13044 "Classic" devices with up to 8 KiB of program memory. 13045 MCU = `attiny22', `attiny26', `at90c8534', `at90s2313', 13046 `at90s2323', `at90s2333', `at90s2343', `at90s4414', 13047 `at90s4433', `at90s4434', `at90s8515', `at90s8535'. 13048 13049 `avr25' 13050 "Classic" devices with up to 8 KiB of program memory and with 13051 the `MOVW' instruction. 13052 MCU = `ata5272', `ata6616c', `attiny13', `attiny13a', 13053 `attiny2313', `attiny2313a', `attiny24', `attiny24a', 13054 `attiny25', `attiny261', `attiny261a', `attiny43u', 13055 `attiny4313', `attiny44', `attiny44a', `attiny441', 13056 `attiny45', `attiny461', `attiny461a', `attiny48', 13057 `attiny828', `attiny84', `attiny84a', `attiny841', 13058 `attiny85', `attiny861', `attiny861a', `attiny87', 13059 `attiny88', `at86rf401'. 13060 13061 `avr3' 13062 "Classic" devices with 16 KiB up to 64 KiB of program memory. 13063 MCU = `at43usb355', `at76c711'. 13064 13065 `avr31' 13066 "Classic" devices with 128 KiB of program memory. 13067 MCU = `atmega103', `at43usb320'. 13068 13069 `avr35' 13070 "Classic" devices with 16 KiB up to 64 KiB of program memory 13071 and with the `MOVW' instruction. 13072 MCU = `ata5505', `ata6617c', `ata664251', `atmega16u2', 13073 `atmega32u2', `atmega8u2', `attiny1634', `attiny167', 13074 `at90usb162', `at90usb82'. 13075 13076 `avr4' 13077 "Enhanced" devices with up to 8 KiB of program memory. 13078 MCU = `ata6285', `ata6286', `ata6289', `ata6612c', 13079 `atmega48', `atmega48a', `atmega48p', `atmega48pa', 13080 `atmega8', `atmega8a', `atmega8hva', `atmega8515', 13081 `atmega8535', `atmega88', `atmega88a', `atmega88p', 13082 `atmega88pa', `at90pwm1', `at90pwm2', `at90pwm2b', 13083 `at90pwm3', `at90pwm3b', `at90pwm81'. 13084 13085 `avr5' 13086 "Enhanced" devices with 16 KiB up to 64 KiB of program memory. 13087 MCU = `ata5702m322', `ata5782', `ata5790', `ata5790n', 13088 `ata5795', `ata5831', `ata6613c', `ata6614q', `atmega16', 13089 `atmega16a', `atmega16hva', `atmega16hva2', `atmega16hvb', 13090 `atmega16hvbrevb', `atmega16m1', `atmega16u4', `atmega161', 13091 `atmega162', `atmega163', `atmega164a', `atmega164p', 13092 `atmega164pa', `atmega165', `atmega165a', `atmega165p', 13093 `atmega165pa', `atmega168', `atmega168a', `atmega168p', 13094 `atmega168pa', `atmega169', `atmega169a', `atmega169p', 13095 `atmega169pa', `atmega32', `atmega32a', `atmega32c1', 13096 `atmega32hvb', `atmega32hvbrevb', `atmega32m1', `atmega32u4', 13097 `atmega32u6', `atmega323', `atmega324a', `atmega324p', 13098 `atmega324pa', `atmega325', `atmega325a', `atmega325p', 13099 `atmega325pa', `atmega3250', `atmega3250a', `atmega3250p', 13100 `atmega3250pa', `atmega328', `atmega328p', `atmega329', 13101 `atmega329a', `atmega329p', `atmega329pa', `atmega3290', 13102 `atmega3290a', `atmega3290p', `atmega3290pa', `atmega406', 13103 `atmega64', `atmega64a', `atmega64c1', `atmega64hve', 13104 `atmega64hve2', `atmega64m1', `atmega64rfr2', `atmega640', 13105 `atmega644', `atmega644a', `atmega644p', `atmega644pa', 13106 `atmega644rfr2', `atmega645', `atmega645a', `atmega645p', 13107 `atmega6450', `atmega6450a', `atmega6450p', `atmega649', 13108 `atmega649a', `atmega649p', `atmega6490', `atmega6490a', 13109 `atmega6490p', `at90can32', `at90can64', `at90pwm161', 13110 `at90pwm216', `at90pwm316', `at90scr100', `at90usb646', 13111 `at90usb647', `at94k', `m3000'. 13112 13113 `avr51' 13114 "Enhanced" devices with 128 KiB of program memory. 13115 MCU = `atmega128', `atmega128a', `atmega128rfa1', 13116 `atmega128rfr2', `atmega1280', `atmega1281', `atmega1284', 13117 `atmega1284p', `atmega1284rfr2', `at90can128', `at90usb1286', 13118 `at90usb1287'. 13119 13120 `avr6' 13121 "Enhanced" devices with 3-byte PC, i.e. with more than 13122 128 KiB of program memory. 13123 MCU = `atmega256rfr2', `atmega2560', `atmega2561', 13124 `atmega2564rfr2'. 13125 13126 `avrxmega2' 13127 "XMEGA" devices with more than 8 KiB and up to 64 KiB of 13128 program memory. 13129 MCU = `atxmega16a4', `atxmega16a4u', `atxmega16c4', 13130 `atxmega16d4', `atxmega16e5', `atxmega32a4', `atxmega32a4u', 13131 `atxmega32c3', `atxmega32c4', `atxmega32d3', `atxmega32d4', 13132 `atxmega32e5', `atxmega8e5'. 13133 13134 `avrxmega4' 13135 "XMEGA" devices with more than 64 KiB and up to 128 KiB of 13136 program memory. 13137 MCU = `atxmega64a3', `atxmega64a3u', `atxmega64a4u', 13138 `atxmega64b1', `atxmega64b3', `atxmega64c3', `atxmega64d3', 13139 `atxmega64d4'. 13140 13141 `avrxmega5' 13142 "XMEGA" devices with more than 64 KiB and up to 128 KiB of 13143 program memory and more than 64 KiB of RAM. 13144 MCU = `atxmega64a1', `atxmega64a1u'. 13145 13146 `avrxmega6' 13147 "XMEGA" devices with more than 128 KiB of program memory. 13148 MCU = `atxmega128a3', `atxmega128a3u', `atxmega128b1', 13149 `atxmega128b3', `atxmega128c3', `atxmega128d3', 13150 `atxmega128d4', `atxmega192a3', `atxmega192a3u', 13151 `atxmega192c3', `atxmega192d3', `atxmega256a3', 13152 `atxmega256a3b', `atxmega256a3bu', `atxmega256a3u', 13153 `atxmega256c3', `atxmega256d3', `atxmega384c3', 13154 `atxmega384d3'. 13155 13156 `avrxmega7' 13157 "XMEGA" devices with more than 128 KiB of program memory and 13158 more than 64 KiB of RAM. 13159 MCU = `atxmega128a1', `atxmega128a1u', `atxmega128a4u'. 13160 13161 `avrtiny' 13162 "TINY" Tiny core devices with 512 B up to 4 KiB of program 13163 memory. 13164 MCU = `attiny10', `attiny20', `attiny4', `attiny40', 13165 `attiny5', `attiny9'. 13166 13167 `avr1' 13168 This ISA is implemented by the minimal AVR core and supported 13169 for assembler only. 13170 MCU = `attiny11', `attiny12', `attiny15', `attiny28', 13171 `at90s1200'. 13172 13173 13174`-maccumulate-args' 13175 Accumulate outgoing function arguments and acquire/release the 13176 needed stack space for outgoing function arguments once in function 13177 prologue/epilogue. Without this option, outgoing arguments are 13178 pushed before calling a function and popped afterwards. 13179 13180 Popping the arguments after the function call can be expensive on 13181 AVR so that accumulating the stack space might lead to smaller 13182 executables because arguments need not to be removed from the 13183 stack after such a function call. 13184 13185 This option can lead to reduced code size for functions that 13186 perform several calls to functions that get their arguments on the 13187 stack like calls to printf-like functions. 13188 13189`-mbranch-cost=COST' 13190 Set the branch costs for conditional branch instructions to COST. 13191 Reasonable values for COST are small, non-negative integers. The 13192 default branch cost is 0. 13193 13194`-mcall-prologues' 13195 Functions prologues/epilogues are expanded as calls to appropriate 13196 subroutines. Code size is smaller. 13197 13198`-mint8' 13199 Assume `int' to be 8-bit integer. This affects the sizes of all 13200 types: a `char' is 1 byte, an `int' is 1 byte, a `long' is 2 bytes, 13201 and `long long' is 4 bytes. Please note that this option does not 13202 conform to the C standards, but it results in smaller code size. 13203 13204`-mn-flash=NUM' 13205 Assume that the flash memory has a size of NUM times 64 KiB. 13206 13207`-mno-interrupts' 13208 Generated code is not compatible with hardware interrupts. Code 13209 size is smaller. 13210 13211`-mrelax' 13212 Try to replace `CALL' resp. `JMP' instruction by the shorter 13213 `RCALL' resp. `RJMP' instruction if applicable. Setting `-mrelax' 13214 just adds the `--mlink-relax' option to the assembler's command 13215 line and the `--relax' option to the linker's command line. 13216 13217 Jump relaxing is performed by the linker because jump offsets are 13218 not known before code is located. Therefore, the assembler code 13219 generated by the compiler is the same, but the instructions in the 13220 executable may differ from instructions in the assembler code. 13221 13222 Relaxing must be turned on if linker stubs are needed, see the 13223 section on `EIND' and linker stubs below. 13224 13225`-mrmw' 13226 Assume that the device supports the Read-Modify-Write instructions 13227 `XCH', `LAC', `LAS' and `LAT'. 13228 13229`-msp8' 13230 Treat the stack pointer register as an 8-bit register, i.e. assume 13231 the high byte of the stack pointer is zero. In general, you don't 13232 need to set this option by hand. 13233 13234 This option is used internally by the compiler to select and build 13235 multilibs for architectures `avr2' and `avr25'. These 13236 architectures mix devices with and without `SPH'. For any setting 13237 other than `-mmcu=avr2' or `-mmcu=avr25' the compiler driver adds 13238 or removes this option from the compiler proper's command line, 13239 because the compiler then knows if the device or architecture has 13240 an 8-bit stack pointer and thus no `SPH' register or not. 13241 13242`-mstrict-X' 13243 Use address register `X' in a way proposed by the hardware. This 13244 means that `X' is only used in indirect, post-increment or 13245 pre-decrement addressing. 13246 13247 Without this option, the `X' register may be used in the same way 13248 as `Y' or `Z' which then is emulated by additional instructions. 13249 For example, loading a value with `X+const' addressing with a 13250 small non-negative `const < 64' to a register RN is performed as 13251 13252 adiw r26, const ; X += const 13253 ld RN, X ; RN = *X 13254 sbiw r26, const ; X -= const 13255 13256`-mtiny-stack' 13257 Only change the lower 8 bits of the stack pointer. 13258 13259`-nodevicelib' 13260 Don't link against AVR-LibC's device specific library `libdev.a'. 13261 13262`-Waddr-space-convert' 13263 Warn about conversions between address spaces in the case where the 13264 resulting address space is not contained in the incoming address 13265 space. 13266 132673.17.5.1 `EIND' and Devices with More Than 128 Ki Bytes of Flash 13268................................................................ 13269 13270Pointers in the implementation are 16 bits wide. The address of a 13271function or label is represented as word address so that indirect jumps 13272and calls can target any code address in the range of 64 Ki words. 13273 13274 In order to facilitate indirect jump on devices with more than 128 Ki 13275bytes of program memory space, there is a special function register 13276called `EIND' that serves as most significant part of the target address 13277when `EICALL' or `EIJMP' instructions are used. 13278 13279 Indirect jumps and calls on these devices are handled as follows by 13280the compiler and are subject to some limitations: 13281 13282 * The compiler never sets `EIND'. 13283 13284 * The compiler uses `EIND' implicitely in `EICALL'/`EIJMP' 13285 instructions or might read `EIND' directly in order to emulate an 13286 indirect call/jump by means of a `RET' instruction. 13287 13288 * The compiler assumes that `EIND' never changes during the startup 13289 code or during the application. In particular, `EIND' is not 13290 saved/restored in function or interrupt service routine 13291 prologue/epilogue. 13292 13293 * For indirect calls to functions and computed goto, the linker 13294 generates _stubs_. Stubs are jump pads sometimes also called 13295 _trampolines_. Thus, the indirect call/jump jumps to such a stub. 13296 The stub contains a direct jump to the desired address. 13297 13298 * Linker relaxation must be turned on so that the linker generates 13299 the stubs correctly in all situations. See the compiler option 13300 `-mrelax' and the linker option `--relax'. There are corner cases 13301 where the linker is supposed to generate stubs but aborts without 13302 relaxation and without a helpful error message. 13303 13304 * The default linker script is arranged for code with `EIND = 0'. 13305 If code is supposed to work for a setup with `EIND != 0', a custom 13306 linker script has to be used in order to place the sections whose 13307 name start with `.trampolines' into the segment where `EIND' 13308 points to. 13309 13310 * The startup code from libgcc never sets `EIND'. Notice that 13311 startup code is a blend of code from libgcc and AVR-LibC. For the 13312 impact of AVR-LibC on `EIND', see the 13313 AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/). 13314 13315 * It is legitimate for user-specific startup code to set up `EIND' 13316 early, for example by means of initialization code located in 13317 section `.init3'. Such code runs prior to general startup code 13318 that initializes RAM and calls constructors, but after the bit of 13319 startup code from AVR-LibC that sets `EIND' to the segment where 13320 the vector table is located. 13321 #include <avr/io.h> 13322 13323 static void 13324 __attribute__((section(".init3"),naked,used,no_instrument_function)) 13325 init3_set_eind (void) 13326 { 13327 __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t" 13328 "out %i0,r24" :: "n" (&EIND) : "r24","memory"); 13329 } 13330 13331 The `__trampolines_start' symbol is defined in the linker script. 13332 13333 * Stubs are generated automatically by the linker if the following 13334 two conditions are met: 13335 - The address of a label is taken by means of the `gs' modifier 13336 (short for _generate stubs_) like so: 13337 LDI r24, lo8(gs(FUNC)) 13338 LDI r25, hi8(gs(FUNC)) 13339 13340 - The final location of that label is in a code segment 13341 _outside_ the segment where the stubs are located. 13342 13343 * The compiler emits such `gs' modifiers for code labels in the 13344 following situations: 13345 - Taking address of a function or code label. 13346 13347 - Computed goto. 13348 13349 - If prologue-save function is used, see `-mcall-prologues' 13350 command-line option. 13351 13352 - Switch/case dispatch tables. If you do not want such dispatch 13353 tables you can specify the `-fno-jump-tables' command-line 13354 option. 13355 13356 - C and C++ constructors/destructors called during 13357 startup/shutdown. 13358 13359 - If the tools hit a `gs()' modifier explained above. 13360 13361 * Jumping to non-symbolic addresses like so is _not_ supported: 13362 13363 int main (void) 13364 { 13365 /* Call function at word address 0x2 */ 13366 return ((int(*)(void)) 0x2)(); 13367 } 13368 13369 Instead, a stub has to be set up, i.e. the function has to be 13370 called through a symbol (`func_4' in the example): 13371 13372 int main (void) 13373 { 13374 extern int func_4 (void); 13375 13376 /* Call function at byte address 0x4 */ 13377 return func_4(); 13378 } 13379 13380 and the application be linked with `-Wl,--defsym,func_4=0x4'. 13381 Alternatively, `func_4' can be defined in the linker script. 13382 133833.17.5.2 Handling of the `RAMPD', `RAMPX', `RAMPY' and `RAMPZ' Special Function Registers 13384......................................................................................... 13385 13386Some AVR devices support memories larger than the 64 KiB range that can 13387be accessed with 16-bit pointers. To access memory locations outside 13388this 64 KiB range, the contentent of a `RAMP' register is used as high 13389part of the address: The `X', `Y', `Z' address register is concatenated 13390with the `RAMPX', `RAMPY', `RAMPZ' special function register, 13391respectively, to get a wide address. Similarly, `RAMPD' is used 13392together with direct addressing. 13393 13394 * The startup code initializes the `RAMP' special function registers 13395 with zero. 13396 13397 * If a *Note named address space: AVR Named Address Spaces. other 13398 than generic or `__flash' is used, then `RAMPZ' is set as needed 13399 before the operation. 13400 13401 * If the device supports RAM larger than 64 KiB and the compiler 13402 needs to change `RAMPZ' to accomplish an operation, `RAMPZ' is 13403 reset to zero after the operation. 13404 13405 * If the device comes with a specific `RAMP' register, the ISR 13406 prologue/epilogue saves/restores that SFR and initializes it with 13407 zero in case the ISR code might (implicitly) use it. 13408 13409 * RAM larger than 64 KiB is not supported by GCC for AVR targets. 13410 If you use inline assembler to read from locations outside the 13411 16-bit address range and change one of the `RAMP' registers, you 13412 must reset it to zero after the access. 13413 13414 134153.17.5.3 AVR Built-in Macros 13416............................ 13417 13418GCC defines several built-in macros so that the user code can test for 13419the presence or absence of features. Almost any of the following 13420built-in macros are deduced from device capabilities and thus triggered 13421by the `-mmcu=' command-line option. 13422 13423 For even more AVR-specific built-in macros see *Note AVR Named Address 13424Spaces:: and *Note AVR Built-in Functions::. 13425 13426`__AVR_ARCH__' 13427 Build-in macro that resolves to a decimal number that identifies 13428 the architecture and depends on the `-mmcu=MCU' option. Possible 13429 values are: 13430 13431 `2', `25', `3', `31', `35', `4', `5', `51', `6' 13432 13433 for MCU=`avr2', `avr25', `avr3', `avr31', `avr35', `avr4', `avr5', 13434 `avr51', `avr6', 13435 13436 respectively and 13437 13438 `100', `102', `104', `105', `106', `107' 13439 13440 for MCU=`avrtiny', `avrxmega2', `avrxmega4', `avrxmega5', 13441 `avrxmega6', `avrxmega7', respectively. If MCU specifies a 13442 device, this built-in macro is set accordingly. For example, with 13443 `-mmcu=atmega8' the macro is defined to `4'. 13444 13445`__AVR_DEVICE__' 13446 Setting `-mmcu=DEVICE' defines this built-in macro which reflects 13447 the device's name. For example, `-mmcu=atmega8' defines the 13448 built-in macro `__AVR_ATmega8__', `-mmcu=attiny261a' defines 13449 `__AVR_ATtiny261A__', etc. 13450 13451 The built-in macros' names follow the scheme `__AVR_DEVICE__' 13452 where DEVICE is the device name as from the AVR user manual. The 13453 difference between DEVICE in the built-in macro and DEVICE in 13454 `-mmcu=DEVICE' is that the latter is always lowercase. 13455 13456 If DEVICE is not a device but only a core architecture like 13457 `avr51', this macro is not defined. 13458 13459`__AVR_DEVICE_NAME__' 13460 Setting `-mmcu=DEVICE' defines this built-in macro to the device's 13461 name. For example, with `-mmcu=atmega8' the macro is defined to 13462 `atmega8'. 13463 13464 If DEVICE is not a device but only a core architecture like 13465 `avr51', this macro is not defined. 13466 13467`__AVR_XMEGA__' 13468 The device / architecture belongs to the XMEGA family of devices. 13469 13470`__AVR_HAVE_ELPM__' 13471 The device has the the `ELPM' instruction. 13472 13473`__AVR_HAVE_ELPMX__' 13474 The device has the `ELPM RN,Z' and `ELPM RN,Z+' instructions. 13475 13476`__AVR_HAVE_MOVW__' 13477 The device has the `MOVW' instruction to perform 16-bit 13478 register-register moves. 13479 13480`__AVR_HAVE_LPMX__' 13481 The device has the `LPM RN,Z' and `LPM RN,Z+' instructions. 13482 13483`__AVR_HAVE_MUL__' 13484 The device has a hardware multiplier. 13485 13486`__AVR_HAVE_JMP_CALL__' 13487 The device has the `JMP' and `CALL' instructions. This is the 13488 case for devices with at least 16 KiB of program memory. 13489 13490`__AVR_HAVE_EIJMP_EICALL__' 13491`__AVR_3_BYTE_PC__' 13492 The device has the `EIJMP' and `EICALL' instructions. This is the 13493 case for devices with more than 128 KiB of program memory. This 13494 also means that the program counter (PC) is 3 bytes wide. 13495 13496`__AVR_2_BYTE_PC__' 13497 The program counter (PC) is 2 bytes wide. This is the case for 13498 devices with up to 128 KiB of program memory. 13499 13500`__AVR_HAVE_8BIT_SP__' 13501`__AVR_HAVE_16BIT_SP__' 13502 The stack pointer (SP) register is treated as 8-bit respectively 13503 16-bit register by the compiler. The definition of these macros 13504 is affected by `-mtiny-stack'. 13505 13506`__AVR_HAVE_SPH__' 13507`__AVR_SP8__' 13508 The device has the SPH (high part of stack pointer) special 13509 function register or has an 8-bit stack pointer, respectively. 13510 The definition of these macros is affected by `-mmcu=' and in the 13511 cases of `-mmcu=avr2' and `-mmcu=avr25' also by `-msp8'. 13512 13513`__AVR_HAVE_RAMPD__' 13514`__AVR_HAVE_RAMPX__' 13515`__AVR_HAVE_RAMPY__' 13516`__AVR_HAVE_RAMPZ__' 13517 The device has the `RAMPD', `RAMPX', `RAMPY', `RAMPZ' special 13518 function register, respectively. 13519 13520`__NO_INTERRUPTS__' 13521 This macro reflects the `-mno-interrupts' command-line option. 13522 13523`__AVR_ERRATA_SKIP__' 13524`__AVR_ERRATA_SKIP_JMP_CALL__' 13525 Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit 13526 instructions because of a hardware erratum. Skip instructions are 13527 `SBRS', `SBRC', `SBIS', `SBIC' and `CPSE'. The second macro is 13528 only defined if `__AVR_HAVE_JMP_CALL__' is also set. 13529 13530`__AVR_ISA_RMW__' 13531 The device has Read-Modify-Write instructions (XCH, LAC, LAS and 13532 LAT). 13533 13534`__AVR_SFR_OFFSET__=OFFSET' 13535 Instructions that can address I/O special function registers 13536 directly like `IN', `OUT', `SBI', etc. may use a different address 13537 as if addressed by an instruction to access RAM like `LD' or 13538 `STS'. This offset depends on the device architecture and has to 13539 be subtracted from the RAM address in order to get the respective 13540 I/O address. 13541 13542`__WITH_AVRLIBC__' 13543 The compiler is configured to be used together with AVR-Libc. See 13544 the `--with-avrlibc' configure option. 13545 13546 13547 13548File: gcc.info, Node: Blackfin Options, Next: C6X Options, Prev: AVR Options, Up: Submodel Options 13549 135503.17.6 Blackfin Options 13551----------------------- 13552 13553`-mcpu=CPU[-SIREVISION]' 13554 Specifies the name of the target Blackfin processor. Currently, 13555 CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522', 13556 `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532', 13557 `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542', 13558 `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m', 13559 `bf548m', `bf549m', `bf561', `bf592'. 13560 13561 The optional SIREVISION specifies the silicon revision of the 13562 target Blackfin processor. Any workarounds available for the 13563 targeted silicon revision are enabled. If SIREVISION is `none', 13564 no workarounds are enabled. If SIREVISION is `any', all 13565 workarounds for the targeted processor are enabled. The 13566 `__SILICON_REVISION__' macro is defined to two hexadecimal digits 13567 representing the major and minor numbers in the silicon revision. 13568 If SIREVISION is `none', the `__SILICON_REVISION__' is not 13569 defined. If SIREVISION is `any', the `__SILICON_REVISION__' is 13570 defined to be `0xffff'. If this optional SIREVISION is not used, 13571 GCC assumes the latest known silicon revision of the targeted 13572 Blackfin processor. 13573 13574 GCC defines a preprocessor macro for the specified CPU. For the 13575 `bfin-elf' toolchain, this option causes the hardware BSP provided 13576 by libgloss to be linked in if `-msim' is not given. 13577 13578 Without this option, `bf532' is used as the processor by default. 13579 13580 Note that support for `bf561' is incomplete. For `bf561', only 13581 the preprocessor macro is defined. 13582 13583`-msim' 13584 Specifies that the program will be run on the simulator. This 13585 causes the simulator BSP provided by libgloss to be linked in. 13586 This option has effect only for `bfin-elf' toolchain. Certain 13587 other options, such as `-mid-shared-library' and `-mfdpic', imply 13588 `-msim'. 13589 13590`-momit-leaf-frame-pointer' 13591 Don't keep the frame pointer in a register for leaf functions. 13592 This avoids the instructions to save, set up and restore frame 13593 pointers and makes an extra register available in leaf functions. 13594 The option `-fomit-frame-pointer' removes the frame pointer for 13595 all functions, which might make debugging harder. 13596 13597`-mspecld-anomaly' 13598 When enabled, the compiler ensures that the generated code does not 13599 contain speculative loads after jump instructions. If this option 13600 is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined. 13601 13602`-mno-specld-anomaly' 13603 Don't generate extra code to prevent speculative loads from 13604 occurring. 13605 13606`-mcsync-anomaly' 13607 When enabled, the compiler ensures that the generated code does not 13608 contain CSYNC or SSYNC instructions too soon after conditional 13609 branches. If this option is used, 13610 `__WORKAROUND_SPECULATIVE_SYNCS' is defined. 13611 13612`-mno-csync-anomaly' 13613 Don't generate extra code to prevent CSYNC or SSYNC instructions 13614 from occurring too soon after a conditional branch. 13615 13616`-mlow-64k' 13617 When enabled, the compiler is free to take advantage of the 13618 knowledge that the entire program fits into the low 64k of memory. 13619 13620`-mno-low-64k' 13621 Assume that the program is arbitrarily large. This is the default. 13622 13623`-mstack-check-l1' 13624 Do stack checking using information placed into L1 scratchpad 13625 memory by the uClinux kernel. 13626 13627`-mid-shared-library' 13628 Generate code that supports shared libraries via the library ID 13629 method. This allows for execute in place and shared libraries in 13630 an environment without virtual memory management. This option 13631 implies `-fPIC'. With a `bfin-elf' target, this option implies 13632 `-msim'. 13633 13634`-mno-id-shared-library' 13635 Generate code that doesn't assume ID-based shared libraries are 13636 being used. This is the default. 13637 13638`-mleaf-id-shared-library' 13639 Generate code that supports shared libraries via the library ID 13640 method, but assumes that this library or executable won't link 13641 against any other ID shared libraries. That allows the compiler 13642 to use faster code for jumps and calls. 13643 13644`-mno-leaf-id-shared-library' 13645 Do not assume that the code being compiled won't link against any 13646 ID shared libraries. Slower code is generated for jump and call 13647 insns. 13648 13649`-mshared-library-id=n' 13650 Specifies the identification number of the ID-based shared library 13651 being compiled. Specifying a value of 0 generates more compact 13652 code; specifying other values forces the allocation of that number 13653 to the current library but is no more space- or time-efficient 13654 than omitting this option. 13655 13656`-msep-data' 13657 Generate code that allows the data segment to be located in a 13658 different area of memory from the text segment. This allows for 13659 execute in place in an environment without virtual memory 13660 management by eliminating relocations against the text section. 13661 13662`-mno-sep-data' 13663 Generate code that assumes that the data segment follows the text 13664 segment. This is the default. 13665 13666`-mlong-calls' 13667`-mno-long-calls' 13668 Tells the compiler to perform function calls by first loading the 13669 address of the function into a register and then performing a 13670 subroutine call on this register. This switch is needed if the 13671 target function lies outside of the 24-bit addressing range of the 13672 offset-based version of subroutine call instruction. 13673 13674 This feature is not enabled by default. Specifying 13675 `-mno-long-calls' restores the default behavior. Note these 13676 switches have no effect on how the compiler generates code to 13677 handle function calls via function pointers. 13678 13679`-mfast-fp' 13680 Link with the fast floating-point library. This library relaxes 13681 some of the IEEE floating-point standard's rules for checking 13682 inputs against Not-a-Number (NAN), in the interest of performance. 13683 13684`-minline-plt' 13685 Enable inlining of PLT entries in function calls to functions that 13686 are not known to bind locally. It has no effect without `-mfdpic'. 13687 13688`-mmulticore' 13689 Build a standalone application for multicore Blackfin processors. 13690 This option causes proper start files and link scripts supporting 13691 multicore to be used, and defines the macro `__BFIN_MULTICORE'. 13692 It can only be used with `-mcpu=bf561[-SIREVISION]'. 13693 13694 This option can be used with `-mcorea' or `-mcoreb', which selects 13695 the one-application-per-core programming model. Without `-mcorea' 13696 or `-mcoreb', the single-application/dual-core programming model 13697 is used. In this model, the main function of Core B should be 13698 named as `coreb_main'. 13699 13700 If this option is not used, the single-core application programming 13701 model is used. 13702 13703`-mcorea' 13704 Build a standalone application for Core A of BF561 when using the 13705 one-application-per-core programming model. Proper start files and 13706 link scripts are used to support Core A, and the macro 13707 `__BFIN_COREA' is defined. This option can only be used in 13708 conjunction with `-mmulticore'. 13709 13710`-mcoreb' 13711 Build a standalone application for Core B of BF561 when using the 13712 one-application-per-core programming model. Proper start files and 13713 link scripts are used to support Core B, and the macro 13714 `__BFIN_COREB' is defined. When this option is used, `coreb_main' 13715 should be used instead of `main'. This option can only be used in 13716 conjunction with `-mmulticore'. 13717 13718`-msdram' 13719 Build a standalone application for SDRAM. Proper start files and 13720 link scripts are used to put the application into SDRAM, and the 13721 macro `__BFIN_SDRAM' is defined. The loader should initialize 13722 SDRAM before loading the application. 13723 13724`-micplb' 13725 Assume that ICPLBs are enabled at run time. This has an effect on 13726 certain anomaly workarounds. For Linux targets, the default is to 13727 assume ICPLBs are enabled; for standalone applications the default 13728 is off. 13729 13730 13731File: gcc.info, Node: C6X Options, Next: CRIS Options, Prev: Blackfin Options, Up: Submodel Options 13732 137333.17.7 C6X Options 13734------------------ 13735 13736`-march=NAME' 13737 This specifies the name of the target architecture. GCC uses this 13738 name to determine what kind of instructions it can emit when 13739 generating assembly code. Permissible names are: `c62x', `c64x', 13740 `c64x+', `c67x', `c67x+', `c674x'. 13741 13742`-mbig-endian' 13743 Generate code for a big-endian target. 13744 13745`-mlittle-endian' 13746 Generate code for a little-endian target. This is the default. 13747 13748`-msim' 13749 Choose startup files and linker script suitable for the simulator. 13750 13751`-msdata=default' 13752 Put small global and static data in the `.neardata' section, which 13753 is pointed to by register `B14'. Put small uninitialized global 13754 and static data in the `.bss' section, which is adjacent to the 13755 `.neardata' section. Put small read-only data into the `.rodata' 13756 section. The corresponding sections used for large pieces of data 13757 are `.fardata', `.far' and `.const'. 13758 13759`-msdata=all' 13760 Put all data, not just small objects, into the sections reserved 13761 for small data, and use addressing relative to the `B14' register 13762 to access them. 13763 13764`-msdata=none' 13765 Make no use of the sections reserved for small data, and use 13766 absolute addresses to access all data. Put all initialized global 13767 and static data in the `.fardata' section, and all uninitialized 13768 data in the `.far' section. Put all constant data into the 13769 `.const' section. 13770 13771 13772File: gcc.info, Node: CRIS Options, Next: CR16 Options, Prev: C6X Options, Up: Submodel Options 13773 137743.17.8 CRIS Options 13775------------------- 13776 13777These options are defined specifically for the CRIS ports. 13778 13779`-march=ARCHITECTURE-TYPE' 13780`-mcpu=ARCHITECTURE-TYPE' 13781 Generate code for the specified architecture. The choices for 13782 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 13783 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 13784 cris-axis-linux-gnu, where the default is `v10'. 13785 13786`-mtune=ARCHITECTURE-TYPE' 13787 Tune to ARCHITECTURE-TYPE everything applicable about the generated 13788 code, except for the ABI and the set of available instructions. 13789 The choices for ARCHITECTURE-TYPE are the same as for 13790 `-march=ARCHITECTURE-TYPE'. 13791 13792`-mmax-stack-frame=N' 13793 Warn when the stack frame of a function exceeds N bytes. 13794 13795`-metrax4' 13796`-metrax100' 13797 The options `-metrax4' and `-metrax100' are synonyms for 13798 `-march=v3' and `-march=v8' respectively. 13799 13800`-mmul-bug-workaround' 13801`-mno-mul-bug-workaround' 13802 Work around a bug in the `muls' and `mulu' instructions for CPU 13803 models where it applies. This option is active by default. 13804 13805`-mpdebug' 13806 Enable CRIS-specific verbose debug-related information in the 13807 assembly code. This option also has the effect of turning off the 13808 `#NO_APP' formatted-code indicator to the assembler at the 13809 beginning of the assembly file. 13810 13811`-mcc-init' 13812 Do not use condition-code results from previous instruction; 13813 always emit compare and test instructions before use of condition 13814 codes. 13815 13816`-mno-side-effects' 13817 Do not emit instructions with side effects in addressing modes 13818 other than post-increment. 13819 13820`-mstack-align' 13821`-mno-stack-align' 13822`-mdata-align' 13823`-mno-data-align' 13824`-mconst-align' 13825`-mno-const-align' 13826 These options (`no-' options) arrange (eliminate arrangements) for 13827 the stack frame, individual data and constants to be aligned for 13828 the maximum single data access size for the chosen CPU model. The 13829 default is to arrange for 32-bit alignment. ABI details such as 13830 structure layout are not affected by these options. 13831 13832`-m32-bit' 13833`-m16-bit' 13834`-m8-bit' 13835 Similar to the stack- data- and const-align options above, these 13836 options arrange for stack frame, writable data and constants to 13837 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 13838 alignment. 13839 13840`-mno-prologue-epilogue' 13841`-mprologue-epilogue' 13842 With `-mno-prologue-epilogue', the normal function prologue and 13843 epilogue which set up the stack frame are omitted and no return 13844 instructions or return sequences are generated in the code. Use 13845 this option only together with visual inspection of the compiled 13846 code: no warnings or errors are generated when call-saved 13847 registers must be saved, or storage for local variables needs to 13848 be allocated. 13849 13850`-mno-gotplt' 13851`-mgotplt' 13852 With `-fpic' and `-fPIC', don't generate (do generate) instruction 13853 sequences that load addresses for functions from the PLT part of 13854 the GOT rather than (traditional on other architectures) calls to 13855 the PLT. The default is `-mgotplt'. 13856 13857`-melf' 13858 Legacy no-op option only recognized with the cris-axis-elf and 13859 cris-axis-linux-gnu targets. 13860 13861`-mlinux' 13862 Legacy no-op option only recognized with the cris-axis-linux-gnu 13863 target. 13864 13865`-sim' 13866 This option, recognized for the cris-axis-elf, arranges to link 13867 with input-output functions from a simulator library. Code, 13868 initialized data and zero-initialized data are allocated 13869 consecutively. 13870 13871`-sim2' 13872 Like `-sim', but pass linker options to locate initialized data at 13873 0x40000000 and zero-initialized data at 0x80000000. 13874 13875 13876File: gcc.info, Node: CR16 Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 13877 138783.17.9 CR16 Options 13879------------------- 13880 13881These options are defined specifically for the CR16 ports. 13882 13883`-mmac' 13884 Enable the use of multiply-accumulate instructions. Disabled by 13885 default. 13886 13887`-mcr16cplus' 13888`-mcr16c' 13889 Generate code for CR16C or CR16C+ architecture. CR16C+ architecture 13890 is default. 13891 13892`-msim' 13893 Links the library libsim.a which is in compatible with simulator. 13894 Applicable to ELF compiler only. 13895 13896`-mint32' 13897 Choose integer type as 32-bit wide. 13898 13899`-mbit-ops' 13900 Generates `sbit'/`cbit' instructions for bit manipulations. 13901 13902`-mdata-model=MODEL' 13903 Choose a data model. The choices for MODEL are `near', `far' or 13904 `medium'. `medium' is default. However, `far' is not valid with 13905 `-mcr16c', as the CR16C architecture does not support the far data 13906 model. 13907 13908 13909File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CR16 Options, Up: Submodel Options 13910 139113.17.10 Darwin Options 13912---------------------- 13913 13914These options are defined for all architectures running the Darwin 13915operating system. 13916 13917 FSF GCC on Darwin does not create "fat" object files; it creates an 13918object file for the single architecture that GCC was built to target. 13919Apple's GCC on Darwin does create "fat" files if multiple `-arch' 13920options are used; it does so by running the compiler or linker multiple 13921times and joining the results together with `lipo'. 13922 13923 The subtype of the file created (like `ppc7400' or `ppc970' or `i686') 13924is determined by the flags that specify the ISA that GCC is targeting, 13925like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be 13926used to override this. 13927 13928 The Darwin tools vary in their behavior when presented with an ISA 13929mismatch. The assembler, `as', only permits instructions to be used 13930that are valid for the subtype of the file it is generating, so you 13931cannot put 64-bit instructions in a `ppc750' object file. The linker 13932for shared libraries, `/usr/bin/libtool', fails and prints an error if 13933asked to create a shared library with a less restrictive subtype than 13934its input files (for instance, trying to put a `ppc970' object file in 13935a `ppc7400' library). The linker for executables, `ld', quietly gives 13936the executable the most restrictive subtype of any of its input files. 13937 13938`-FDIR' 13939 Add the framework directory DIR to the head of the list of 13940 directories to be searched for header files. These directories are 13941 interleaved with those specified by `-I' options and are scanned 13942 in a left-to-right order. 13943 13944 A framework directory is a directory with frameworks in it. A 13945 framework is a directory with a `Headers' and/or `PrivateHeaders' 13946 directory contained directly in it that ends in `.framework'. The 13947 name of a framework is the name of this directory excluding the 13948 `.framework'. Headers associated with the framework are found in 13949 one of those two directories, with `Headers' being searched first. 13950 A subframework is a framework directory that is in a framework's 13951 `Frameworks' directory. Includes of subframework headers can only 13952 appear in a header of a framework that contains the subframework, 13953 or in a sibling subframework header. Two subframeworks are 13954 siblings if they occur in the same framework. A subframework 13955 should not have the same name as a framework; a warning is issued 13956 if this is violated. Currently a subframework cannot have 13957 subframeworks; in the future, the mechanism may be extended to 13958 support this. The standard frameworks can be found in 13959 `/System/Library/Frameworks' and `/Library/Frameworks'. An 13960 example include looks like `#include <Framework/header.h>', where 13961 `Framework' denotes the name of the framework and `header.h' is 13962 found in the `PrivateHeaders' or `Headers' directory. 13963 13964`-iframeworkDIR' 13965 Like `-F' except the directory is a treated as a system directory. 13966 The main difference between this `-iframework' and `-F' is that 13967 with `-iframework' the compiler does not warn about constructs 13968 contained within header files found via DIR. This option is valid 13969 only for the C family of languages. 13970 13971`-gused' 13972 Emit debugging information for symbols that are used. For stabs 13973 debugging format, this enables `-feliminate-unused-debug-symbols'. 13974 This is by default ON. 13975 13976`-gfull' 13977 Emit debugging information for all symbols and types. 13978 13979`-mmacosx-version-min=VERSION' 13980 The earliest version of MacOS X that this executable will run on 13981 is VERSION. Typical values of VERSION include `10.1', `10.2', and 13982 `10.3.9'. 13983 13984 If the compiler was built to use the system's headers by default, 13985 then the default for this option is the system version on which the 13986 compiler is running, otherwise the default is to make choices that 13987 are compatible with as many systems and code bases as possible. 13988 13989`-mkernel' 13990 Enable kernel development mode. The `-mkernel' option sets 13991 `-static', `-fno-common', `-fno-use-cxa-atexit', 13992 `-fno-exceptions', `-fno-non-call-exceptions', `-fapple-kext', 13993 `-fno-weak' and `-fno-rtti' where applicable. This mode also sets 13994 `-mno-altivec', `-msoft-float', `-fno-builtin' and `-mlong-branch' 13995 for PowerPC targets. 13996 13997`-mone-byte-bool' 13998 Override the defaults for `bool' so that `sizeof(bool)==1'. By 13999 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC 14000 and `1' when compiling for Darwin/x86, so this option has no 14001 effect on x86. 14002 14003 *Warning:* The `-mone-byte-bool' switch causes GCC to generate 14004 code that is not binary compatible with code generated without 14005 that switch. Using this switch may require recompiling all other 14006 modules in a program, including system libraries. Use this switch 14007 to conform to a non-default data model. 14008 14009`-mfix-and-continue' 14010`-ffix-and-continue' 14011`-findirect-data' 14012 Generate code suitable for fast turnaround development, such as to 14013 allow GDB to dynamically load `.o' files into already-running 14014 programs. `-findirect-data' and `-ffix-and-continue' are provided 14015 for backwards compatibility. 14016 14017`-all_load' 14018 Loads all members of static archive libraries. See man ld(1) for 14019 more information. 14020 14021`-arch_errors_fatal' 14022 Cause the errors having to do with files that have the wrong 14023 architecture to be fatal. 14024 14025`-bind_at_load' 14026 Causes the output file to be marked such that the dynamic linker 14027 will bind all undefined references when the file is loaded or 14028 launched. 14029 14030`-bundle' 14031 Produce a Mach-o bundle format file. See man ld(1) for more 14032 information. 14033 14034`-bundle_loader EXECUTABLE' 14035 This option specifies the EXECUTABLE that will load the build 14036 output file being linked. See man ld(1) for more information. 14037 14038`-dynamiclib' 14039 When passed this option, GCC produces a dynamic library instead of 14040 an executable when linking, using the Darwin `libtool' command. 14041 14042`-force_cpusubtype_ALL' 14043 This causes GCC's output file to have the `ALL' subtype, instead of 14044 one controlled by the `-mcpu' or `-march' option. 14045 14046`-allowable_client CLIENT_NAME' 14047`-client_name' 14048`-compatibility_version' 14049`-current_version' 14050`-dead_strip' 14051`-dependency-file' 14052`-dylib_file' 14053`-dylinker_install_name' 14054`-dynamic' 14055`-exported_symbols_list' 14056`-filelist' 14057`-flat_namespace' 14058`-force_flat_namespace' 14059`-headerpad_max_install_names' 14060`-image_base' 14061`-init' 14062`-install_name' 14063`-keep_private_externs' 14064`-multi_module' 14065`-multiply_defined' 14066`-multiply_defined_unused' 14067`-noall_load' 14068`-no_dead_strip_inits_and_terms' 14069`-nofixprebinding' 14070`-nomultidefs' 14071`-noprebind' 14072`-noseglinkedit' 14073`-pagezero_size' 14074`-prebind' 14075`-prebind_all_twolevel_modules' 14076`-private_bundle' 14077`-read_only_relocs' 14078`-sectalign' 14079`-sectobjectsymbols' 14080`-whyload' 14081`-seg1addr' 14082`-sectcreate' 14083`-sectobjectsymbols' 14084`-sectorder' 14085`-segaddr' 14086`-segs_read_only_addr' 14087`-segs_read_write_addr' 14088`-seg_addr_table' 14089`-seg_addr_table_filename' 14090`-seglinkedit' 14091`-segprot' 14092`-segs_read_only_addr' 14093`-segs_read_write_addr' 14094`-single_module' 14095`-static' 14096`-sub_library' 14097`-sub_umbrella' 14098`-twolevel_namespace' 14099`-umbrella' 14100`-undefined' 14101`-unexported_symbols_list' 14102`-weak_reference_mismatches' 14103`-whatsloaded' 14104 These options are passed to the Darwin linker. The Darwin linker 14105 man page describes them in detail. 14106 14107 14108File: gcc.info, Node: DEC Alpha Options, Next: FR30 Options, Prev: Darwin Options, Up: Submodel Options 14109 141103.17.11 DEC Alpha Options 14111------------------------- 14112 14113These `-m' options are defined for the DEC Alpha implementations: 14114 14115`-mno-soft-float' 14116`-msoft-float' 14117 Use (do not use) the hardware floating-point instructions for 14118 floating-point operations. When `-msoft-float' is specified, 14119 functions in `libgcc.a' are used to perform floating-point 14120 operations. Unless they are replaced by routines that emulate the 14121 floating-point operations, or compiled in such a way as to call 14122 such emulations routines, these routines issue floating-point 14123 operations. If you are compiling for an Alpha without 14124 floating-point operations, you must ensure that the library is 14125 built so as not to call them. 14126 14127 Note that Alpha implementations without floating-point operations 14128 are required to have floating-point registers. 14129 14130`-mfp-reg' 14131`-mno-fp-regs' 14132 Generate code that uses (does not use) the floating-point register 14133 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 14134 register set is not used, floating-point operands are passed in 14135 integer registers as if they were integers and floating-point 14136 results are passed in `$0' instead of `$f0'. This is a 14137 non-standard calling sequence, so any function with a 14138 floating-point argument or return value called by code compiled 14139 with `-mno-fp-regs' must also be compiled with that option. 14140 14141 A typical use of this option is building a kernel that does not 14142 use, and hence need not save and restore, any floating-point 14143 registers. 14144 14145`-mieee' 14146 The Alpha architecture implements floating-point hardware 14147 optimized for maximum performance. It is mostly compliant with 14148 the IEEE floating-point standard. However, for full compliance, 14149 software assistance is required. This option generates code fully 14150 IEEE-compliant code _except_ that the INEXACT-FLAG is not 14151 maintained (see below). If this option is turned on, the 14152 preprocessor macro `_IEEE_FP' is defined during compilation. The 14153 resulting code is less efficient but is able to correctly support 14154 denormalized numbers and exceptional IEEE values such as 14155 not-a-number and plus/minus infinity. Other Alpha compilers call 14156 this option `-ieee_with_no_inexact'. 14157 14158`-mieee-with-inexact' 14159 This is like `-mieee' except the generated code also maintains the 14160 IEEE INEXACT-FLAG. Turning on this option causes the generated 14161 code to implement fully-compliant IEEE math. In addition to 14162 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 14163 On some Alpha implementations the resulting code may execute 14164 significantly slower than the code generated by default. Since 14165 there is very little code that depends on the INEXACT-FLAG, you 14166 should normally not specify this option. Other Alpha compilers 14167 call this option `-ieee_with_inexact'. 14168 14169`-mfp-trap-mode=TRAP-MODE' 14170 This option controls what floating-point related traps are enabled. 14171 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 14172 trap mode can be set to one of four values: 14173 14174 `n' 14175 This is the default (normal) setting. The only traps that 14176 are enabled are the ones that cannot be disabled in software 14177 (e.g., division by zero trap). 14178 14179 `u' 14180 In addition to the traps enabled by `n', underflow traps are 14181 enabled as well. 14182 14183 `su' 14184 Like `u', but the instructions are marked to be safe for 14185 software completion (see Alpha architecture manual for 14186 details). 14187 14188 `sui' 14189 Like `su', but inexact traps are enabled as well. 14190 14191`-mfp-rounding-mode=ROUNDING-MODE' 14192 Selects the IEEE rounding mode. Other Alpha compilers call this 14193 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 14194 14195 `n' 14196 Normal IEEE rounding mode. Floating-point numbers are 14197 rounded towards the nearest machine number or towards the 14198 even machine number in case of a tie. 14199 14200 `m' 14201 Round towards minus infinity. 14202 14203 `c' 14204 Chopped rounding mode. Floating-point numbers are rounded 14205 towards zero. 14206 14207 `d' 14208 Dynamic rounding mode. A field in the floating-point control 14209 register (FPCR, see Alpha architecture reference manual) 14210 controls the rounding mode in effect. The C library 14211 initializes this register for rounding towards plus infinity. 14212 Thus, unless your program modifies the FPCR, `d' corresponds 14213 to round towards plus infinity. 14214 14215`-mtrap-precision=TRAP-PRECISION' 14216 In the Alpha architecture, floating-point traps are imprecise. 14217 This means without software assistance it is impossible to recover 14218 from a floating trap and program execution normally needs to be 14219 terminated. GCC can generate code that can assist operating 14220 system trap handlers in determining the exact location that caused 14221 a floating-point trap. Depending on the requirements of an 14222 application, different levels of precisions can be selected: 14223 14224 `p' 14225 Program precision. This option is the default and means a 14226 trap handler can only identify which program caused a 14227 floating-point exception. 14228 14229 `f' 14230 Function precision. The trap handler can determine the 14231 function that caused a floating-point exception. 14232 14233 `i' 14234 Instruction precision. The trap handler can determine the 14235 exact instruction that caused a floating-point exception. 14236 14237 Other Alpha compilers provide the equivalent options called 14238 `-scope_safe' and `-resumption_safe'. 14239 14240`-mieee-conformant' 14241 This option marks the generated code as IEEE conformant. You must 14242 not use this option unless you also specify `-mtrap-precision=i' 14243 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 14244 effect is to emit the line `.eflag 48' in the function prologue of 14245 the generated assembly file. 14246 14247`-mbuild-constants' 14248 Normally GCC examines a 32- or 64-bit integer constant to see if 14249 it can construct it from smaller constants in two or three 14250 instructions. If it cannot, it outputs the constant as a literal 14251 and generates code to load it from the data segment at run time. 14252 14253 Use this option to require GCC to construct _all_ integer constants 14254 using code, even if it takes more instructions (the maximum is 14255 six). 14256 14257 You typically use this option to build a shared library dynamic 14258 loader. Itself a shared library, it must relocate itself in memory 14259 before it can find the variables and constants in its own data 14260 segment. 14261 14262`-mbwx' 14263`-mno-bwx' 14264`-mcix' 14265`-mno-cix' 14266`-mfix' 14267`-mno-fix' 14268`-mmax' 14269`-mno-max' 14270 Indicate whether GCC should generate code to use the optional BWX, 14271 CIX, FIX and MAX instruction sets. The default is to use the 14272 instruction sets supported by the CPU type specified via `-mcpu=' 14273 option or that of the CPU on which GCC was built if none is 14274 specified. 14275 14276`-mfloat-vax' 14277`-mfloat-ieee' 14278 Generate code that uses (does not use) VAX F and G floating-point 14279 arithmetic instead of IEEE single and double precision. 14280 14281`-mexplicit-relocs' 14282`-mno-explicit-relocs' 14283 Older Alpha assemblers provided no way to generate symbol 14284 relocations except via assembler macros. Use of these macros does 14285 not allow optimal instruction scheduling. GNU binutils as of 14286 version 2.12 supports a new syntax that allows the compiler to 14287 explicitly mark which relocations should apply to which 14288 instructions. This option is mostly useful for debugging, as GCC 14289 detects the capabilities of the assembler when it is built and 14290 sets the default accordingly. 14291 14292`-msmall-data' 14293`-mlarge-data' 14294 When `-mexplicit-relocs' is in effect, static data is accessed via 14295 "gp-relative" relocations. When `-msmall-data' is used, objects 8 14296 bytes long or smaller are placed in a "small data area" (the 14297 `.sdata' and `.sbss' sections) and are accessed via 16-bit 14298 relocations off of the `$gp' register. This limits the size of 14299 the small data area to 64KB, but allows the variables to be 14300 directly accessed via a single instruction. 14301 14302 The default is `-mlarge-data'. With this option the data area is 14303 limited to just below 2GB. Programs that require more than 2GB of 14304 data must use `malloc' or `mmap' to allocate the data in the heap 14305 instead of in the program's data segment. 14306 14307 When generating code for shared libraries, `-fpic' implies 14308 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 14309 14310`-msmall-text' 14311`-mlarge-text' 14312 When `-msmall-text' is used, the compiler assumes that the code of 14313 the entire program (or shared library) fits in 4MB, and is thus 14314 reachable with a branch instruction. When `-msmall-data' is used, 14315 the compiler can assume that all local symbols share the same 14316 `$gp' value, and thus reduce the number of instructions required 14317 for a function call from 4 to 1. 14318 14319 The default is `-mlarge-text'. 14320 14321`-mcpu=CPU_TYPE' 14322 Set the instruction set and instruction scheduling parameters for 14323 machine type CPU_TYPE. You can specify either the `EV' style name 14324 or the corresponding chip number. GCC supports scheduling 14325 parameters for the EV4, EV5 and EV6 family of processors and 14326 chooses the default values for the instruction set from the 14327 processor you specify. If you do not specify a processor type, 14328 GCC defaults to the processor on which the compiler was built. 14329 14330 Supported values for CPU_TYPE are 14331 14332 `ev4' 14333 `ev45' 14334 `21064' 14335 Schedules as an EV4 and has no instruction set extensions. 14336 14337 `ev5' 14338 `21164' 14339 Schedules as an EV5 and has no instruction set extensions. 14340 14341 `ev56' 14342 `21164a' 14343 Schedules as an EV5 and supports the BWX extension. 14344 14345 `pca56' 14346 `21164pc' 14347 `21164PC' 14348 Schedules as an EV5 and supports the BWX and MAX extensions. 14349 14350 `ev6' 14351 `21264' 14352 Schedules as an EV6 and supports the BWX, FIX, and MAX 14353 extensions. 14354 14355 `ev67' 14356 `21264a' 14357 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 14358 extensions. 14359 14360 Native toolchains also support the value `native', which selects 14361 the best architecture option for the host processor. 14362 `-mcpu=native' has no effect if GCC does not recognize the 14363 processor. 14364 14365`-mtune=CPU_TYPE' 14366 Set only the instruction scheduling parameters for machine type 14367 CPU_TYPE. The instruction set is not changed. 14368 14369 Native toolchains also support the value `native', which selects 14370 the best architecture option for the host processor. 14371 `-mtune=native' has no effect if GCC does not recognize the 14372 processor. 14373 14374`-mmemory-latency=TIME' 14375 Sets the latency the scheduler should assume for typical memory 14376 references as seen by the application. This number is highly 14377 dependent on the memory access patterns used by the application 14378 and the size of the external cache on the machine. 14379 14380 Valid options for TIME are 14381 14382 `NUMBER' 14383 A decimal number representing clock cycles. 14384 14385 `L1' 14386 `L2' 14387 `L3' 14388 `main' 14389 The compiler contains estimates of the number of clock cycles 14390 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 14391 (also called Dcache, Scache, and Bcache), as well as to main 14392 memory. Note that L3 is only valid for EV5. 14393 14394 14395 14396File: gcc.info, Node: FR30 Options, Next: FRV Options, Prev: DEC Alpha Options, Up: Submodel Options 14397 143983.17.12 FR30 Options 14399-------------------- 14400 14401These options are defined specifically for the FR30 port. 14402 14403`-msmall-model' 14404 Use the small address space model. This can produce smaller code, 14405 but it does assume that all symbolic values and addresses fit into 14406 a 20-bit range. 14407 14408`-mno-lsim' 14409 Assume that runtime support has been provided and so there is no 14410 need to include the simulator library (`libsim.a') on the linker 14411 command line. 14412 14413 14414 14415File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: FR30 Options, Up: Submodel Options 14416 144173.17.13 FRV Options 14418------------------- 14419 14420`-mgpr-32' 14421 Only use the first 32 general-purpose registers. 14422 14423`-mgpr-64' 14424 Use all 64 general-purpose registers. 14425 14426`-mfpr-32' 14427 Use only the first 32 floating-point registers. 14428 14429`-mfpr-64' 14430 Use all 64 floating-point registers. 14431 14432`-mhard-float' 14433 Use hardware instructions for floating-point operations. 14434 14435`-msoft-float' 14436 Use library routines for floating-point operations. 14437 14438`-malloc-cc' 14439 Dynamically allocate condition code registers. 14440 14441`-mfixed-cc' 14442 Do not try to dynamically allocate condition code registers, only 14443 use `icc0' and `fcc0'. 14444 14445`-mdword' 14446 Change ABI to use double word insns. 14447 14448`-mno-dword' 14449 Do not use double word instructions. 14450 14451`-mdouble' 14452 Use floating-point double instructions. 14453 14454`-mno-double' 14455 Do not use floating-point double instructions. 14456 14457`-mmedia' 14458 Use media instructions. 14459 14460`-mno-media' 14461 Do not use media instructions. 14462 14463`-mmuladd' 14464 Use multiply and add/subtract instructions. 14465 14466`-mno-muladd' 14467 Do not use multiply and add/subtract instructions. 14468 14469`-mfdpic' 14470 Select the FDPIC ABI, which uses function descriptors to represent 14471 pointers to functions. Without any PIC/PIE-related options, it 14472 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries 14473 and small data are within a 12-bit range from the GOT base 14474 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32 14475 bits. With a `bfin-elf' target, this option implies `-msim'. 14476 14477`-minline-plt' 14478 Enable inlining of PLT entries in function calls to functions that 14479 are not known to bind locally. It has no effect without `-mfdpic'. 14480 It's enabled by default if optimizing for speed and compiling for 14481 shared libraries (i.e., `-fPIC' or `-fpic'), or when an 14482 optimization option such as `-O3' or above is present in the 14483 command line. 14484 14485`-mTLS' 14486 Assume a large TLS segment when generating thread-local code. 14487 14488`-mtls' 14489 Do not assume a large TLS segment when generating thread-local 14490 code. 14491 14492`-mgprel-ro' 14493 Enable the use of `GPREL' relocations in the FDPIC ABI for data 14494 that is known to be in read-only sections. It's enabled by 14495 default, except for `-fpic' or `-fpie': even though it may help 14496 make the global offset table smaller, it trades 1 instruction for 14497 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one 14498 of which may be shared by multiple symbols, and it avoids the need 14499 for a GOT entry for the referenced symbol, so it's more likely to 14500 be a win. If it is not, `-mno-gprel-ro' can be used to disable it. 14501 14502`-multilib-library-pic' 14503 Link with the (library, not FD) pic libraries. It's implied by 14504 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without 14505 `-mfdpic'. You should never have to use it explicitly. 14506 14507`-mlinked-fp' 14508 Follow the EABI requirement of always creating a frame pointer 14509 whenever a stack frame is allocated. This option is enabled by 14510 default and can be disabled with `-mno-linked-fp'. 14511 14512`-mlong-calls' 14513 Use indirect addressing to call functions outside the current 14514 compilation unit. This allows the functions to be placed anywhere 14515 within the 32-bit address space. 14516 14517`-malign-labels' 14518 Try to align labels to an 8-byte boundary by inserting NOPs into 14519 the previous packet. This option only has an effect when VLIW 14520 packing is enabled. It doesn't create new packets; it merely adds 14521 NOPs to existing ones. 14522 14523`-mlibrary-pic' 14524 Generate position-independent EABI code. 14525 14526`-macc-4' 14527 Use only the first four media accumulator registers. 14528 14529`-macc-8' 14530 Use all eight media accumulator registers. 14531 14532`-mpack' 14533 Pack VLIW instructions. 14534 14535`-mno-pack' 14536 Do not pack VLIW instructions. 14537 14538`-mno-eflags' 14539 Do not mark ABI switches in e_flags. 14540 14541`-mcond-move' 14542 Enable the use of conditional-move instructions (default). 14543 14544 This switch is mainly for debugging the compiler and will likely 14545 be removed in a future version. 14546 14547`-mno-cond-move' 14548 Disable the use of conditional-move instructions. 14549 14550 This switch is mainly for debugging the compiler and will likely 14551 be removed in a future version. 14552 14553`-mscc' 14554 Enable the use of conditional set instructions (default). 14555 14556 This switch is mainly for debugging the compiler and will likely 14557 be removed in a future version. 14558 14559`-mno-scc' 14560 Disable the use of conditional set instructions. 14561 14562 This switch is mainly for debugging the compiler and will likely 14563 be removed in a future version. 14564 14565`-mcond-exec' 14566 Enable the use of conditional execution (default). 14567 14568 This switch is mainly for debugging the compiler and will likely 14569 be removed in a future version. 14570 14571`-mno-cond-exec' 14572 Disable the use of conditional execution. 14573 14574 This switch is mainly for debugging the compiler and will likely 14575 be removed in a future version. 14576 14577`-mvliw-branch' 14578 Run a pass to pack branches into VLIW instructions (default). 14579 14580 This switch is mainly for debugging the compiler and will likely 14581 be removed in a future version. 14582 14583`-mno-vliw-branch' 14584 Do not run a pass to pack branches into VLIW instructions. 14585 14586 This switch is mainly for debugging the compiler and will likely 14587 be removed in a future version. 14588 14589`-mmulti-cond-exec' 14590 Enable optimization of `&&' and `||' in conditional execution 14591 (default). 14592 14593 This switch is mainly for debugging the compiler and will likely 14594 be removed in a future version. 14595 14596`-mno-multi-cond-exec' 14597 Disable optimization of `&&' and `||' in conditional execution. 14598 14599 This switch is mainly for debugging the compiler and will likely 14600 be removed in a future version. 14601 14602`-mnested-cond-exec' 14603 Enable nested conditional execution optimizations (default). 14604 14605 This switch is mainly for debugging the compiler and will likely 14606 be removed in a future version. 14607 14608`-mno-nested-cond-exec' 14609 Disable nested conditional execution optimizations. 14610 14611 This switch is mainly for debugging the compiler and will likely 14612 be removed in a future version. 14613 14614`-moptimize-membar' 14615 This switch removes redundant `membar' instructions from the 14616 compiler-generated code. It is enabled by default. 14617 14618`-mno-optimize-membar' 14619 This switch disables the automatic removal of redundant `membar' 14620 instructions from the generated code. 14621 14622`-mtomcat-stats' 14623 Cause gas to print out tomcat statistics. 14624 14625`-mcpu=CPU' 14626 Select the processor type for which to generate code. Possible 14627 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405', 14628 `fr400', `fr300' and `simple'. 14629 14630 14631 14632File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 14633 146343.17.14 GNU/Linux Options 14635------------------------- 14636 14637These `-m' options are defined for GNU/Linux targets: 14638 14639`-mglibc' 14640 Use the GNU C library. This is the default except on 14641 `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets. 14642 14643`-muclibc' 14644 Use uClibc C library. This is the default on `*-*-linux-*uclibc*' 14645 targets. 14646 14647`-mbionic' 14648 Use Bionic C library. This is the default on 14649 `*-*-linux-*android*' targets. 14650 14651`-mandroid' 14652 Compile code compatible with Android platform. This is the 14653 default on `*-*-linux-*android*' targets. 14654 14655 When compiling, this option enables `-mbionic', `-fPIC', 14656 `-fno-exceptions' and `-fno-rtti' by default. When linking, this 14657 option makes the GCC driver pass Android-specific options to the 14658 linker. Finally, this option causes the preprocessor macro 14659 `__ANDROID__' to be defined. 14660 14661`-tno-android-cc' 14662 Disable compilation effects of `-mandroid', i.e., do not enable 14663 `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default. 14664 14665`-tno-android-ld' 14666 Disable linking effects of `-mandroid', i.e., pass standard Linux 14667 linking options to the linker. 14668 14669 14670 14671File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 14672 146733.17.15 H8/300 Options 14674---------------------- 14675 14676These `-m' options are defined for the H8/300 implementations: 14677 14678`-mrelax' 14679 Shorten some address references at link time, when possible; uses 14680 the linker option `-relax'. *Note `ld' and the H8/300: 14681 (ld)H8/300, for a fuller description. 14682 14683`-mh' 14684 Generate code for the H8/300H. 14685 14686`-ms' 14687 Generate code for the H8S. 14688 14689`-mn' 14690 Generate code for the H8S and H8/300H in the normal mode. This 14691 switch must be used either with `-mh' or `-ms'. 14692 14693`-ms2600' 14694 Generate code for the H8S/2600. This switch must be used with 14695 `-ms'. 14696 14697`-mexr' 14698 Extended registers are stored on stack before execution of function 14699 with monitor attribute. Default option is `-mexr'. This option is 14700 valid only for H8S targets. 14701 14702`-mno-exr' 14703 Extended registers are not stored on stack before execution of 14704 function with monitor attribute. Default option is `-mno-exr'. 14705 This option is valid only for H8S targets. 14706 14707`-mint32' 14708 Make `int' data 32 bits by default. 14709 14710`-malign-300' 14711 On the H8/300H and H8S, use the same alignment rules as for the 14712 H8/300. The default for the H8/300H and H8S is to align longs and 14713 floats on 4-byte boundaries. `-malign-300' causes them to be 14714 aligned on 2-byte boundaries. This option has no effect on the 14715 H8/300. 14716 14717 14718File: gcc.info, Node: HPPA Options, Next: IA-64 Options, Prev: H8/300 Options, Up: Submodel Options 14719 147203.17.16 HPPA Options 14721-------------------- 14722 14723These `-m' options are defined for the HPPA family of computers: 14724 14725`-march=ARCHITECTURE-TYPE' 14726 Generate code for the specified architecture. The choices for 14727 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 14728 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 14729 an HP-UX system to determine the proper architecture option for 14730 your machine. Code compiled for lower numbered architectures runs 14731 on higher numbered architectures, but not the other way around. 14732 14733`-mpa-risc-1-0' 14734`-mpa-risc-1-1' 14735`-mpa-risc-2-0' 14736 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 14737 respectively. 14738 14739`-mjump-in-delay' 14740 This option is ignored and provided for compatibility purposes 14741 only. 14742 14743`-mdisable-fpregs' 14744 Prevent floating-point registers from being used in any manner. 14745 This is necessary for compiling kernels that perform lazy context 14746 switching of floating-point registers. If you use this option and 14747 attempt to perform floating-point operations, the compiler aborts. 14748 14749`-mdisable-indexing' 14750 Prevent the compiler from using indexing address modes. This 14751 avoids some rather obscure problems when compiling MIG generated 14752 code under MACH. 14753 14754`-mno-space-regs' 14755 Generate code that assumes the target has no space registers. 14756 This allows GCC to generate faster indirect calls and use unscaled 14757 index address modes. 14758 14759 Such code is suitable for level 0 PA systems and kernels. 14760 14761`-mfast-indirect-calls' 14762 Generate code that assumes calls never cross space boundaries. 14763 This allows GCC to emit code that performs faster indirect calls. 14764 14765 This option does not work in the presence of shared libraries or 14766 nested functions. 14767 14768`-mfixed-range=REGISTER-RANGE' 14769 Generate code treating the given register range as fixed registers. 14770 A fixed register is one that the register allocator cannot use. 14771 This is useful when compiling kernel code. A register range is 14772 specified as two registers separated by a dash. Multiple register 14773 ranges can be specified separated by a comma. 14774 14775`-mlong-load-store' 14776 Generate 3-instruction load and store sequences as sometimes 14777 required by the HP-UX 10 linker. This is equivalent to the `+k' 14778 option to the HP compilers. 14779 14780`-mportable-runtime' 14781 Use the portable calling conventions proposed by HP for ELF 14782 systems. 14783 14784`-mgas' 14785 Enable the use of assembler directives only GAS understands. 14786 14787`-mschedule=CPU-TYPE' 14788 Schedule code according to the constraints for the machine type 14789 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 14790 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 14791 HP-UX system to determine the proper scheduling option for your 14792 machine. The default scheduling is `8000'. 14793 14794`-mlinker-opt' 14795 Enable the optimization pass in the HP-UX linker. Note this makes 14796 symbolic debugging impossible. It also triggers a bug in the 14797 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 14798 messages when linking some programs. 14799 14800`-msoft-float' 14801 Generate output containing library calls for floating point. 14802 *Warning:* the requisite libraries are not available for all HPPA 14803 targets. Normally the facilities of the machine's usual C 14804 compiler are used, but this cannot be done directly in 14805 cross-compilation. You must make your own arrangements to provide 14806 suitable library functions for cross-compilation. 14807 14808 `-msoft-float' changes the calling convention in the output file; 14809 therefore, it is only useful if you compile _all_ of a program with 14810 this option. In particular, you need to compile `libgcc.a', the 14811 library that comes with GCC, with `-msoft-float' in order for this 14812 to work. 14813 14814`-msio' 14815 Generate the predefine, `_SIO', for server IO. The default is 14816 `-mwsio'. This generates the predefines, `__hp9000s700', 14817 `__hp9000s700__' and `_WSIO', for workstation IO. These options 14818 are available under HP-UX and HI-UX. 14819 14820`-mgnu-ld' 14821 Use options specific to GNU `ld'. This passes `-shared' to `ld' 14822 when building a shared library. It is the default when GCC is 14823 configured, explicitly or implicitly, with the GNU linker. This 14824 option does not affect which `ld' is called; it only changes what 14825 parameters are passed to that `ld'. The `ld' that is called is 14826 determined by the `--with-ld' configure option, GCC's program 14827 search path, and finally by the user's `PATH'. The linker used by 14828 GCC can be printed using `which `gcc -print-prog-name=ld`'. This 14829 option is only available on the 64-bit HP-UX GCC, i.e. configured 14830 with `hppa*64*-*-hpux*'. 14831 14832`-mhp-ld' 14833 Use options specific to HP `ld'. This passes `-b' to `ld' when 14834 building a shared library and passes `+Accept TypeMismatch' to 14835 `ld' on all links. It is the default when GCC is configured, 14836 explicitly or implicitly, with the HP linker. This option does 14837 not affect which `ld' is called; it only changes what parameters 14838 are passed to that `ld'. The `ld' that is called is determined by 14839 the `--with-ld' configure option, GCC's program search path, and 14840 finally by the user's `PATH'. The linker used by GCC can be 14841 printed using `which `gcc -print-prog-name=ld`'. This option is 14842 only available on the 64-bit HP-UX GCC, i.e. configured with 14843 `hppa*64*-*-hpux*'. 14844 14845`-mlong-calls' 14846 Generate code that uses long call sequences. This ensures that a 14847 call is always able to reach linker generated stubs. The default 14848 is to generate long calls only when the distance from the call 14849 site to the beginning of the function or translation unit, as the 14850 case may be, exceeds a predefined limit set by the branch type 14851 being used. The limits for normal calls are 7,600,000 and 240,000 14852 bytes, respectively for the PA 2.0 and PA 1.X architectures. 14853 Sibcalls are always limited at 240,000 bytes. 14854 14855 Distances are measured from the beginning of functions when using 14856 the `-ffunction-sections' option, or when using the `-mgas' and 14857 `-mno-portable-runtime' options together under HP-UX with the SOM 14858 linker. 14859 14860 It is normally not desirable to use this option as it degrades 14861 performance. However, it may be useful in large applications, 14862 particularly when partial linking is used to build the application. 14863 14864 The types of long calls used depends on the capabilities of the 14865 assembler and linker, and the type of code being generated. The 14866 impact on systems that support long absolute calls, and long pic 14867 symbol-difference or pc-relative calls should be relatively small. 14868 However, an indirect call is used on 32-bit ELF systems in pic code 14869 and it is quite long. 14870 14871`-munix=UNIX-STD' 14872 Generate compiler predefines and select a startfile for the 14873 specified UNIX standard. The choices for UNIX-STD are `93', `95' 14874 and `98'. `93' is supported on all HP-UX versions. `95' is 14875 available on HP-UX 10.10 and later. `98' is available on HP-UX 14876 11.11 and later. The default values are `93' for HP-UX 10.00, 14877 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and 14878 later. 14879 14880 `-munix=93' provides the same predefines as GCC 3.3 and 3.4. 14881 `-munix=95' provides additional predefines for `XOPEN_UNIX' and 14882 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'. 14883 `-munix=98' provides additional predefines for `_XOPEN_UNIX', 14884 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and 14885 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'. 14886 14887 It is _important_ to note that this option changes the interfaces 14888 for various library routines. It also affects the operational 14889 behavior of the C library. Thus, _extreme_ care is needed in 14890 using this option. 14891 14892 Library code that is intended to operate with more than one UNIX 14893 standard must test, set and restore the variable 14894 `__xpg4_extended_mask' as appropriate. Most GNU software doesn't 14895 provide this capability. 14896 14897`-nolibdld' 14898 Suppress the generation of link options to search libdld.sl when 14899 the `-static' option is specified on HP-UX 10 and later. 14900 14901`-static' 14902 The HP-UX implementation of setlocale in libc has a dependency on 14903 libdld.sl. There isn't an archive version of libdld.sl. Thus, 14904 when the `-static' option is specified, special link options are 14905 needed to resolve this dependency. 14906 14907 On HP-UX 10 and later, the GCC driver adds the necessary options to 14908 link with libdld.sl when the `-static' option is specified. This 14909 causes the resulting binary to be dynamic. On the 64-bit port, 14910 the linkers generate dynamic binaries by default in any case. The 14911 `-nolibdld' option can be used to prevent the GCC driver from 14912 adding these link options. 14913 14914`-threads' 14915 Add support for multithreading with the "dce thread" library under 14916 HP-UX. This option sets flags for both the preprocessor and 14917 linker. 14918 14919 14920File: gcc.info, Node: IA-64 Options, Next: LM32 Options, Prev: HPPA Options, Up: Submodel Options 14921 149223.17.17 IA-64 Options 14923--------------------- 14924 14925These are the `-m' options defined for the Intel IA-64 architecture. 14926 14927`-mbig-endian' 14928 Generate code for a big-endian target. This is the default for 14929 HP-UX. 14930 14931`-mlittle-endian' 14932 Generate code for a little-endian target. This is the default for 14933 AIX5 and GNU/Linux. 14934 14935`-mgnu-as' 14936`-mno-gnu-as' 14937 Generate (or don't) code for the GNU assembler. This is the 14938 default. 14939 14940`-mgnu-ld' 14941`-mno-gnu-ld' 14942 Generate (or don't) code for the GNU linker. This is the default. 14943 14944`-mno-pic' 14945 Generate code that does not use a global pointer register. The 14946 result is not position independent code, and violates the IA-64 14947 ABI. 14948 14949`-mvolatile-asm-stop' 14950`-mno-volatile-asm-stop' 14951 Generate (or don't) a stop bit immediately before and after 14952 volatile asm statements. 14953 14954`-mregister-names' 14955`-mno-register-names' 14956 Generate (or don't) `in', `loc', and `out' register names for the 14957 stacked registers. This may make assembler output more readable. 14958 14959`-mno-sdata' 14960`-msdata' 14961 Disable (or enable) optimizations that use the small data section. 14962 This may be useful for working around optimizer bugs. 14963 14964`-mconstant-gp' 14965 Generate code that uses a single constant global pointer value. 14966 This is useful when compiling kernel code. 14967 14968`-mauto-pic' 14969 Generate code that is self-relocatable. This implies 14970 `-mconstant-gp'. This is useful when compiling firmware code. 14971 14972`-minline-float-divide-min-latency' 14973 Generate code for inline divides of floating-point values using 14974 the minimum latency algorithm. 14975 14976`-minline-float-divide-max-throughput' 14977 Generate code for inline divides of floating-point values using 14978 the maximum throughput algorithm. 14979 14980`-mno-inline-float-divide' 14981 Do not generate inline code for divides of floating-point values. 14982 14983`-minline-int-divide-min-latency' 14984 Generate code for inline divides of integer values using the 14985 minimum latency algorithm. 14986 14987`-minline-int-divide-max-throughput' 14988 Generate code for inline divides of integer values using the 14989 maximum throughput algorithm. 14990 14991`-mno-inline-int-divide' 14992 Do not generate inline code for divides of integer values. 14993 14994`-minline-sqrt-min-latency' 14995 Generate code for inline square roots using the minimum latency 14996 algorithm. 14997 14998`-minline-sqrt-max-throughput' 14999 Generate code for inline square roots using the maximum throughput 15000 algorithm. 15001 15002`-mno-inline-sqrt' 15003 Do not generate inline code for `sqrt'. 15004 15005`-mfused-madd' 15006`-mno-fused-madd' 15007 Do (don't) generate code that uses the fused multiply/add or 15008 multiply/subtract instructions. The default is to use these 15009 instructions. 15010 15011`-mno-dwarf2-asm' 15012`-mdwarf2-asm' 15013 Don't (or do) generate assembler code for the DWARF 2 line number 15014 debugging info. This may be useful when not using the GNU 15015 assembler. 15016 15017`-mearly-stop-bits' 15018`-mno-early-stop-bits' 15019 Allow stop bits to be placed earlier than immediately preceding the 15020 instruction that triggered the stop bit. This can improve 15021 instruction scheduling, but does not always do so. 15022 15023`-mfixed-range=REGISTER-RANGE' 15024 Generate code treating the given register range as fixed registers. 15025 A fixed register is one that the register allocator cannot use. 15026 This is useful when compiling kernel code. A register range is 15027 specified as two registers separated by a dash. Multiple register 15028 ranges can be specified separated by a comma. 15029 15030`-mtls-size=TLS-SIZE' 15031 Specify bit size of immediate TLS offsets. Valid values are 14, 15032 22, and 64. 15033 15034`-mtune=CPU-TYPE' 15035 Tune the instruction scheduling for a particular CPU, Valid values 15036 are `itanium', `itanium1', `merced', `itanium2', and `mckinley'. 15037 15038`-milp32' 15039`-mlp64' 15040 Generate code for a 32-bit or 64-bit environment. The 32-bit 15041 environment sets int, long and pointer to 32 bits. The 64-bit 15042 environment sets int to 32 bits and long and pointer to 64 bits. 15043 These are HP-UX specific flags. 15044 15045`-mno-sched-br-data-spec' 15046`-msched-br-data-spec' 15047 (Dis/En)able data speculative scheduling before reload. This 15048 results in generation of `ld.a' instructions and the corresponding 15049 check instructions (`ld.c' / `chk.a'). The default is 'disable'. 15050 15051`-msched-ar-data-spec' 15052`-mno-sched-ar-data-spec' 15053 (En/Dis)able data speculative scheduling after reload. This 15054 results in generation of `ld.a' instructions and the corresponding 15055 check instructions (`ld.c' / `chk.a'). The default is 'enable'. 15056 15057`-mno-sched-control-spec' 15058`-msched-control-spec' 15059 (Dis/En)able control speculative scheduling. This feature is 15060 available only during region scheduling (i.e. before reload). 15061 This results in generation of the `ld.s' instructions and the 15062 corresponding check instructions `chk.s'. The default is 15063 'disable'. 15064 15065`-msched-br-in-data-spec' 15066`-mno-sched-br-in-data-spec' 15067 (En/Dis)able speculative scheduling of the instructions that are 15068 dependent on the data speculative loads before reload. This is 15069 effective only with `-msched-br-data-spec' enabled. The default 15070 is 'enable'. 15071 15072`-msched-ar-in-data-spec' 15073`-mno-sched-ar-in-data-spec' 15074 (En/Dis)able speculative scheduling of the instructions that are 15075 dependent on the data speculative loads after reload. This is 15076 effective only with `-msched-ar-data-spec' enabled. The default 15077 is 'enable'. 15078 15079`-msched-in-control-spec' 15080`-mno-sched-in-control-spec' 15081 (En/Dis)able speculative scheduling of the instructions that are 15082 dependent on the control speculative loads. This is effective 15083 only with `-msched-control-spec' enabled. The default is 'enable'. 15084 15085`-mno-sched-prefer-non-data-spec-insns' 15086`-msched-prefer-non-data-spec-insns' 15087 If enabled, data-speculative instructions are chosen for schedule 15088 only if there are no other choices at the moment. This makes the 15089 use of the data speculation much more conservative. The default 15090 is 'disable'. 15091 15092`-mno-sched-prefer-non-control-spec-insns' 15093`-msched-prefer-non-control-spec-insns' 15094 If enabled, control-speculative instructions are chosen for 15095 schedule only if there are no other choices at the moment. This 15096 makes the use of the control speculation much more conservative. 15097 The default is 'disable'. 15098 15099`-mno-sched-count-spec-in-critical-path' 15100`-msched-count-spec-in-critical-path' 15101 If enabled, speculative dependencies are considered during 15102 computation of the instructions priorities. This makes the use of 15103 the speculation a bit more conservative. The default is 'disable'. 15104 15105`-msched-spec-ldc' 15106 Use a simple data speculation check. This option is on by default. 15107 15108`-msched-control-spec-ldc' 15109 Use a simple check for control speculation. This option is on by 15110 default. 15111 15112`-msched-stop-bits-after-every-cycle' 15113 Place a stop bit after every cycle when scheduling. This option 15114 is on by default. 15115 15116`-msched-fp-mem-deps-zero-cost' 15117 Assume that floating-point stores and loads are not likely to 15118 cause a conflict when placed into the same instruction group. 15119 This option is disabled by default. 15120 15121`-msel-sched-dont-check-control-spec' 15122 Generate checks for control speculation in selective scheduling. 15123 This flag is disabled by default. 15124 15125`-msched-max-memory-insns=MAX-INSNS' 15126 Limit on the number of memory insns per instruction group, giving 15127 lower priority to subsequent memory insns attempting to schedule 15128 in the same instruction group. Frequently useful to prevent cache 15129 bank conflicts. The default value is 1. 15130 15131`-msched-max-memory-insns-hard-limit' 15132 Makes the limit specified by `msched-max-memory-insns' a hard 15133 limit, disallowing more than that number in an instruction group. 15134 Otherwise, the limit is "soft", meaning that non-memory operations 15135 are preferred when the limit is reached, but memory operations may 15136 still be scheduled. 15137 15138 15139 15140File: gcc.info, Node: LM32 Options, Next: M32C Options, Prev: IA-64 Options, Up: Submodel Options 15141 151423.17.18 LM32 Options 15143-------------------- 15144 15145These `-m' options are defined for the LatticeMico32 architecture: 15146 15147`-mbarrel-shift-enabled' 15148 Enable barrel-shift instructions. 15149 15150`-mdivide-enabled' 15151 Enable divide and modulus instructions. 15152 15153`-mmultiply-enabled' 15154 Enable multiply instructions. 15155 15156`-msign-extend-enabled' 15157 Enable sign extend instructions. 15158 15159`-muser-enabled' 15160 Enable user-defined instructions. 15161 15162 15163 15164File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: LM32 Options, Up: Submodel Options 15165 151663.17.19 M32C Options 15167-------------------- 15168 15169`-mcpu=NAME' 15170 Select the CPU for which code is generated. NAME may be one of 15171 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60) 15172 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80 15173 series. 15174 15175`-msim' 15176 Specifies that the program will be run on the simulator. This 15177 causes an alternate runtime library to be linked in which 15178 supports, for example, file I/O. You must not use this option 15179 when generating programs that will run on real hardware; you must 15180 provide your own runtime library for whatever I/O functions are 15181 needed. 15182 15183`-memregs=NUMBER' 15184 Specifies the number of memory-based pseudo-registers GCC uses 15185 during code generation. These pseudo-registers are used like real 15186 registers, so there is a tradeoff between GCC's ability to fit the 15187 code into available registers, and the performance penalty of using 15188 memory instead of registers. Note that all modules in a program 15189 must be compiled with the same value for this option. Because of 15190 that, you must not use this option with GCC's default runtime 15191 libraries. 15192 15193 15194 15195File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 15196 151973.17.20 M32R/D Options 15198---------------------- 15199 15200These `-m' options are defined for Renesas M32R/D architectures: 15201 15202`-m32r2' 15203 Generate code for the M32R/2. 15204 15205`-m32rx' 15206 Generate code for the M32R/X. 15207 15208`-m32r' 15209 Generate code for the M32R. This is the default. 15210 15211`-mmodel=small' 15212 Assume all objects live in the lower 16MB of memory (so that their 15213 addresses can be loaded with the `ld24' instruction), and assume 15214 all subroutines are reachable with the `bl' instruction. This is 15215 the default. 15216 15217 The addressability of a particular object can be set with the 15218 `model' attribute. 15219 15220`-mmodel=medium' 15221 Assume objects may be anywhere in the 32-bit address space (the 15222 compiler generates `seth/add3' instructions to load their 15223 addresses), and assume all subroutines are reachable with the `bl' 15224 instruction. 15225 15226`-mmodel=large' 15227 Assume objects may be anywhere in the 32-bit address space (the 15228 compiler generates `seth/add3' instructions to load their 15229 addresses), and assume subroutines may not be reachable with the 15230 `bl' instruction (the compiler generates the much slower 15231 `seth/add3/jl' instruction sequence). 15232 15233`-msdata=none' 15234 Disable use of the small data area. Variables are put into one of 15235 `.data', `.bss', or `.rodata' (unless the `section' attribute has 15236 been specified). This is the default. 15237 15238 The small data area consists of sections `.sdata' and `.sbss'. 15239 Objects may be explicitly put in the small data area with the 15240 `section' attribute using one of these sections. 15241 15242`-msdata=sdata' 15243 Put small global and static data in the small data area, but do not 15244 generate special code to reference them. 15245 15246`-msdata=use' 15247 Put small global and static data in the small data area, and 15248 generate special instructions to reference them. 15249 15250`-G NUM' 15251 Put global and static objects less than or equal to NUM bytes into 15252 the small data or BSS sections instead of the normal data or BSS 15253 sections. The default value of NUM is 8. The `-msdata' option 15254 must be set to one of `sdata' or `use' for this option to have any 15255 effect. 15256 15257 All modules should be compiled with the same `-G NUM' value. 15258 Compiling with different values of NUM may or may not work; if it 15259 doesn't the linker gives an error message--incorrect code is not 15260 generated. 15261 15262`-mdebug' 15263 Makes the M32R-specific code in the compiler display some 15264 statistics that might help in debugging programs. 15265 15266`-malign-loops' 15267 Align all loops to a 32-byte boundary. 15268 15269`-mno-align-loops' 15270 Do not enforce a 32-byte alignment for loops. This is the default. 15271 15272`-missue-rate=NUMBER' 15273 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 15274 15275`-mbranch-cost=NUMBER' 15276 NUMBER can only be 1 or 2. If it is 1 then branches are preferred 15277 over conditional code, if it is 2, then the opposite applies. 15278 15279`-mflush-trap=NUMBER' 15280 Specifies the trap number to use to flush the cache. The default 15281 is 12. Valid numbers are between 0 and 15 inclusive. 15282 15283`-mno-flush-trap' 15284 Specifies that the cache cannot be flushed by using a trap. 15285 15286`-mflush-func=NAME' 15287 Specifies the name of the operating system function to call to 15288 flush the cache. The default is `_flush_cache', but a function 15289 call is only used if a trap is not available. 15290 15291`-mno-flush-func' 15292 Indicates that there is no OS function for flushing the cache. 15293 15294 15295 15296File: gcc.info, Node: M680x0 Options, Next: MCore Options, Prev: M32R/D Options, Up: Submodel Options 15297 152983.17.21 M680x0 Options 15299---------------------- 15300 15301These are the `-m' options defined for M680x0 and ColdFire processors. 15302The default settings depend on which architecture was selected when the 15303compiler was configured; the defaults for the most common choices are 15304given below. 15305 15306`-march=ARCH' 15307 Generate code for a specific M680x0 or ColdFire instruction set 15308 architecture. Permissible values of ARCH for M680x0 architectures 15309 are: `68000', `68010', `68020', `68030', `68040', `68060' and 15310 `cpu32'. ColdFire architectures are selected according to 15311 Freescale's ISA classification and the permissible values are: 15312 `isaa', `isaaplus', `isab' and `isac'. 15313 15314 GCC defines a macro `__mcfARCH__' whenever it is generating code 15315 for a ColdFire target. The ARCH in this macro is one of the 15316 `-march' arguments given above. 15317 15318 When used together, `-march' and `-mtune' select code that runs on 15319 a family of similar processors but that is optimized for a 15320 particular microarchitecture. 15321 15322`-mcpu=CPU' 15323 Generate code for a specific M680x0 or ColdFire processor. The 15324 M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040', 15325 `68060', `68302', `68332' and `cpu32'. The ColdFire CPUs are 15326 given by the table below, which also classifies the CPUs into 15327 families: 15328 15329 *Family* *`-mcpu' arguments* 15330 `51' `51' `51ac' `51ag' `51cn' `51em' `51je' `51jf' `51jg' 15331 `51jm' `51mm' `51qe' `51qm' 15332 `5206' `5202' `5204' `5206' 15333 `5206e' `5206e' 15334 `5208' `5207' `5208' 15335 `5211a' `5210a' `5211a' 15336 `5213' `5211' `5212' `5213' 15337 `5216' `5214' `5216' 15338 `52235' `52230' `52231' `52232' `52233' `52234' `52235' 15339 `5225' `5224' `5225' 15340 `52259' `52252' `52254' `52255' `52256' `52258' `52259' 15341 `5235' `5232' `5233' `5234' `5235' `523x' 15342 `5249' `5249' 15343 `5250' `5250' 15344 `5271' `5270' `5271' 15345 `5272' `5272' 15346 `5275' `5274' `5275' 15347 `5282' `5280' `5281' `5282' `528x' 15348 `53017' `53011' `53012' `53013' `53014' `53015' `53016' 15349 `53017' 15350 `5307' `5307' 15351 `5329' `5327' `5328' `5329' `532x' 15352 `5373' `5372' `5373' `537x' 15353 `5407' `5407' 15354 `5475' `5470' `5471' `5472' `5473' `5474' `5475' `547x' 15355 `5480' `5481' `5482' `5483' `5484' `5485' 15356 15357 `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with 15358 CPU. Other combinations of `-mcpu' and `-march' are rejected. 15359 15360 GCC defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is 15361 selected. It also defines `__mcf_family_FAMILY', where the value 15362 of FAMILY is given by the table above. 15363 15364`-mtune=TUNE' 15365 Tune the code for a particular microarchitecture within the 15366 constraints set by `-march' and `-mcpu'. The M680x0 15367 microarchitectures are: `68000', `68010', `68020', `68030', 15368 `68040', `68060' and `cpu32'. The ColdFire microarchitectures 15369 are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'. 15370 15371 You can also use `-mtune=68020-40' for code that needs to run 15372 relatively well on 68020, 68030 and 68040 targets. 15373 `-mtune=68020-60' is similar but includes 68060 targets as well. 15374 These two options select the same tuning decisions as `-m68020-40' 15375 and `-m68020-60' respectively. 15376 15377 GCC defines the macros `__mcARCH' and `__mcARCH__' when tuning for 15378 680x0 architecture ARCH. It also defines `mcARCH' unless either 15379 `-ansi' or a non-GNU `-std' option is used. If GCC is tuning for 15380 a range of architectures, as selected by `-mtune=68020-40' or 15381 `-mtune=68020-60', it defines the macros for every architecture in 15382 the range. 15383 15384 GCC also defines the macro `__mUARCH__' when tuning for ColdFire 15385 microarchitecture UARCH, where UARCH is one of the arguments given 15386 above. 15387 15388`-m68000' 15389`-mc68000' 15390 Generate output for a 68000. This is the default when the 15391 compiler is configured for 68000-based systems. It is equivalent 15392 to `-march=68000'. 15393 15394 Use this option for microcontrollers with a 68000 or EC000 core, 15395 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 15396 15397`-m68010' 15398 Generate output for a 68010. This is the default when the 15399 compiler is configured for 68010-based systems. It is equivalent 15400 to `-march=68010'. 15401 15402`-m68020' 15403`-mc68020' 15404 Generate output for a 68020. This is the default when the 15405 compiler is configured for 68020-based systems. It is equivalent 15406 to `-march=68020'. 15407 15408`-m68030' 15409 Generate output for a 68030. This is the default when the 15410 compiler is configured for 68030-based systems. It is equivalent 15411 to `-march=68030'. 15412 15413`-m68040' 15414 Generate output for a 68040. This is the default when the 15415 compiler is configured for 68040-based systems. It is equivalent 15416 to `-march=68040'. 15417 15418 This option inhibits the use of 68881/68882 instructions that have 15419 to be emulated by software on the 68040. Use this option if your 15420 68040 does not have code to emulate those instructions. 15421 15422`-m68060' 15423 Generate output for a 68060. This is the default when the 15424 compiler is configured for 68060-based systems. It is equivalent 15425 to `-march=68060'. 15426 15427 This option inhibits the use of 68020 and 68881/68882 instructions 15428 that have to be emulated by software on the 68060. Use this 15429 option if your 68060 does not have code to emulate those 15430 instructions. 15431 15432`-mcpu32' 15433 Generate output for a CPU32. This is the default when the 15434 compiler is configured for CPU32-based systems. It is equivalent 15435 to `-march=cpu32'. 15436 15437 Use this option for microcontrollers with a CPU32 or CPU32+ core, 15438 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 15439 68341, 68349 and 68360. 15440 15441`-m5200' 15442 Generate output for a 520X ColdFire CPU. This is the default when 15443 the compiler is configured for 520X-based systems. It is 15444 equivalent to `-mcpu=5206', and is now deprecated in favor of that 15445 option. 15446 15447 Use this option for microcontroller with a 5200 core, including 15448 the MCF5202, MCF5203, MCF5204 and MCF5206. 15449 15450`-m5206e' 15451 Generate output for a 5206e ColdFire CPU. The option is now 15452 deprecated in favor of the equivalent `-mcpu=5206e'. 15453 15454`-m528x' 15455 Generate output for a member of the ColdFire 528X family. The 15456 option is now deprecated in favor of the equivalent `-mcpu=528x'. 15457 15458`-m5307' 15459 Generate output for a ColdFire 5307 CPU. The option is now 15460 deprecated in favor of the equivalent `-mcpu=5307'. 15461 15462`-m5407' 15463 Generate output for a ColdFire 5407 CPU. The option is now 15464 deprecated in favor of the equivalent `-mcpu=5407'. 15465 15466`-mcfv4e' 15467 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x). 15468 This includes use of hardware floating-point instructions. The 15469 option is equivalent to `-mcpu=547x', and is now deprecated in 15470 favor of that option. 15471 15472`-m68020-40' 15473 Generate output for a 68040, without using any of the new 15474 instructions. This results in code that can run relatively 15475 efficiently on either a 68020/68881 or a 68030 or a 68040. The 15476 generated code does use the 68881 instructions that are emulated 15477 on the 68040. 15478 15479 The option is equivalent to `-march=68020' `-mtune=68020-40'. 15480 15481`-m68020-60' 15482 Generate output for a 68060, without using any of the new 15483 instructions. This results in code that can run relatively 15484 efficiently on either a 68020/68881 or a 68030 or a 68040. The 15485 generated code does use the 68881 instructions that are emulated 15486 on the 68060. 15487 15488 The option is equivalent to `-march=68020' `-mtune=68020-60'. 15489 15490`-mhard-float' 15491`-m68881' 15492 Generate floating-point instructions. This is the default for 15493 68020 and above, and for ColdFire devices that have an FPU. It 15494 defines the macro `__HAVE_68881__' on M680x0 targets and 15495 `__mcffpu__' on ColdFire targets. 15496 15497`-msoft-float' 15498 Do not generate floating-point instructions; use library calls 15499 instead. This is the default for 68000, 68010, and 68832 targets. 15500 It is also the default for ColdFire devices that have no FPU. 15501 15502`-mdiv' 15503`-mno-div' 15504 Generate (do not generate) ColdFire hardware divide and remainder 15505 instructions. If `-march' is used without `-mcpu', the default is 15506 "on" for ColdFire architectures and "off" for M680x0 15507 architectures. Otherwise, the default is taken from the target CPU 15508 (either the default CPU, or the one specified by `-mcpu'). For 15509 example, the default is "off" for `-mcpu=5206' and "on" for 15510 `-mcpu=5206e'. 15511 15512 GCC defines the macro `__mcfhwdiv__' when this option is enabled. 15513 15514`-mshort' 15515 Consider type `int' to be 16 bits wide, like `short int'. 15516 Additionally, parameters passed on the stack are also aligned to a 15517 16-bit boundary even on targets whose API mandates promotion to 15518 32-bit. 15519 15520`-mno-short' 15521 Do not consider type `int' to be 16 bits wide. This is the 15522 default. 15523 15524`-mnobitfield' 15525`-mno-bitfield' 15526 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 15527 and `-m5200' options imply `-mnobitfield'. 15528 15529`-mbitfield' 15530 Do use the bit-field instructions. The `-m68020' option implies 15531 `-mbitfield'. This is the default if you use a configuration 15532 designed for a 68020. 15533 15534`-mrtd' 15535 Use a different function-calling convention, in which functions 15536 that take a fixed number of arguments return with the `rtd' 15537 instruction, which pops their arguments while returning. This 15538 saves one instruction in the caller since there is no need to pop 15539 the arguments there. 15540 15541 This calling convention is incompatible with the one normally used 15542 on Unix, so you cannot use it if you need to call libraries 15543 compiled with the Unix compiler. 15544 15545 Also, you must provide function prototypes for all functions that 15546 take variable numbers of arguments (including `printf'); otherwise 15547 incorrect code is generated for calls to those functions. 15548 15549 In addition, seriously incorrect code results if you call a 15550 function with too many arguments. (Normally, extra arguments are 15551 harmlessly ignored.) 15552 15553 The `rtd' instruction is supported by the 68010, 68020, 68030, 15554 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 15555 15556`-mno-rtd' 15557 Do not use the calling conventions selected by `-mrtd'. This is 15558 the default. 15559 15560`-malign-int' 15561`-mno-align-int' 15562 Control whether GCC aligns `int', `long', `long long', `float', 15563 `double', and `long double' variables on a 32-bit boundary 15564 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 15565 variables on 32-bit boundaries produces code that runs somewhat 15566 faster on processors with 32-bit busses at the expense of more 15567 memory. 15568 15569 *Warning:* if you use the `-malign-int' switch, GCC aligns 15570 structures containing the above types differently than most 15571 published application binary interface specifications for the m68k. 15572 15573`-mpcrel' 15574 Use the pc-relative addressing mode of the 68000 directly, instead 15575 of using a global offset table. At present, this option implies 15576 `-fpic', allowing at most a 16-bit offset for pc-relative 15577 addressing. `-fPIC' is not presently supported with `-mpcrel', 15578 though this could be supported for 68020 and higher processors. 15579 15580`-mno-strict-align' 15581`-mstrict-align' 15582 Do not (do) assume that unaligned memory references are handled by 15583 the system. 15584 15585`-msep-data' 15586 Generate code that allows the data segment to be located in a 15587 different area of memory from the text segment. This allows for 15588 execute-in-place in an environment without virtual memory 15589 management. This option implies `-fPIC'. 15590 15591`-mno-sep-data' 15592 Generate code that assumes that the data segment follows the text 15593 segment. This is the default. 15594 15595`-mid-shared-library' 15596 Generate code that supports shared libraries via the library ID 15597 method. This allows for execute-in-place and shared libraries in 15598 an environment without virtual memory management. This option 15599 implies `-fPIC'. 15600 15601`-mno-id-shared-library' 15602 Generate code that doesn't assume ID-based shared libraries are 15603 being used. This is the default. 15604 15605`-mshared-library-id=n' 15606 Specifies the identification number of the ID-based shared library 15607 being compiled. Specifying a value of 0 generates more compact 15608 code; specifying other values forces the allocation of that number 15609 to the current library, but is no more space- or time-efficient 15610 than omitting this option. 15611 15612`-mxgot' 15613`-mno-xgot' 15614 When generating position-independent code for ColdFire, generate 15615 code that works if the GOT has more than 8192 entries. This code 15616 is larger and slower than code generated without this option. On 15617 M680x0 processors, this option is not needed; `-fPIC' suffices. 15618 15619 GCC normally uses a single instruction to load values from the GOT. 15620 While this is relatively efficient, it only works if the GOT is 15621 smaller than about 64k. Anything larger causes the linker to 15622 report an error such as: 15623 15624 relocation truncated to fit: R_68K_GOT16O foobar 15625 15626 If this happens, you should recompile your code with `-mxgot'. It 15627 should then work with very large GOTs. However, code generated 15628 with `-mxgot' is less efficient, since it takes 4 instructions to 15629 fetch the value of a global symbol. 15630 15631 Note that some linkers, including newer versions of the GNU linker, 15632 can create multiple GOTs and sort GOT entries. If you have such a 15633 linker, you should only need to use `-mxgot' when compiling a 15634 single object file that accesses more than 8192 GOT entries. Very 15635 few do. 15636 15637 These options have no effect unless GCC is generating 15638 position-independent code. 15639 15640 15641 15642File: gcc.info, Node: MCore Options, Next: MeP Options, Prev: M680x0 Options, Up: Submodel Options 15643 156443.17.22 MCore Options 15645--------------------- 15646 15647These are the `-m' options defined for the Motorola M*Core processors. 15648 15649`-mhardlit' 15650`-mno-hardlit' 15651 Inline constants into the code stream if it can be done in two 15652 instructions or less. 15653 15654`-mdiv' 15655`-mno-div' 15656 Use the divide instruction. (Enabled by default). 15657 15658`-mrelax-immediate' 15659`-mno-relax-immediate' 15660 Allow arbitrary-sized immediates in bit operations. 15661 15662`-mwide-bitfields' 15663`-mno-wide-bitfields' 15664 Always treat bit-fields as `int'-sized. 15665 15666`-m4byte-functions' 15667`-mno-4byte-functions' 15668 Force all functions to be aligned to a 4-byte boundary. 15669 15670`-mcallgraph-data' 15671`-mno-callgraph-data' 15672 Emit callgraph information. 15673 15674`-mslow-bytes' 15675`-mno-slow-bytes' 15676 Prefer word access when reading byte quantities. 15677 15678`-mlittle-endian' 15679`-mbig-endian' 15680 Generate code for a little-endian target. 15681 15682`-m210' 15683`-m340' 15684 Generate code for the 210 processor. 15685 15686`-mno-lsim' 15687 Assume that runtime support has been provided and so omit the 15688 simulator library (`libsim.a)' from the linker command line. 15689 15690`-mstack-increment=SIZE' 15691 Set the maximum amount for a single stack increment operation. 15692 Large values can increase the speed of programs that contain 15693 functions that need a large amount of stack space, but they can 15694 also trigger a segmentation fault if the stack is extended too 15695 much. The default value is 0x1000. 15696 15697 15698 15699File: gcc.info, Node: MeP Options, Next: MicroBlaze Options, Prev: MCore Options, Up: Submodel Options 15700 157013.17.23 MeP Options 15702------------------- 15703 15704`-mabsdiff' 15705 Enables the `abs' instruction, which is the absolute difference 15706 between two registers. 15707 15708`-mall-opts' 15709 Enables all the optional instructions--average, multiply, divide, 15710 bit operations, leading zero, absolute difference, min/max, clip, 15711 and saturation. 15712 15713`-maverage' 15714 Enables the `ave' instruction, which computes the average of two 15715 registers. 15716 15717`-mbased=N' 15718 Variables of size N bytes or smaller are placed in the `.based' 15719 section by default. Based variables use the `$tp' register as a 15720 base register, and there is a 128-byte limit to the `.based' 15721 section. 15722 15723`-mbitops' 15724 Enables the bit operation instructions--bit test (`btstm'), set 15725 (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set 15726 (`tas'). 15727 15728`-mc=NAME' 15729 Selects which section constant data is placed in. NAME may be 15730 `tiny', `near', or `far'. 15731 15732`-mclip' 15733 Enables the `clip' instruction. Note that `-mclip' is not useful 15734 unless you also provide `-mminmax'. 15735 15736`-mconfig=NAME' 15737 Selects one of the built-in core configurations. Each MeP chip has 15738 one or more modules in it; each module has a core CPU and a 15739 variety of coprocessors, optional instructions, and peripherals. 15740 The `MeP-Integrator' tool, not part of GCC, provides these 15741 configurations through this option; using this option is the same 15742 as using all the corresponding command-line options. The default 15743 configuration is `default'. 15744 15745`-mcop' 15746 Enables the coprocessor instructions. By default, this is a 32-bit 15747 coprocessor. Note that the coprocessor is normally enabled via the 15748 `-mconfig=' option. 15749 15750`-mcop32' 15751 Enables the 32-bit coprocessor's instructions. 15752 15753`-mcop64' 15754 Enables the 64-bit coprocessor's instructions. 15755 15756`-mivc2' 15757 Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor. 15758 15759`-mdc' 15760 Causes constant variables to be placed in the `.near' section. 15761 15762`-mdiv' 15763 Enables the `div' and `divu' instructions. 15764 15765`-meb' 15766 Generate big-endian code. 15767 15768`-mel' 15769 Generate little-endian code. 15770 15771`-mio-volatile' 15772 Tells the compiler that any variable marked with the `io' 15773 attribute is to be considered volatile. 15774 15775`-ml' 15776 Causes variables to be assigned to the `.far' section by default. 15777 15778`-mleadz' 15779 Enables the `leadz' (leading zero) instruction. 15780 15781`-mm' 15782 Causes variables to be assigned to the `.near' section by default. 15783 15784`-mminmax' 15785 Enables the `min' and `max' instructions. 15786 15787`-mmult' 15788 Enables the multiplication and multiply-accumulate instructions. 15789 15790`-mno-opts' 15791 Disables all the optional instructions enabled by `-mall-opts'. 15792 15793`-mrepeat' 15794 Enables the `repeat' and `erepeat' instructions, used for 15795 low-overhead looping. 15796 15797`-ms' 15798 Causes all variables to default to the `.tiny' section. Note that 15799 there is a 65536-byte limit to this section. Accesses to these 15800 variables use the `%gp' base register. 15801 15802`-msatur' 15803 Enables the saturation instructions. Note that the compiler does 15804 not currently generate these itself, but this option is included 15805 for compatibility with other tools, like `as'. 15806 15807`-msdram' 15808 Link the SDRAM-based runtime instead of the default ROM-based 15809 runtime. 15810 15811`-msim' 15812 Link the simulator run-time libraries. 15813 15814`-msimnovec' 15815 Link the simulator runtime libraries, excluding built-in support 15816 for reset and exception vectors and tables. 15817 15818`-mtf' 15819 Causes all functions to default to the `.far' section. Without 15820 this option, functions default to the `.near' section. 15821 15822`-mtiny=N' 15823 Variables that are N bytes or smaller are allocated to the `.tiny' 15824 section. These variables use the `$gp' base register. The 15825 default for this option is 4, but note that there's a 65536-byte 15826 limit to the `.tiny' section. 15827 15828 15829 15830File: gcc.info, Node: MicroBlaze Options, Next: MIPS Options, Prev: MeP Options, Up: Submodel Options 15831 158323.17.24 MicroBlaze Options 15833-------------------------- 15834 15835`-msoft-float' 15836 Use software emulation for floating point (default). 15837 15838`-mhard-float' 15839 Use hardware floating-point instructions. 15840 15841`-mmemcpy' 15842 Do not optimize block moves, use `memcpy'. 15843 15844`-mno-clearbss' 15845 This option is deprecated. Use `-fno-zero-initialized-in-bss' 15846 instead. 15847 15848`-mcpu=CPU-TYPE' 15849 Use features of, and schedule code for, the given CPU. Supported 15850 values are in the format `vX.YY.Z', where X is a major version, YY 15851 is the minor version, and Z is compatibility code. Example values 15852 are `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b', 15853 `v6.00.a'. 15854 15855`-mxl-soft-mul' 15856 Use software multiply emulation (default). 15857 15858`-mxl-soft-div' 15859 Use software emulation for divides (default). 15860 15861`-mxl-barrel-shift' 15862 Use the hardware barrel shifter. 15863 15864`-mxl-pattern-compare' 15865 Use pattern compare instructions. 15866 15867`-msmall-divides' 15868 Use table lookup optimization for small signed integer divisions. 15869 15870`-mxl-stack-check' 15871 This option is deprecated. Use `-fstack-check' instead. 15872 15873`-mxl-gp-opt' 15874 Use GP-relative `.sdata'/`.sbss' sections. 15875 15876`-mxl-multiply-high' 15877 Use multiply high instructions for high part of 32x32 multiply. 15878 15879`-mxl-float-convert' 15880 Use hardware floating-point conversion instructions. 15881 15882`-mxl-float-sqrt' 15883 Use hardware floating-point square root instruction. 15884 15885`-mbig-endian' 15886 Generate code for a big-endian target. 15887 15888`-mlittle-endian' 15889 Generate code for a little-endian target. 15890 15891`-mxl-reorder' 15892 Use reorder instructions (swap and byte reversed load/store). 15893 15894`-mxl-mode-APP-MODEL' 15895 Select application model APP-MODEL. Valid models are 15896 `executable' 15897 normal executable (default), uses startup code `crt0.o'. 15898 15899 `xmdstub' 15900 for use with Xilinx Microprocessor Debugger (XMD) based 15901 software intrusive debug agent called xmdstub. This uses 15902 startup file `crt1.o' and sets the start address of the 15903 program to 0x800. 15904 15905 `bootstrap' 15906 for applications that are loaded using a bootloader. This 15907 model uses startup file `crt2.o' which does not contain a 15908 processor reset vector handler. This is suitable for 15909 transferring control on a processor reset to the bootloader 15910 rather than the application. 15911 15912 `novectors' 15913 for applications that do not require any of the MicroBlaze 15914 vectors. This option may be useful for applications running 15915 within a monitoring application. This model uses `crt3.o' as 15916 a startup file. 15917 15918 Option `-xl-mode-APP-MODEL' is a deprecated alias for 15919 `-mxl-mode-APP-MODEL'. 15920 15921 15922 15923File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MicroBlaze Options, Up: Submodel Options 15924 159253.17.25 MIPS Options 15926-------------------- 15927 15928`-EB' 15929 Generate big-endian code. 15930 15931`-EL' 15932 Generate little-endian code. This is the default for `mips*el-*-*' 15933 configurations. 15934 15935`-march=ARCH' 15936 Generate code that runs on ARCH, which can be the name of a 15937 generic MIPS ISA, or the name of a particular processor. The ISA 15938 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 15939 `mips32r2', `mips32r3', `mips32r5', `mips32r6', `mips64', 15940 `mips64r2', `mips64r3', `mips64r5' and `mips64r6'. The processor 15941 names are: `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', 15942 `4ksd', `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', 15943 `24kec', `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', 15944 `34kn', `74kc', `74kf2_1', `74kf1_1', `74kf3_2', `1004kc', 15945 `1004kf2_1', `1004kf1_1', `loongson2e', `loongson2f', `loongson3a', 15946 `m4k', `m14k', `m14kc', `m14ke', `m14kec', `octeon', `octeon+', 15947 `octeon2', `octeon3', `orion', `p5600', `r2000', `r3000', `r3900', 15948 `r4000', `r4400', `r4600', `r4650', `r4700', `r6000', `r8000', 15949 `rm7000', `rm9000', `r10000', `r12000', `r14000', `r16000', `sb1', 15950 `sr71000', `vr4100', `vr4111', `vr4120', `vr4130', `vr4300', 15951 `vr5000', `vr5400', `vr5500', `xlr' and `xlp'. The special value 15952 `from-abi' selects the most compatible architecture for the 15953 selected ABI (that is, `mips1' for 32-bit ABIs and `mips3' for 15954 64-bit ABIs). 15955 15956 The native Linux/GNU toolchain also supports the value `native', 15957 which selects the best architecture option for the host processor. 15958 `-march=native' has no effect if GCC does not recognize the 15959 processor. 15960 15961 In processor names, a final `000' can be abbreviated as `k' (for 15962 example, `-march=r2k'). Prefixes are optional, and `vr' may be 15963 written `r'. 15964 15965 Names of the form `Nf2_1' refer to processors with FPUs clocked at 15966 half the rate of the core, names of the form `Nf1_1' refer to 15967 processors with FPUs clocked at the same rate as the core, and 15968 names of the form `Nf3_2' refer to processors with FPUs clocked a 15969 ratio of 3:2 with respect to the core. For compatibility reasons, 15970 `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are 15971 accepted as synonyms for `Nf1_1'. 15972 15973 GCC defines two macros based on the value of this option. The 15974 first is `_MIPS_ARCH', which gives the name of target 15975 architecture, as a string. The second has the form 15976 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 15977 `_MIPS_ARCH'. For example, `-march=r2000' sets `_MIPS_ARCH' to 15978 `"r2000"' and defines the macro `_MIPS_ARCH_R2000'. 15979 15980 Note that the `_MIPS_ARCH' macro uses the processor names given 15981 above. In other words, it has the full prefix and does not 15982 abbreviate `000' as `k'. In the case of `from-abi', the macro 15983 names the resolved architecture (either `"mips1"' or `"mips3"'). 15984 It names the default architecture when no `-march' option is given. 15985 15986`-mtune=ARCH' 15987 Optimize for ARCH. Among other things, this option controls the 15988 way instructions are scheduled, and the perceived cost of 15989 arithmetic operations. The list of ARCH values is the same as for 15990 `-march'. 15991 15992 When this option is not used, GCC optimizes for the processor 15993 specified by `-march'. By using `-march' and `-mtune' together, 15994 it is possible to generate code that runs on a family of 15995 processors, but optimize the code for one particular member of 15996 that family. 15997 15998 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 15999 which work in the same way as the `-march' ones described above. 16000 16001`-mips1' 16002 Equivalent to `-march=mips1'. 16003 16004`-mips2' 16005 Equivalent to `-march=mips2'. 16006 16007`-mips3' 16008 Equivalent to `-march=mips3'. 16009 16010`-mips4' 16011 Equivalent to `-march=mips4'. 16012 16013`-mips32' 16014 Equivalent to `-march=mips32'. 16015 16016`-mips32r3' 16017 Equivalent to `-march=mips32r3'. 16018 16019`-mips32r5' 16020 Equivalent to `-march=mips32r5'. 16021 16022`-mips32r6' 16023 Equivalent to `-march=mips32r6'. 16024 16025`-mips64' 16026 Equivalent to `-march=mips64'. 16027 16028`-mips64r2' 16029 Equivalent to `-march=mips64r2'. 16030 16031`-mips64r3' 16032 Equivalent to `-march=mips64r3'. 16033 16034`-mips64r5' 16035 Equivalent to `-march=mips64r5'. 16036 16037`-mips64r6' 16038 Equivalent to `-march=mips64r6'. 16039 16040`-mips16' 16041`-mno-mips16' 16042 Generate (do not generate) MIPS16 code. If GCC is targeting a 16043 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE. 16044 16045 MIPS16 code generation can also be controlled on a per-function 16046 basis by means of `mips16' and `nomips16' attributes. *Note 16047 Function Attributes::, for more information. 16048 16049`-mflip-mips16' 16050 Generate MIPS16 code on alternating functions. This option is 16051 provided for regression testing of mixed MIPS16/non-MIPS16 code 16052 generation, and is not intended for ordinary use in compiling user 16053 code. 16054 16055`-minterlink-compressed' 16056 16057`-mno-interlink-compressed' 16058 Require (do not require) that code using the standard 16059 (uncompressed) MIPS ISA be link-compatible with MIPS16 and 16060 microMIPS code, and vice versa. 16061 16062 For example, code using the standard ISA encoding cannot jump 16063 directly to MIPS16 or microMIPS code; it must either use a call or 16064 an indirect jump. `-minterlink-compressed' therefore disables 16065 direct jumps unless GCC knows that the target of the jump is not 16066 compressed. 16067 16068`-minterlink-mips16' 16069`-mno-interlink-mips16' 16070 Aliases of `-minterlink-compressed' and 16071 `-mno-interlink-compressed'. These options predate the microMIPS 16072 ASE and are retained for backwards compatibility. 16073 16074`-mabi=32' 16075`-mabi=o64' 16076`-mabi=n32' 16077`-mabi=64' 16078`-mabi=eabi' 16079 Generate code for the given ABI. 16080 16081 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 16082 generates 64-bit code when you select a 64-bit architecture, but 16083 you can use `-mgp32' to get 32-bit code instead. 16084 16085 For information about the O64 ABI, see 16086 `http://gcc.gnu.org/projects/mipso64-abi.html'. 16087 16088 GCC supports a variant of the o32 ABI in which floating-point 16089 registers are 64 rather than 32 bits wide. You can select this 16090 combination with `-mabi=32' `-mfp64'. This ABI relies on the 16091 `mthc1' and `mfhc1' instructions and is therefore only supported 16092 for MIPS32R2, MIPS32R3 and MIPS32R5 processors. 16093 16094 The register assignments for arguments and return values remain the 16095 same, but each scalar value is passed in a single 64-bit register 16096 rather than a pair of 32-bit registers. For example, scalar 16097 floating-point values are returned in `$f0' only, not a 16098 `$f0'/`$f1' pair. The set of call-saved registers also remains 16099 the same in that the even-numbered double-precision registers are 16100 saved. 16101 16102 Two additional variants of the o32 ABI are supported to enable a 16103 transition from 32-bit to 64-bit registers. These are FPXX 16104 (`-mfpxx') and FP64A (`-mfp64' `-mno-odd-spreg'). The FPXX 16105 extension mandates that all code must execute correctly when run 16106 using 32-bit or 64-bit registers. The code can be interlinked 16107 with either FP32 or FP64, but not both. The FP64A extension is 16108 similar to the FP64 extension but forbids the use of odd-numbered 16109 single-precision registers. This can be used in conjunction with 16110 the `FRE' mode of FPUs in MIPS32R5 processors and allows both FP32 16111 and FP64A code to interlink and run in the same process without 16112 changing FPU modes. 16113 16114`-mabicalls' 16115`-mno-abicalls' 16116 Generate (do not generate) code that is suitable for SVR4-style 16117 dynamic objects. `-mabicalls' is the default for SVR4-based 16118 systems. 16119 16120`-mshared' 16121`-mno-shared' 16122 Generate (do not generate) code that is fully position-independent, 16123 and that can therefore be linked into shared libraries. This 16124 option only affects `-mabicalls'. 16125 16126 All `-mabicalls' code has traditionally been position-independent, 16127 regardless of options like `-fPIC' and `-fpic'. However, as an 16128 extension, the GNU toolchain allows executables to use absolute 16129 accesses for locally-binding symbols. It can also use shorter GP 16130 initialization sequences and generate direct calls to 16131 locally-defined functions. This mode is selected by `-mno-shared'. 16132 16133 `-mno-shared' depends on binutils 2.16 or higher and generates 16134 objects that can only be linked by the GNU linker. However, the 16135 option does not affect the ABI of the final executable; it only 16136 affects the ABI of relocatable objects. Using `-mno-shared' 16137 generally makes executables both smaller and quicker. 16138 16139 `-mshared' is the default. 16140 16141`-mplt' 16142`-mno-plt' 16143 Assume (do not assume) that the static and dynamic linkers support 16144 PLTs and copy relocations. This option only affects `-mno-shared 16145 -mabicalls'. For the n64 ABI, this option has no effect without 16146 `-msym32'. 16147 16148 You can make `-mplt' the default by configuring GCC with 16149 `--with-mips-plt'. The default is `-mno-plt' otherwise. 16150 16151`-mxgot' 16152`-mno-xgot' 16153 Lift (do not lift) the usual restrictions on the size of the global 16154 offset table. 16155 16156 GCC normally uses a single instruction to load values from the GOT. 16157 While this is relatively efficient, it only works if the GOT is 16158 smaller than about 64k. Anything larger causes the linker to 16159 report an error such as: 16160 16161 relocation truncated to fit: R_MIPS_GOT16 foobar 16162 16163 If this happens, you should recompile your code with `-mxgot'. 16164 This works with very large GOTs, although the code is also less 16165 efficient, since it takes three instructions to fetch the value of 16166 a global symbol. 16167 16168 Note that some linkers can create multiple GOTs. If you have such 16169 a linker, you should only need to use `-mxgot' when a single object 16170 file accesses more than 64k's worth of GOT entries. Very few do. 16171 16172 These options have no effect unless GCC is generating position 16173 independent code. 16174 16175`-mgp32' 16176 Assume that general-purpose registers are 32 bits wide. 16177 16178`-mgp64' 16179 Assume that general-purpose registers are 64 bits wide. 16180 16181`-mfp32' 16182 Assume that floating-point registers are 32 bits wide. 16183 16184`-mfp64' 16185 Assume that floating-point registers are 64 bits wide. 16186 16187`-mfpxx' 16188 Do not assume the width of floating-point registers. 16189 16190`-mhard-float' 16191 Use floating-point coprocessor instructions. 16192 16193`-msoft-float' 16194 Do not use floating-point coprocessor instructions. Implement 16195 floating-point calculations using library calls instead. 16196 16197`-mno-float' 16198 Equivalent to `-msoft-float', but additionally asserts that the 16199 program being compiled does not perform any floating-point 16200 operations. This option is presently supported only by some 16201 bare-metal MIPS configurations, where it may select a special set 16202 of libraries that lack all floating-point support (including, for 16203 example, the floating-point `printf' formats). If code compiled 16204 with `-mno-float' accidentally contains floating-point operations, 16205 it is likely to suffer a link-time or run-time failure. 16206 16207`-msingle-float' 16208 Assume that the floating-point coprocessor only supports 16209 single-precision operations. 16210 16211`-mdouble-float' 16212 Assume that the floating-point coprocessor supports 16213 double-precision operations. This is the default. 16214 16215`-modd-spreg' 16216`-mno-odd-spreg' 16217 Enable the use of odd-numbered single-precision floating-point 16218 registers for the o32 ABI. This is the default for processors 16219 that are known to support these registers. When using the o32 16220 FPXX ABI, `-mno-odd-spreg' is set by default. 16221 16222`-mabs=2008' 16223`-mabs=legacy' 16224 These options control the treatment of the special not-a-number 16225 (NaN) IEEE 754 floating-point data with the `abs.fmt' and 16226 `neg.fmt' machine instructions. 16227 16228 By default or when `-mabs=legacy' is used the legacy treatment is 16229 selected. In this case these instructions are considered 16230 arithmetic and avoided where correct operation is required and the 16231 input operand might be a NaN. A longer sequence of instructions 16232 that manipulate the sign bit of floating-point datum manually is 16233 used instead unless the `-ffinite-math-only' option has also been 16234 specified. 16235 16236 The `-mabs=2008' option selects the IEEE 754-2008 treatment. In 16237 this case these instructions are considered non-arithmetic and 16238 therefore operating correctly in all cases, including in 16239 particular where the input operand is a NaN. These instructions 16240 are therefore always used for the respective operations. 16241 16242`-mnan=2008' 16243`-mnan=legacy' 16244 These options control the encoding of the special not-a-number 16245 (NaN) IEEE 754 floating-point data. 16246 16247 The `-mnan=legacy' option selects the legacy encoding. In this 16248 case quiet NaNs (qNaNs) are denoted by the first bit of their 16249 trailing significand field being 0, whereas signalling NaNs 16250 (sNaNs) are denoted by the first bit of their trailing significand 16251 field being 1. 16252 16253 The `-mnan=2008' option selects the IEEE 754-2008 encoding. In 16254 this case qNaNs are denoted by the first bit of their trailing 16255 significand field being 1, whereas sNaNs are denoted by the first 16256 bit of their trailing significand field being 0. 16257 16258 The default is `-mnan=legacy' unless GCC has been configured with 16259 `--with-nan=2008'. 16260 16261`-mllsc' 16262`-mno-llsc' 16263 Use (do not use) `ll', `sc', and `sync' instructions to implement 16264 atomic memory built-in functions. When neither option is 16265 specified, GCC uses the instructions if the target architecture 16266 supports them. 16267 16268 `-mllsc' is useful if the runtime environment can emulate the 16269 instructions and `-mno-llsc' can be useful when compiling for 16270 nonstandard ISAs. You can make either option the default by 16271 configuring GCC with `--with-llsc' and `--without-llsc' 16272 respectively. `--with-llsc' is the default for some 16273 configurations; see the installation documentation for details. 16274 16275`-mdsp' 16276`-mno-dsp' 16277 Use (do not use) revision 1 of the MIPS DSP ASE. *Note MIPS DSP 16278 Built-in Functions::. This option defines the preprocessor macro 16279 `__mips_dsp'. It also defines `__mips_dsp_rev' to 1. 16280 16281`-mdspr2' 16282`-mno-dspr2' 16283 Use (do not use) revision 2 of the MIPS DSP ASE. *Note MIPS DSP 16284 Built-in Functions::. This option defines the preprocessor macros 16285 `__mips_dsp' and `__mips_dspr2'. It also defines `__mips_dsp_rev' 16286 to 2. 16287 16288`-msmartmips' 16289`-mno-smartmips' 16290 Use (do not use) the MIPS SmartMIPS ASE. 16291 16292`-mpaired-single' 16293`-mno-paired-single' 16294 Use (do not use) paired-single floating-point instructions. *Note 16295 MIPS Paired-Single Support::. This option requires hardware 16296 floating-point support to be enabled. 16297 16298`-mdmx' 16299`-mno-mdmx' 16300 Use (do not use) MIPS Digital Media Extension instructions. This 16301 option can only be used when generating 64-bit code and requires 16302 hardware floating-point support to be enabled. 16303 16304`-mips3d' 16305`-mno-mips3d' 16306 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 16307 Functions::. The option `-mips3d' implies `-mpaired-single'. 16308 16309`-mmicromips' 16310`-mno-micromips' 16311 Generate (do not generate) microMIPS code. 16312 16313 MicroMIPS code generation can also be controlled on a per-function 16314 basis by means of `micromips' and `nomicromips' attributes. *Note 16315 Function Attributes::, for more information. 16316 16317`-mmt' 16318`-mno-mt' 16319 Use (do not use) MT Multithreading instructions. 16320 16321`-mmcu' 16322`-mno-mcu' 16323 Use (do not use) the MIPS MCU ASE instructions. 16324 16325`-meva' 16326`-mno-eva' 16327 Use (do not use) the MIPS Enhanced Virtual Addressing instructions. 16328 16329`-mvirt' 16330`-mno-virt' 16331 Use (do not use) the MIPS Virtualization Application Specific 16332 instructions. 16333 16334`-mxpa' 16335`-mno-xpa' 16336 Use (do not use) the MIPS eXtended Physical Address (XPA) 16337 instructions. 16338 16339`-mlong64' 16340 Force `long' types to be 64 bits wide. See `-mlong32' for an 16341 explanation of the default and the way that the pointer size is 16342 determined. 16343 16344`-mlong32' 16345 Force `long', `int', and pointer types to be 32 bits wide. 16346 16347 The default size of `int's, `long's and pointers depends on the 16348 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 16349 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 16350 `long's. Pointers are the same size as `long's, or the same size 16351 as integer registers, whichever is smaller. 16352 16353`-msym32' 16354`-mno-sym32' 16355 Assume (do not assume) that all symbols have 32-bit values, 16356 regardless of the selected ABI. This option is useful in 16357 combination with `-mabi=64' and `-mno-abicalls' because it allows 16358 GCC to generate shorter and faster references to symbolic 16359 addresses. 16360 16361`-G NUM' 16362 Put definitions of externally-visible data in a small data section 16363 if that data is no bigger than NUM bytes. GCC can then generate 16364 more efficient accesses to the data; see `-mgpopt' for details. 16365 16366 The default `-G' option depends on the configuration. 16367 16368`-mlocal-sdata' 16369`-mno-local-sdata' 16370 Extend (do not extend) the `-G' behavior to local data too, such 16371 as to static variables in C. `-mlocal-sdata' is the default for 16372 all configurations. 16373 16374 If the linker complains that an application is using too much 16375 small data, you might want to try rebuilding the less 16376 performance-critical parts with `-mno-local-sdata'. You might 16377 also want to build large libraries with `-mno-local-sdata', so 16378 that the libraries leave more room for the main program. 16379 16380`-mextern-sdata' 16381`-mno-extern-sdata' 16382 Assume (do not assume) that externally-defined data is in a small 16383 data section if the size of that data is within the `-G' limit. 16384 `-mextern-sdata' is the default for all configurations. 16385 16386 If you compile a module MOD with `-mextern-sdata' `-G NUM' 16387 `-mgpopt', and MOD references a variable VAR that is no bigger 16388 than NUM bytes, you must make sure that VAR is placed in a small 16389 data section. If VAR is defined by another module, you must 16390 either compile that module with a high-enough `-G' setting or 16391 attach a `section' attribute to VAR's definition. If VAR is 16392 common, you must link the application with a high-enough `-G' 16393 setting. 16394 16395 The easiest way of satisfying these restrictions is to compile and 16396 link every module with the same `-G' option. However, you may 16397 wish to build a library that supports several different small data 16398 limits. You can do this by compiling the library with the highest 16399 supported `-G' setting and additionally using `-mno-extern-sdata' 16400 to stop the library from making assumptions about 16401 externally-defined data. 16402 16403`-mgpopt' 16404`-mno-gpopt' 16405 Use (do not use) GP-relative accesses for symbols that are known 16406 to be in a small data section; see `-G', `-mlocal-sdata' and 16407 `-mextern-sdata'. `-mgpopt' is the default for all configurations. 16408 16409 `-mno-gpopt' is useful for cases where the `$gp' register might 16410 not hold the value of `_gp'. For example, if the code is part of 16411 a library that might be used in a boot monitor, programs that call 16412 boot monitor routines pass an unknown value in `$gp'. (In such 16413 situations, the boot monitor itself is usually compiled with 16414 `-G0'.) 16415 16416 `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'. 16417 16418`-membedded-data' 16419`-mno-embedded-data' 16420 Allocate variables to the read-only data section first if 16421 possible, then next in the small data section if possible, 16422 otherwise in data. This gives slightly slower code than the 16423 default, but reduces the amount of RAM required when executing, 16424 and thus may be preferred for some embedded systems. 16425 16426`-muninit-const-in-rodata' 16427`-mno-uninit-const-in-rodata' 16428 Put uninitialized `const' variables in the read-only data section. 16429 This option is only meaningful in conjunction with 16430 `-membedded-data'. 16431 16432`-mcode-readable=SETTING' 16433 Specify whether GCC may generate code that reads from executable 16434 sections. There are three possible settings: 16435 16436 `-mcode-readable=yes' 16437 Instructions may freely access executable sections. This is 16438 the default setting. 16439 16440 `-mcode-readable=pcrel' 16441 MIPS16 PC-relative load instructions can access executable 16442 sections, but other instructions must not do so. This option 16443 is useful on 4KSc and 4KSd processors when the code TLBs have 16444 the Read Inhibit bit set. It is also useful on processors 16445 that can be configured to have a dual instruction/data SRAM 16446 interface and that, like the M4K, automatically redirect 16447 PC-relative loads to the instruction RAM. 16448 16449 `-mcode-readable=no' 16450 Instructions must not access executable sections. This 16451 option can be useful on targets that are configured to have a 16452 dual instruction/data SRAM interface but that (unlike the 16453 M4K) do not automatically redirect PC-relative loads to the 16454 instruction RAM. 16455 16456`-msplit-addresses' 16457`-mno-split-addresses' 16458 Enable (disable) use of the `%hi()' and `%lo()' assembler 16459 relocation operators. This option has been superseded by 16460 `-mexplicit-relocs' but is retained for backwards compatibility. 16461 16462`-mexplicit-relocs' 16463`-mno-explicit-relocs' 16464 Use (do not use) assembler relocation operators when dealing with 16465 symbolic addresses. The alternative, selected by 16466 `-mno-explicit-relocs', is to use assembler macros instead. 16467 16468 `-mexplicit-relocs' is the default if GCC was configured to use an 16469 assembler that supports relocation operators. 16470 16471`-mcheck-zero-division' 16472`-mno-check-zero-division' 16473 Trap (do not trap) on integer division by zero. 16474 16475 The default is `-mcheck-zero-division'. 16476 16477`-mdivide-traps' 16478`-mdivide-breaks' 16479 MIPS systems check for division by zero by generating either a 16480 conditional trap or a break instruction. Using traps results in 16481 smaller code, but is only supported on MIPS II and later. Also, 16482 some versions of the Linux kernel have a bug that prevents trap 16483 from generating the proper signal (`SIGFPE'). Use 16484 `-mdivide-traps' to allow conditional traps on architectures that 16485 support them and `-mdivide-breaks' to force the use of breaks. 16486 16487 The default is usually `-mdivide-traps', but this can be 16488 overridden at configure time using `--with-divide=breaks'. 16489 Divide-by-zero checks can be completely disabled using 16490 `-mno-check-zero-division'. 16491 16492`-mmemcpy' 16493`-mno-memcpy' 16494 Force (do not force) the use of `memcpy' for non-trivial block 16495 moves. The default is `-mno-memcpy', which allows GCC to inline 16496 most constant-sized copies. 16497 16498`-mlong-calls' 16499`-mno-long-calls' 16500 Disable (do not disable) use of the `jal' instruction. Calling 16501 functions using `jal' is more efficient but requires the caller 16502 and callee to be in the same 256 megabyte segment. 16503 16504 This option has no effect on abicalls code. The default is 16505 `-mno-long-calls'. 16506 16507`-mmad' 16508`-mno-mad' 16509 Enable (disable) use of the `mad', `madu' and `mul' instructions, 16510 as provided by the R4650 ISA. 16511 16512`-mimadd' 16513`-mno-imadd' 16514 Enable (disable) use of the `madd' and `msub' integer 16515 instructions. The default is `-mimadd' on architectures that 16516 support `madd' and `msub' except for the 74k architecture where it 16517 was found to generate slower code. 16518 16519`-mfused-madd' 16520`-mno-fused-madd' 16521 Enable (disable) use of the floating-point multiply-accumulate 16522 instructions, when they are available. The default is 16523 `-mfused-madd'. 16524 16525 On the R8000 CPU when multiply-accumulate instructions are used, 16526 the intermediate product is calculated to infinite precision and 16527 is not subject to the FCSR Flush to Zero bit. This may be 16528 undesirable in some circumstances. On other processors the result 16529 is numerically identical to the equivalent computation using 16530 separate multiply, add, subtract and negate instructions. 16531 16532`-nocpp' 16533 Tell the MIPS assembler to not run its preprocessor over user 16534 assembler files (with a `.s' suffix) when assembling them. 16535 16536`-mfix-24k' 16537 16538`-mno-fix-24k' 16539 Work around the 24K E48 (lost data on stores during refill) errata. 16540 The workarounds are implemented by the assembler rather than by 16541 GCC. 16542 16543`-mfix-r4000' 16544`-mno-fix-r4000' 16545 Work around certain R4000 CPU errata: 16546 - A double-word or a variable shift may give an incorrect 16547 result if executed immediately after starting an integer 16548 division. 16549 16550 - A double-word or a variable shift may give an incorrect 16551 result if executed while an integer multiplication is in 16552 progress. 16553 16554 - An integer division may give an incorrect result if started 16555 in a delay slot of a taken branch or a jump. 16556 16557`-mfix-r4400' 16558`-mno-fix-r4400' 16559 Work around certain R4400 CPU errata: 16560 - A double-word or a variable shift may give an incorrect 16561 result if executed immediately after starting an integer 16562 division. 16563 16564`-mfix-r10000' 16565`-mno-fix-r10000' 16566 Work around certain R10000 errata: 16567 - `ll'/`sc' sequences may not behave atomically on revisions 16568 prior to 3.0. They may deadlock on revisions 2.6 and earlier. 16569 16570 This option can only be used if the target architecture supports 16571 branch-likely instructions. `-mfix-r10000' is the default when 16572 `-march=r10000' is used; `-mno-fix-r10000' is the default 16573 otherwise. 16574 16575`-mfix-rm7000' 16576`-mno-fix-rm7000' 16577 Work around the RM7000 `dmult'/`dmultu' errata. The workarounds 16578 are implemented by the assembler rather than by GCC. 16579 16580`-mfix-vr4120' 16581`-mno-fix-vr4120' 16582 Work around certain VR4120 errata: 16583 - `dmultu' does not always produce the correct result. 16584 16585 - `div' and `ddiv' do not always produce the correct result if 16586 one of the operands is negative. 16587 The workarounds for the division errata rely on special functions 16588 in `libgcc.a'. At present, these functions are only provided by 16589 the `mips64vr*-elf' configurations. 16590 16591 Other VR4120 errata require a NOP to be inserted between certain 16592 pairs of instructions. These errata are handled by the assembler, 16593 not by GCC itself. 16594 16595`-mfix-vr4130' 16596 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are 16597 implemented by the assembler rather than by GCC, although GCC 16598 avoids using `mflo' and `mfhi' if the VR4130 `macc', `macchi', 16599 `dmacc' and `dmacchi' instructions are available instead. 16600 16601`-mfix-sb1' 16602`-mno-fix-sb1' 16603 Work around certain SB-1 CPU core errata. (This flag currently 16604 works around the SB-1 revision 2 "F1" and "F2" floating-point 16605 errata.) 16606 16607`-mr10k-cache-barrier=SETTING' 16608 Specify whether GCC should insert cache barriers to avoid the 16609 side-effects of speculation on R10K processors. 16610 16611 In common with many processors, the R10K tries to predict the 16612 outcome of a conditional branch and speculatively executes 16613 instructions from the "taken" branch. It later aborts these 16614 instructions if the predicted outcome is wrong. However, on the 16615 R10K, even aborted instructions can have side effects. 16616 16617 This problem only affects kernel stores and, depending on the 16618 system, kernel loads. As an example, a speculatively-executed 16619 store may load the target memory into cache and mark the cache 16620 line as dirty, even if the store itself is later aborted. If a 16621 DMA operation writes to the same area of memory before the "dirty" 16622 line is flushed, the cached data overwrites the DMA-ed data. See 16623 the R10K processor manual for a full description, including other 16624 potential problems. 16625 16626 One workaround is to insert cache barrier instructions before 16627 every memory access that might be speculatively executed and that 16628 might have side effects even if aborted. 16629 `-mr10k-cache-barrier=SETTING' controls GCC's implementation of 16630 this workaround. It assumes that aborted accesses to any byte in 16631 the following regions does not have side effects: 16632 16633 1. the memory occupied by the current function's stack frame; 16634 16635 2. the memory occupied by an incoming stack argument; 16636 16637 3. the memory occupied by an object with a link-time-constant 16638 address. 16639 16640 It is the kernel's responsibility to ensure that speculative 16641 accesses to these regions are indeed safe. 16642 16643 If the input program contains a function declaration such as: 16644 16645 void foo (void); 16646 16647 then the implementation of `foo' must allow `j foo' and `jal foo' 16648 to be executed speculatively. GCC honors this restriction for 16649 functions it compiles itself. It expects non-GCC functions (such 16650 as hand-written assembly code) to do the same. 16651 16652 The option has three forms: 16653 16654 `-mr10k-cache-barrier=load-store' 16655 Insert a cache barrier before a load or store that might be 16656 speculatively executed and that might have side effects even 16657 if aborted. 16658 16659 `-mr10k-cache-barrier=store' 16660 Insert a cache barrier before a store that might be 16661 speculatively executed and that might have side effects even 16662 if aborted. 16663 16664 `-mr10k-cache-barrier=none' 16665 Disable the insertion of cache barriers. This is the default 16666 setting. 16667 16668`-mflush-func=FUNC' 16669`-mno-flush-func' 16670 Specifies the function to call to flush the I and D caches, or to 16671 not call any such function. If called, the function must take the 16672 same arguments as the common `_flush_func', that is, the address 16673 of the memory range for which the cache is being flushed, the size 16674 of the memory range, and the number 3 (to flush both caches). The 16675 default depends on the target GCC was configured for, but commonly 16676 is either `_flush_func' or `__cpu_flush'. 16677 16678`mbranch-cost=NUM' 16679 Set the cost of branches to roughly NUM "simple" instructions. 16680 This cost is only a heuristic and is not guaranteed to produce 16681 consistent results across releases. A zero cost redundantly 16682 selects the default, which is based on the `-mtune' setting. 16683 16684`-mbranch-likely' 16685`-mno-branch-likely' 16686 Enable or disable use of Branch Likely instructions, regardless of 16687 the default for the selected architecture. By default, Branch 16688 Likely instructions may be generated if they are supported by the 16689 selected architecture. An exception is for the MIPS32 and MIPS64 16690 architectures and processors that implement those architectures; 16691 for those, Branch Likely instructions are not be generated by 16692 default because the MIPS32 and MIPS64 architectures specifically 16693 deprecate their use. 16694 16695`-mfp-exceptions' 16696`-mno-fp-exceptions' 16697 Specifies whether FP exceptions are enabled. This affects how FP 16698 instructions are scheduled for some processors. The default is 16699 that FP exceptions are enabled. 16700 16701 For instance, on the SB-1, if FP exceptions are disabled, and we 16702 are emitting 64-bit code, then we can use both FP pipes. 16703 Otherwise, we can only use one FP pipe. 16704 16705`-mvr4130-align' 16706`-mno-vr4130-align' 16707 The VR4130 pipeline is two-way superscalar, but can only issue two 16708 instructions together if the first one is 8-byte aligned. When 16709 this option is enabled, GCC aligns pairs of instructions that it 16710 thinks should execute in parallel. 16711 16712 This option only has an effect when optimizing for the VR4130. It 16713 normally makes code faster, but at the expense of making it bigger. 16714 It is enabled by default at optimization level `-O3'. 16715 16716`-msynci' 16717`-mno-synci' 16718 Enable (disable) generation of `synci' instructions on 16719 architectures that support it. The `synci' instructions (if 16720 enabled) are generated when `__builtin___clear_cache' is compiled. 16721 16722 This option defaults to `-mno-synci', but the default can be 16723 overridden by configuring GCC with `--with-synci'. 16724 16725 When compiling code for single processor systems, it is generally 16726 safe to use `synci'. However, on many multi-core (SMP) systems, it 16727 does not invalidate the instruction caches on all cores and may 16728 lead to undefined behavior. 16729 16730`-mrelax-pic-calls' 16731`-mno-relax-pic-calls' 16732 Try to turn PIC calls that are normally dispatched via register 16733 `$25' into direct calls. This is only possible if the linker can 16734 resolve the destination at link-time and if the destination is 16735 within range for a direct call. 16736 16737 `-mrelax-pic-calls' is the default if GCC was configured to use an 16738 assembler and a linker that support the `.reloc' assembly 16739 directive and `-mexplicit-relocs' is in effect. With 16740 `-mno-explicit-relocs', this optimization can be performed by the 16741 assembler and the linker alone without help from the compiler. 16742 16743`-mmcount-ra-address' 16744`-mno-mcount-ra-address' 16745 Emit (do not emit) code that allows `_mcount' to modify the 16746 calling function's return address. When enabled, this option 16747 extends the usual `_mcount' interface with a new RA-ADDRESS 16748 parameter, which has type `intptr_t *' and is passed in register 16749 `$12'. `_mcount' can then modify the return address by doing both 16750 of the following: 16751 * Returning the new address in register `$31'. 16752 16753 * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is 16754 nonnull. 16755 16756 The default is `-mno-mcount-ra-address'. 16757 16758 16759 16760File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 16761 167623.17.26 MMIX Options 16763-------------------- 16764 16765These options are defined for the MMIX: 16766 16767`-mlibfuncs' 16768`-mno-libfuncs' 16769 Specify that intrinsic library functions are being compiled, 16770 passing all values in registers, no matter the size. 16771 16772`-mepsilon' 16773`-mno-epsilon' 16774 Generate floating-point comparison instructions that compare with 16775 respect to the `rE' epsilon register. 16776 16777`-mabi=mmixware' 16778`-mabi=gnu' 16779 Generate code that passes function parameters and return values 16780 that (in the called function) are seen as registers `$0' and up, 16781 as opposed to the GNU ABI which uses global registers `$231' and 16782 up. 16783 16784`-mzero-extend' 16785`-mno-zero-extend' 16786 When reading data from memory in sizes shorter than 64 bits, use 16787 (do not use) zero-extending load instructions by default, rather 16788 than sign-extending ones. 16789 16790`-mknuthdiv' 16791`-mno-knuthdiv' 16792 Make the result of a division yielding a remainder have the same 16793 sign as the divisor. With the default, `-mno-knuthdiv', the sign 16794 of the remainder follows the sign of the dividend. Both methods 16795 are arithmetically valid, the latter being almost exclusively used. 16796 16797`-mtoplevel-symbols' 16798`-mno-toplevel-symbols' 16799 Prepend (do not prepend) a `:' to all global symbols, so the 16800 assembly code can be used with the `PREFIX' assembly directive. 16801 16802`-melf' 16803 Generate an executable in the ELF format, rather than the default 16804 `mmo' format used by the `mmix' simulator. 16805 16806`-mbranch-predict' 16807`-mno-branch-predict' 16808 Use (do not use) the probable-branch instructions, when static 16809 branch prediction indicates a probable branch. 16810 16811`-mbase-addresses' 16812`-mno-base-addresses' 16813 Generate (do not generate) code that uses _base addresses_. Using 16814 a base address automatically generates a request (handled by the 16815 assembler and the linker) for a constant to be set up in a global 16816 register. The register is used for one or more base address 16817 requests within the range 0 to 255 from the value held in the 16818 register. The generally leads to short and fast code, but the 16819 number of different data items that can be addressed is limited. 16820 This means that a program that uses lots of static data may 16821 require `-mno-base-addresses'. 16822 16823`-msingle-exit' 16824`-mno-single-exit' 16825 Force (do not force) generated code to have a single exit point in 16826 each function. 16827 16828 16829File: gcc.info, Node: MN10300 Options, Next: Moxie Options, Prev: MMIX Options, Up: Submodel Options 16830 168313.17.27 MN10300 Options 16832----------------------- 16833 16834These `-m' options are defined for Matsushita MN10300 architectures: 16835 16836`-mmult-bug' 16837 Generate code to avoid bugs in the multiply instructions for the 16838 MN10300 processors. This is the default. 16839 16840`-mno-mult-bug' 16841 Do not generate code to avoid bugs in the multiply instructions 16842 for the MN10300 processors. 16843 16844`-mam33' 16845 Generate code using features specific to the AM33 processor. 16846 16847`-mno-am33' 16848 Do not generate code using features specific to the AM33 16849 processor. This is the default. 16850 16851`-mam33-2' 16852 Generate code using features specific to the AM33/2.0 processor. 16853 16854`-mam34' 16855 Generate code using features specific to the AM34 processor. 16856 16857`-mtune=CPU-TYPE' 16858 Use the timing characteristics of the indicated CPU type when 16859 scheduling instructions. This does not change the targeted 16860 processor type. The CPU type must be one of `mn10300', `am33', 16861 `am33-2' or `am34'. 16862 16863`-mreturn-pointer-on-d0' 16864 When generating a function that returns a pointer, return the 16865 pointer in both `a0' and `d0'. Otherwise, the pointer is returned 16866 only in `a0', and attempts to call such functions without a 16867 prototype result in errors. Note that this option is on by 16868 default; use `-mno-return-pointer-on-d0' to disable it. 16869 16870`-mno-crt0' 16871 Do not link in the C run-time initialization object file. 16872 16873`-mrelax' 16874 Indicate to the linker that it should perform a relaxation 16875 optimization pass to shorten branches, calls and absolute memory 16876 addresses. This option only has an effect when used on the 16877 command line for the final link step. 16878 16879 This option makes symbolic debugging impossible. 16880 16881`-mliw' 16882 Allow the compiler to generate _Long Instruction Word_ 16883 instructions if the target is the `AM33' or later. This is the 16884 default. This option defines the preprocessor macro `__LIW__'. 16885 16886`-mnoliw' 16887 Do not allow the compiler to generate _Long Instruction Word_ 16888 instructions. This option defines the preprocessor macro 16889 `__NO_LIW__'. 16890 16891`-msetlb' 16892 Allow the compiler to generate the _SETLB_ and _Lcc_ instructions 16893 if the target is the `AM33' or later. This is the default. This 16894 option defines the preprocessor macro `__SETLB__'. 16895 16896`-mnosetlb' 16897 Do not allow the compiler to generate _SETLB_ or _Lcc_ 16898 instructions. This option defines the preprocessor macro 16899 `__NO_SETLB__'. 16900 16901 16902 16903File: gcc.info, Node: Moxie Options, Next: MSP430 Options, Prev: MN10300 Options, Up: Submodel Options 16904 169053.17.28 Moxie Options 16906--------------------- 16907 16908`-meb' 16909 Generate big-endian code. This is the default for `moxie-*-*' 16910 configurations. 16911 16912`-mel' 16913 Generate little-endian code. 16914 16915`-mmul.x' 16916 Generate mul.x and umul.x instructions. This is the default for 16917 `moxiebox-*-*' configurations. 16918 16919`-mno-crt0' 16920 Do not link in the C run-time initialization object file. 16921 16922 16923 16924File: gcc.info, Node: MSP430 Options, Next: NDS32 Options, Prev: Moxie Options, Up: Submodel Options 16925 169263.17.29 MSP430 Options 16927---------------------- 16928 16929These options are defined for the MSP430: 16930 16931`-masm-hex' 16932 Force assembly output to always use hex constants. Normally such 16933 constants are signed decimals, but this option is available for 16934 testsuite and/or aesthetic purposes. 16935 16936`-mmcu=' 16937 Select the MCU to target. This is used to create a C preprocessor 16938 symbol based upon the MCU name, converted to upper case and pre- 16939 and post-fixed with `__'. This in turn is used by the `msp430.h' 16940 header file to select an MCU-specific supplementary header file. 16941 16942 The option also sets the ISA to use. If the MCU name is one that 16943 is known to only support the 430 ISA then that is selected, 16944 otherwise the 430X ISA is selected. A generic MCU name of 16945 `msp430' can also be used to select the 430 ISA. Similarly the 16946 generic `msp430x' MCU name selects the 430X ISA. 16947 16948 In addition an MCU-specific linker script is added to the linker 16949 command line. The script's name is the name of the MCU with `.ld' 16950 appended. Thus specifying `-mmcu=xxx' on the `gcc' command line 16951 defines the C preprocessor symbol `__XXX__' and cause the linker 16952 to search for a script called `xxx.ld'. 16953 16954 This option is also passed on to the assembler. 16955 16956`-mcpu=' 16957 Specifies the ISA to use. Accepted values are `msp430', `msp430x' 16958 and `msp430xv2'. This option is deprecated. The `-mmcu=' option 16959 should be used to select the ISA. 16960 16961`-msim' 16962 Link to the simulator runtime libraries and linker script. 16963 Overrides any scripts that would be selected by the `-mmcu=' 16964 option. 16965 16966`-mlarge' 16967 Use large-model addressing (20-bit pointers, 32-bit `size_t'). 16968 16969`-msmall' 16970 Use small-model addressing (16-bit pointers, 16-bit `size_t'). 16971 16972`-mrelax' 16973 This option is passed to the assembler and linker, and allows the 16974 linker to perform certain optimizations that cannot be done until 16975 the final link. 16976 16977`mhwmult=' 16978 Describes the type of hardware multiply supported by the target. 16979 Accepted values are `none' for no hardware multiply, `16bit' for 16980 the original 16-bit-only multiply supported by early MCUs. 16981 `32bit' for the 16/32-bit multiply supported by later MCUs and 16982 `f5series' for the 16/32-bit multiply supported by F5-series MCUs. 16983 A value of `auto' can also be given. This tells GCC to deduce the 16984 hardware multiply support based upon the MCU name provided by the 16985 `-mmcu' option. If no `-mmcu' option is specified then `32bit' 16986 hardware multiply support is assumed. `auto' is the default 16987 setting. 16988 16989 Hardware multiplies are normally performed by calling a library 16990 routine. This saves space in the generated code. When compiling 16991 at `-O3' or higher however the hardware multiplier is invoked 16992 inline. This makes for bigger, but faster code. 16993 16994 The hardware multiply routines disable interrupts whilst running 16995 and restore the previous interrupt state when they finish. This 16996 makes them safe to use inside interrupt handlers as well as in 16997 normal code. 16998 16999`-minrt' 17000 Enable the use of a minimum runtime environment - no static 17001 initializers or constructors. This is intended for 17002 memory-constrained devices. The compiler includes special symbols 17003 in some objects that tell the linker and runtime which code 17004 fragments are required. 17005 17006 17007 17008File: gcc.info, Node: NDS32 Options, Next: Nios II Options, Prev: MSP430 Options, Up: Submodel Options 17009 170103.17.30 NDS32 Options 17011--------------------- 17012 17013These options are defined for NDS32 implementations: 17014 17015`-mbig-endian' 17016 Generate code in big-endian mode. 17017 17018`-mlittle-endian' 17019 Generate code in little-endian mode. 17020 17021`-mreduced-regs' 17022 Use reduced-set registers for register allocation. 17023 17024`-mfull-regs' 17025 Use full-set registers for register allocation. 17026 17027`-mcmov' 17028 Generate conditional move instructions. 17029 17030`-mno-cmov' 17031 Do not generate conditional move instructions. 17032 17033`-mperf-ext' 17034 Generate performance extension instructions. 17035 17036`-mno-perf-ext' 17037 Do not generate performance extension instructions. 17038 17039`-mv3push' 17040 Generate v3 push25/pop25 instructions. 17041 17042`-mno-v3push' 17043 Do not generate v3 push25/pop25 instructions. 17044 17045`-m16-bit' 17046 Generate 16-bit instructions. 17047 17048`-mno-16-bit' 17049 Do not generate 16-bit instructions. 17050 17051`-misr-vector-size=NUM' 17052 Specify the size of each interrupt vector, which must be 4 or 16. 17053 17054`-mcache-block-size=NUM' 17055 Specify the size of each cache block, which must be a power of 2 17056 between 4 and 512. 17057 17058`-march=ARCH' 17059 Specify the name of the target architecture. 17060 17061`-mcmodel=CODE-MODEL' 17062 Set the code model to one of 17063 `small' 17064 All the data and read-only data segments must be within 512KB 17065 addressing space. The text segment must be within 16MB 17066 addressing space. 17067 17068 `medium' 17069 The data segment must be within 512KB while the read-only 17070 data segment can be within 4GB addressing space. The text 17071 segment should be still within 16MB addressing space. 17072 17073 `large' 17074 All the text and data segments can be within 4GB addressing 17075 space. 17076 17077`-mctor-dtor' 17078 Enable constructor/destructor feature. 17079 17080`-mrelax' 17081 Guide linker to relax instructions. 17082 17083 17084 17085File: gcc.info, Node: Nios II Options, Next: Nvidia PTX Options, Prev: NDS32 Options, Up: Submodel Options 17086 170873.17.31 Nios II Options 17088----------------------- 17089 17090These are the options defined for the Altera Nios II processor. 17091 17092`-G NUM' 17093 Put global and static objects less than or equal to NUM bytes into 17094 the small data or BSS sections instead of the normal data or BSS 17095 sections. The default value of NUM is 8. 17096 17097`-mgpopt=OPTION' 17098 17099`-mgpopt' 17100`-mno-gpopt' 17101 Generate (do not generate) GP-relative accesses. The following 17102 OPTION names are recognized: 17103 17104 `none' 17105 Do not generate GP-relative accesses. 17106 17107 `local' 17108 Generate GP-relative accesses for small data objects that are 17109 not external or weak. Also use GP-relative addressing for 17110 objects that have been explicitly placed in a small data 17111 section via a `section' attribute. 17112 17113 `global' 17114 As for `local', but also generate GP-relative accesses for 17115 small data objects that are external or weak. If you use 17116 this option, you must ensure that all parts of your program 17117 (including libraries) are compiled with the same `-G' setting. 17118 17119 `data' 17120 Generate GP-relative accesses for all data objects in the 17121 program. If you use this option, the entire data and BSS 17122 segments of your program must fit in 64K of memory and you 17123 must use an appropriate linker script to allocate them within 17124 the addressible range of the global pointer. 17125 17126 `all' 17127 Generate GP-relative addresses for function pointers as well 17128 as data pointers. If you use this option, the entire text, 17129 data, and BSS segments of your program must fit in 64K of 17130 memory and you must use an appropriate linker script to 17131 allocate them within the addressible range of the global 17132 pointer. 17133 17134 17135 `-mgpopt' is equivalent to `-mgpopt=local', and `-mno-gpopt' is 17136 equivalent to `-mgpopt=none'. 17137 17138 The default is `-mgpopt' except when `-fpic' or `-fPIC' is 17139 specified to generate position-independent code. Note that the 17140 Nios II ABI does not permit GP-relative accesses from shared 17141 libraries. 17142 17143 You may need to specify `-mno-gpopt' explicitly when building 17144 programs that include large amounts of small data, including large 17145 GOT data sections. In this case, the 16-bit offset for GP-relative 17146 addressing may not be large enough to allow access to the entire 17147 small data section. 17148 17149`-mel' 17150`-meb' 17151 Generate little-endian (default) or big-endian (experimental) code, 17152 respectively. 17153 17154`-mbypass-cache' 17155`-mno-bypass-cache' 17156 Force all load and store instructions to always bypass cache by 17157 using I/O variants of the instructions. The default is not to 17158 bypass the cache. 17159 17160`-mno-cache-volatile' 17161`-mcache-volatile' 17162 Volatile memory access bypass the cache using the I/O variants of 17163 the load and store instructions. The default is not to bypass the 17164 cache. 17165 17166`-mno-fast-sw-div' 17167`-mfast-sw-div' 17168 Do not use table-based fast divide for small numbers. The default 17169 is to use the fast divide at `-O3' and above. 17170 17171`-mno-hw-mul' 17172`-mhw-mul' 17173`-mno-hw-mulx' 17174`-mhw-mulx' 17175`-mno-hw-div' 17176`-mhw-div' 17177 Enable or disable emitting `mul', `mulx' and `div' family of 17178 instructions by the compiler. The default is to emit `mul' and not 17179 emit `div' and `mulx'. 17180 17181`-mcustom-INSN=N' 17182`-mno-custom-INSN' 17183 Each `-mcustom-INSN=N' option enables use of a custom instruction 17184 with encoding N when generating code that uses INSN. For example, 17185 `-mcustom-fadds=253' generates custom instruction 253 for 17186 single-precision floating-point add operations instead of the 17187 default behavior of using a library call. 17188 17189 The following values of INSN are supported. Except as otherwise 17190 noted, floating-point operations are expected to be implemented 17191 with normal IEEE 754 semantics and correspond directly to the C 17192 operators or the equivalent GCC built-in functions (*note Other 17193 Builtins::). 17194 17195 Single-precision floating point: 17196 `fadds', `fsubs', `fdivs', `fmuls' 17197 Binary arithmetic operations. 17198 17199 `fnegs' 17200 Unary negation. 17201 17202 `fabss' 17203 Unary absolute value. 17204 17205 `fcmpeqs', `fcmpges', `fcmpgts', `fcmples', `fcmplts', `fcmpnes' 17206 Comparison operations. 17207 17208 `fmins', `fmaxs' 17209 Floating-point minimum and maximum. These instructions are 17210 only generated if `-ffinite-math-only' is specified. 17211 17212 `fsqrts' 17213 Unary square root operation. 17214 17215 `fcoss', `fsins', `ftans', `fatans', `fexps', `flogs' 17216 Floating-point trigonometric and exponential functions. 17217 These instructions are only generated if 17218 `-funsafe-math-optimizations' is also specified. 17219 17220 17221 Double-precision floating point: 17222 `faddd', `fsubd', `fdivd', `fmuld' 17223 Binary arithmetic operations. 17224 17225 `fnegd' 17226 Unary negation. 17227 17228 `fabsd' 17229 Unary absolute value. 17230 17231 `fcmpeqd', `fcmpged', `fcmpgtd', `fcmpled', `fcmpltd', `fcmpned' 17232 Comparison operations. 17233 17234 `fmind', `fmaxd' 17235 Double-precision minimum and maximum. These instructions are 17236 only generated if `-ffinite-math-only' is specified. 17237 17238 `fsqrtd' 17239 Unary square root operation. 17240 17241 `fcosd', `fsind', `ftand', `fatand', `fexpd', `flogd' 17242 Double-precision trigonometric and exponential functions. 17243 These instructions are only generated if 17244 `-funsafe-math-optimizations' is also specified. 17245 17246 17247 Conversions: 17248 `fextsd' 17249 Conversion from single precision to double precision. 17250 17251 `ftruncds' 17252 Conversion from double precision to single precision. 17253 17254 `fixsi', `fixsu', `fixdi', `fixdu' 17255 Conversion from floating point to signed or unsigned integer 17256 types, with truncation towards zero. 17257 17258 `round' 17259 Conversion from single-precision floating point to signed 17260 integer, rounding to the nearest integer and ties away from 17261 zero. This corresponds to the `__builtin_lroundf' function 17262 when `-fno-math-errno' is used. 17263 17264 `floatis', `floatus', `floatid', `floatud' 17265 Conversion from signed or unsigned integer types to 17266 floating-point types. 17267 17268 17269 In addition, all of the following transfer instructions for 17270 internal registers X and Y must be provided to use any of the 17271 double-precision floating-point instructions. Custom instructions 17272 taking two double-precision source operands expect the first 17273 operand in the 64-bit register X. The other operand (or only 17274 operand of a unary operation) is given to the custom arithmetic 17275 instruction with the least significant half in source register 17276 SRC1 and the most significant half in SRC2. A custom instruction 17277 that returns a double-precision result returns the most 17278 significant 32 bits in the destination register and the other half 17279 in 32-bit register Y. GCC automatically generates the necessary 17280 code sequences to write register X and/or read register Y when 17281 double-precision floating-point instructions are used. 17282 17283 `fwrx' 17284 Write SRC1 into the least significant half of X and SRC2 into 17285 the most significant half of X. 17286 17287 `fwry' 17288 Write SRC1 into Y. 17289 17290 `frdxhi', `frdxlo' 17291 Read the most or least (respectively) significant half of X 17292 and store it in DEST. 17293 17294 `frdy' 17295 Read the value of Y and store it into DEST. 17296 17297 Note that you can gain more local control over generation of Nios 17298 II custom instructions by using the `target("custom-INSN=N")' and 17299 `target("no-custom-INSN")' function attributes (*note Function 17300 Attributes::) or pragmas (*note Function Specific Option 17301 Pragmas::). 17302 17303`-mcustom-fpu-cfg=NAME' 17304 This option enables a predefined, named set of custom instruction 17305 encodings (see `-mcustom-INSN' above). Currently, the following 17306 sets are defined: 17307 17308 `-mcustom-fpu-cfg=60-1' is equivalent to: 17309 -mcustom-fmuls=252 17310 -mcustom-fadds=253 17311 -mcustom-fsubs=254 17312 -fsingle-precision-constant 17313 17314 `-mcustom-fpu-cfg=60-2' is equivalent to: 17315 -mcustom-fmuls=252 17316 -mcustom-fadds=253 17317 -mcustom-fsubs=254 17318 -mcustom-fdivs=255 17319 -fsingle-precision-constant 17320 17321 `-mcustom-fpu-cfg=72-3' is equivalent to: 17322 -mcustom-floatus=243 17323 -mcustom-fixsi=244 17324 -mcustom-floatis=245 17325 -mcustom-fcmpgts=246 17326 -mcustom-fcmples=249 17327 -mcustom-fcmpeqs=250 17328 -mcustom-fcmpnes=251 17329 -mcustom-fmuls=252 17330 -mcustom-fadds=253 17331 -mcustom-fsubs=254 17332 -mcustom-fdivs=255 17333 -fsingle-precision-constant 17334 17335 Custom instruction assignments given by individual 17336 `-mcustom-INSN=' options override those given by 17337 `-mcustom-fpu-cfg=', regardless of the order of the options on the 17338 command line. 17339 17340 Note that you can gain more local control over selection of a FPU 17341 configuration by using the `target("custom-fpu-cfg=NAME")' 17342 function attribute (*note Function Attributes::) or pragma (*note 17343 Function Specific Option Pragmas::). 17344 17345 17346 These additional `-m' options are available for the Altera Nios II ELF 17347(bare-metal) target: 17348 17349`-mhal' 17350 Link with HAL BSP. This suppresses linking with the GCC-provided 17351 C runtime startup and termination code, and is typically used in 17352 conjunction with `-msys-crt0=' to specify the location of the 17353 alternate startup code provided by the HAL BSP. 17354 17355`-msmallc' 17356 Link with a limited version of the C library, `-lsmallc', rather 17357 than Newlib. 17358 17359`-msys-crt0=STARTFILE' 17360 STARTFILE is the file name of the startfile (crt0) to use when 17361 linking. This option is only useful in conjunction with `-mhal'. 17362 17363`-msys-lib=SYSTEMLIB' 17364 SYSTEMLIB is the library name of the library that provides 17365 low-level system calls required by the C library, e.g. `read' and 17366 `write'. This option is typically used to link with a library 17367 provided by a HAL BSP. 17368 17369 17370 17371File: gcc.info, Node: Nvidia PTX Options, Next: PDP-11 Options, Prev: Nios II Options, Up: Submodel Options 17372 173733.17.32 Nvidia PTX Options 17374-------------------------- 17375 17376These options are defined for Nvidia PTX: 17377 17378`-m32' 17379`-m64' 17380 Generate code for 32-bit or 64-bit ABI. 17381 17382`-mmainkernel' 17383 Link in code for a __main kernel. This is for stand-alone instead 17384 of offloading execution. 17385 17386 17387 17388File: gcc.info, Node: PDP-11 Options, Next: picoChip Options, Prev: Nvidia PTX Options, Up: Submodel Options 17389 173903.17.33 PDP-11 Options 17391---------------------- 17392 17393These options are defined for the PDP-11: 17394 17395`-mfpu' 17396 Use hardware FPP floating point. This is the default. (FIS 17397 floating point on the PDP-11/40 is not supported.) 17398 17399`-msoft-float' 17400 Do not use hardware floating point. 17401 17402`-mac0' 17403 Return floating-point results in ac0 (fr0 in Unix assembler 17404 syntax). 17405 17406`-mno-ac0' 17407 Return floating-point results in memory. This is the default. 17408 17409`-m40' 17410 Generate code for a PDP-11/40. 17411 17412`-m45' 17413 Generate code for a PDP-11/45. This is the default. 17414 17415`-m10' 17416 Generate code for a PDP-11/10. 17417 17418`-mbcopy-builtin' 17419 Use inline `movmemhi' patterns for copying memory. This is the 17420 default. 17421 17422`-mbcopy' 17423 Do not use inline `movmemhi' patterns for copying memory. 17424 17425`-mint16' 17426`-mno-int32' 17427 Use 16-bit `int'. This is the default. 17428 17429`-mint32' 17430`-mno-int16' 17431 Use 32-bit `int'. 17432 17433`-mfloat64' 17434`-mno-float32' 17435 Use 64-bit `float'. This is the default. 17436 17437`-mfloat32' 17438`-mno-float64' 17439 Use 32-bit `float'. 17440 17441`-mabshi' 17442 Use `abshi2' pattern. This is the default. 17443 17444`-mno-abshi' 17445 Do not use `abshi2' pattern. 17446 17447`-mbranch-expensive' 17448 Pretend that branches are expensive. This is for experimenting 17449 with code generation only. 17450 17451`-mbranch-cheap' 17452 Do not pretend that branches are expensive. This is the default. 17453 17454`-munix-asm' 17455 Use Unix assembler syntax. This is the default when configured for 17456 `pdp11-*-bsd'. 17457 17458`-mdec-asm' 17459 Use DEC assembler syntax. This is the default when configured for 17460 any PDP-11 target other than `pdp11-*-bsd'. 17461 17462 17463File: gcc.info, Node: picoChip Options, Next: PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 17464 174653.17.34 picoChip Options 17466------------------------ 17467 17468These `-m' options are defined for picoChip implementations: 17469 17470`-mae=AE_TYPE' 17471 Set the instruction set, register set, and instruction scheduling 17472 parameters for array element type AE_TYPE. Supported values for 17473 AE_TYPE are `ANY', `MUL', and `MAC'. 17474 17475 `-mae=ANY' selects a completely generic AE type. Code generated 17476 with this option runs on any of the other AE types. The code is 17477 not as efficient as it would be if compiled for a specific AE 17478 type, and some types of operation (e.g., multiplication) do not 17479 work properly on all types of AE. 17480 17481 `-mae=MUL' selects a MUL AE type. This is the most useful AE type 17482 for compiled code, and is the default. 17483 17484 `-mae=MAC' selects a DSP-style MAC AE. Code compiled with this 17485 option may suffer from poor performance of byte (char) 17486 manipulation, since the DSP AE does not provide hardware support 17487 for byte load/stores. 17488 17489`-msymbol-as-address' 17490 Enable the compiler to directly use a symbol name as an address in 17491 a load/store instruction, without first loading it into a 17492 register. Typically, the use of this option generates larger 17493 programs, which run faster than when the option isn't used. 17494 However, the results vary from program to program, so it is left 17495 as a user option, rather than being permanently enabled. 17496 17497`-mno-inefficient-warnings' 17498 Disables warnings about the generation of inefficient code. These 17499 warnings can be generated, for example, when compiling code that 17500 performs byte-level memory operations on the MAC AE type. The MAC 17501 AE has no hardware support for byte-level memory operations, so 17502 all byte load/stores must be synthesized from word load/store 17503 operations. This is inefficient and a warning is generated to 17504 indicate that you should rewrite the code to avoid byte 17505 operations, or to target an AE type that has the necessary 17506 hardware support. This option disables these warnings. 17507 17508 17509 17510File: gcc.info, Node: PowerPC Options, Next: RL78 Options, Prev: picoChip Options, Up: Submodel Options 17511 175123.17.35 PowerPC Options 17513----------------------- 17514 17515These are listed under *Note RS/6000 and PowerPC Options::. 17516 17517 17518File: gcc.info, Node: RL78 Options, Next: RS/6000 and PowerPC Options, Prev: PowerPC Options, Up: Submodel Options 17519 175203.17.36 RL78 Options 17521-------------------- 17522 17523`-msim' 17524 Links in additional target libraries to support operation within a 17525 simulator. 17526 17527`-mmul=none' 17528`-mmul=g13' 17529`-mmul=rl78' 17530 Specifies the type of hardware multiplication support to be used. 17531 The default is `none', which uses software multiplication 17532 functions. The `g13' option is for the hardware multiply/divide 17533 peripheral only on the RL78/G13 targets. The `rl78' option is for 17534 the standard hardware multiplication defined in the RL78 software 17535 manual. 17536 17537`-m64bit-doubles' 17538`-m32bit-doubles' 17539 Make the `double' data type be 64 bits (`-m64bit-doubles') or 32 17540 bits (`-m32bit-doubles') in size. The default is 17541 `-m32bit-doubles'. 17542 17543 17544 17545File: gcc.info, Node: RS/6000 and PowerPC Options, Next: RX Options, Prev: RL78 Options, Up: Submodel Options 17546 175473.17.37 IBM RS/6000 and PowerPC Options 17548--------------------------------------- 17549 17550These `-m' options are defined for the IBM RS/6000 and PowerPC: 17551`-mpowerpc-gpopt' 17552`-mno-powerpc-gpopt' 17553`-mpowerpc-gfxopt' 17554`-mno-powerpc-gfxopt' 17555`-mpowerpc64' 17556`-mno-powerpc64' 17557`-mmfcrf' 17558`-mno-mfcrf' 17559`-mpopcntb' 17560`-mno-popcntb' 17561`-mpopcntd' 17562`-mno-popcntd' 17563`-mfprnd' 17564`-mno-fprnd' 17565`-mcmpb' 17566`-mno-cmpb' 17567`-mmfpgpr' 17568`-mno-mfpgpr' 17569`-mhard-dfp' 17570`-mno-hard-dfp' 17571 You use these options to specify which instructions are available 17572 on the processor you are using. The default value of these 17573 options is determined when configuring GCC. Specifying the 17574 `-mcpu=CPU_TYPE' overrides the specification of these options. We 17575 recommend you use the `-mcpu=CPU_TYPE' option rather than the 17576 options listed above. 17577 17578 Specifying `-mpowerpc-gpopt' allows GCC to use the optional 17579 PowerPC architecture instructions in the General Purpose group, 17580 including floating-point square root. Specifying 17581 `-mpowerpc-gfxopt' allows GCC to use the optional PowerPC 17582 architecture instructions in the Graphics group, including 17583 floating-point select. 17584 17585 The `-mmfcrf' option allows GCC to generate the move from 17586 condition register field instruction implemented on the POWER4 17587 processor and other processors that support the PowerPC V2.01 17588 architecture. The `-mpopcntb' option allows GCC to generate the 17589 popcount and double-precision FP reciprocal estimate instruction 17590 implemented on the POWER5 processor and other processors that 17591 support the PowerPC V2.02 architecture. The `-mpopcntd' option 17592 allows GCC to generate the popcount instruction implemented on the 17593 POWER7 processor and other processors that support the PowerPC 17594 V2.06 architecture. The `-mfprnd' option allows GCC to generate 17595 the FP round to integer instructions implemented on the POWER5+ 17596 processor and other processors that support the PowerPC V2.03 17597 architecture. The `-mcmpb' option allows GCC to generate the 17598 compare bytes instruction implemented on the POWER6 processor and 17599 other processors that support the PowerPC V2.05 architecture. The 17600 `-mmfpgpr' option allows GCC to generate the FP move to/from 17601 general-purpose register instructions implemented on the POWER6X 17602 processor and other processors that support the extended PowerPC 17603 V2.05 architecture. The `-mhard-dfp' option allows GCC to 17604 generate the decimal floating-point instructions implemented on 17605 some POWER processors. 17606 17607 The `-mpowerpc64' option allows GCC to generate the additional 17608 64-bit instructions that are found in the full PowerPC64 17609 architecture and to treat GPRs as 64-bit, doubleword quantities. 17610 GCC defaults to `-mno-powerpc64'. 17611 17612`-mcpu=CPU_TYPE' 17613 Set architecture type, register usage, and instruction scheduling 17614 parameters for machine type CPU_TYPE. Supported values for 17615 CPU_TYPE are `401', `403', `405', `405fp', `440', `440fp', `464', 17616 `464fp', `476', `476fp', `505', `601', `602', `603', `603e', 17617 `604', `604e', `620', `630', `740', `7400', `7450', `750', `801', 17618 `821', `823', `860', `970', `8540', `a2', `e300c2', `e300c3', 17619 `e500mc', `e500mc64', `e5500', `e6500', `ec603e', `G3', `G4', `G5', 17620 `titan', `power3', `power4', `power5', `power5+', `power6', 17621 `power6x', `power7', `power8', `powerpc', `powerpc64', 17622 `powerpc64le', and `rs64'. 17623 17624 `-mcpu=powerpc', `-mcpu=powerpc64', and `-mcpu=powerpc64le' 17625 specify pure 32-bit PowerPC (either endian), 64-bit big endian 17626 PowerPC and 64-bit little endian PowerPC architecture machine 17627 types, with an appropriate, generic processor model assumed for 17628 scheduling purposes. 17629 17630 The other options specify a specific processor. Code generated 17631 under those options runs best on that processor, and may not run 17632 at all on others. 17633 17634 The `-mcpu' options automatically enable or disable the following 17635 options: 17636 17637 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple 17638 -mpopcntb -mpopcntd -mpowerpc64 17639 -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float 17640 -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx 17641 -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector 17642 -mquad-memory -mquad-memory-atomic 17643 17644 The particular options set for any particular CPU varies between 17645 compiler versions, depending on what setting seems to produce 17646 optimal code for that CPU; it doesn't necessarily reflect the 17647 actual hardware's capabilities. If you wish to set an individual 17648 option to a particular value, you may specify it after the `-mcpu' 17649 option, like `-mcpu=970 -mno-altivec'. 17650 17651 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 17652 or disabled by the `-mcpu' option at present because AIX does not 17653 have full support for these options. You may still enable or 17654 disable them individually if you're sure it'll work in your 17655 environment. 17656 17657`-mtune=CPU_TYPE' 17658 Set the instruction scheduling parameters for machine type 17659 CPU_TYPE, but do not set the architecture type or register usage, 17660 as `-mcpu=CPU_TYPE' does. The same values for CPU_TYPE are used 17661 for `-mtune' as for `-mcpu'. If both are specified, the code 17662 generated uses the architecture and registers set by `-mcpu', but 17663 the scheduling parameters set by `-mtune'. 17664 17665`-mcmodel=small' 17666 Generate PowerPC64 code for the small model: The TOC is limited to 17667 64k. 17668 17669`-mcmodel=medium' 17670 Generate PowerPC64 code for the medium model: The TOC and other 17671 static data may be up to a total of 4G in size. 17672 17673`-mcmodel=large' 17674 Generate PowerPC64 code for the large model: The TOC may be up to 17675 4G in size. Other data and code is only limited by the 64-bit 17676 address space. 17677 17678`-maltivec' 17679`-mno-altivec' 17680 Generate code that uses (does not use) AltiVec instructions, and 17681 also enable the use of built-in functions that allow more direct 17682 access to the AltiVec instruction set. You may also need to set 17683 `-mabi=altivec' to adjust the current ABI with AltiVec ABI 17684 enhancements. 17685 17686 When `-maltivec' is used, rather than `-maltivec=le' or 17687 `-maltivec=be', the element order for Altivec intrinsics such as 17688 `vec_splat', `vec_extract', and `vec_insert' match array element 17689 order corresponding to the endianness of the target. That is, 17690 element zero identifies the leftmost element in a vector register 17691 when targeting a big-endian platform, and identifies the rightmost 17692 element in a vector register when targeting a little-endian 17693 platform. 17694 17695`-maltivec=be' 17696 Generate Altivec instructions using big-endian element order, 17697 regardless of whether the target is big- or little-endian. This is 17698 the default when targeting a big-endian platform. 17699 17700 The element order is used to interpret element numbers in Altivec 17701 intrinsics such as `vec_splat', `vec_extract', and `vec_insert'. 17702 By default, these match array element order corresponding to the 17703 endianness for the target. 17704 17705`-maltivec=le' 17706 Generate Altivec instructions using little-endian element order, 17707 regardless of whether the target is big- or little-endian. This is 17708 the default when targeting a little-endian platform. This option 17709 is currently ignored when targeting a big-endian platform. 17710 17711 The element order is used to interpret element numbers in Altivec 17712 intrinsics such as `vec_splat', `vec_extract', and `vec_insert'. 17713 By default, these match array element order corresponding to the 17714 endianness for the target. 17715 17716`-mvrsave' 17717`-mno-vrsave' 17718 Generate VRSAVE instructions when generating AltiVec code. 17719 17720`-mgen-cell-microcode' 17721 Generate Cell microcode instructions. 17722 17723`-mwarn-cell-microcode' 17724 Warn when a Cell microcode instruction is emitted. An example of 17725 a Cell microcode instruction is a variable shift. 17726 17727`-msecure-plt' 17728 Generate code that allows `ld' and `ld.so' to build executables 17729 and shared libraries with non-executable `.plt' and `.got' 17730 sections. This is a PowerPC 32-bit SYSV ABI option. 17731 17732`-mbss-plt' 17733 Generate code that uses a BSS `.plt' section that `ld.so' fills 17734 in, and requires `.plt' and `.got' sections that are both writable 17735 and executable. This is a PowerPC 32-bit SYSV ABI option. 17736 17737`-misel' 17738`-mno-isel' 17739 This switch enables or disables the generation of ISEL 17740 instructions. 17741 17742`-misel=YES/NO' 17743 This switch has been deprecated. Use `-misel' and `-mno-isel' 17744 instead. 17745 17746`-mspe' 17747`-mno-spe' 17748 This switch enables or disables the generation of SPE simd 17749 instructions. 17750 17751`-mpaired' 17752`-mno-paired' 17753 This switch enables or disables the generation of PAIRED simd 17754 instructions. 17755 17756`-mspe=YES/NO' 17757 This option has been deprecated. Use `-mspe' and `-mno-spe' 17758 instead. 17759 17760`-mvsx' 17761`-mno-vsx' 17762 Generate code that uses (does not use) vector/scalar (VSX) 17763 instructions, and also enable the use of built-in functions that 17764 allow more direct access to the VSX instruction set. 17765 17766`-mcrypto' 17767`-mno-crypto' 17768 Enable the use (disable) of the built-in functions that allow 17769 direct access to the cryptographic instructions that were added in 17770 version 2.07 of the PowerPC ISA. 17771 17772`-mdirect-move' 17773`-mno-direct-move' 17774 Generate code that uses (does not use) the instructions to move 17775 data between the general purpose registers and the vector/scalar 17776 (VSX) registers that were added in version 2.07 of the PowerPC ISA. 17777 17778`-mpower8-fusion' 17779`-mno-power8-fusion' 17780 Generate code that keeps (does not keeps) some integer operations 17781 adjacent so that the instructions can be fused together on power8 17782 and later processors. 17783 17784`-mpower8-vector' 17785`-mno-power8-vector' 17786 Generate code that uses (does not use) the vector and scalar 17787 instructions that were added in version 2.07 of the PowerPC ISA. 17788 Also enable the use of built-in functions that allow more direct 17789 access to the vector instructions. 17790 17791`-mquad-memory' 17792`-mno-quad-memory' 17793 Generate code that uses (does not use) the non-atomic quad word 17794 memory instructions. The `-mquad-memory' option requires use of 17795 64-bit mode. 17796 17797`-mquad-memory-atomic' 17798`-mno-quad-memory-atomic' 17799 Generate code that uses (does not use) the atomic quad word memory 17800 instructions. The `-mquad-memory-atomic' option requires use of 17801 64-bit mode. 17802 17803`-mupper-regs-df' 17804`-mno-upper-regs-df' 17805 Generate code that uses (does not use) the scalar double precision 17806 instructions that target all 64 registers in the vector/scalar 17807 floating point register set that were added in version 2.06 of the 17808 PowerPC ISA. `-mupper-regs-df' is turned on by default if you use 17809 any of the `-mcpu=power7', `-mcpu=power8', or `-mvsx' options. 17810 17811`-mupper-regs-sf' 17812`-mno-upper-regs-sf' 17813 Generate code that uses (does not use) the scalar single precision 17814 instructions that target all 64 registers in the vector/scalar 17815 floating point register set that were added in version 2.07 of the 17816 PowerPC ISA. `-mupper-regs-sf' is turned on by default if you use 17817 either of the `-mcpu=power8' or `-mpower8-vector' options. 17818 17819`-mupper-regs' 17820`-mno-upper-regs' 17821 Generate code that uses (does not use) the scalar instructions 17822 that target all 64 registers in the vector/scalar floating point 17823 register set, depending on the model of the machine. 17824 17825 If the `-mno-upper-regs' option is used, it turns off both 17826 `-mupper-regs-sf' and `-mupper-regs-df' options. 17827 17828`-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 17829`-mfloat-gprs' 17830 This switch enables or disables the generation of floating-point 17831 operations on the general-purpose registers for architectures that 17832 support it. 17833 17834 The argument `yes' or `single' enables the use of single-precision 17835 floating-point operations. 17836 17837 The argument `double' enables the use of single and 17838 double-precision floating-point operations. 17839 17840 The argument `no' disables floating-point operations on the 17841 general-purpose registers. 17842 17843 This option is currently only available on the MPC854x. 17844 17845`-m32' 17846`-m64' 17847 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 17848 targets (including GNU/Linux). The 32-bit environment sets int, 17849 long and pointer to 32 bits and generates code that runs on any 17850 PowerPC variant. The 64-bit environment sets int to 32 bits and 17851 long and pointer to 64 bits, and generates code for PowerPC64, as 17852 for `-mpowerpc64'. 17853 17854`-mfull-toc' 17855`-mno-fp-in-toc' 17856`-mno-sum-in-toc' 17857`-mminimal-toc' 17858 Modify generation of the TOC (Table Of Contents), which is created 17859 for every executable file. The `-mfull-toc' option is selected by 17860 default. In that case, GCC allocates at least one TOC entry for 17861 each unique non-automatic variable reference in your program. GCC 17862 also places floating-point constants in the TOC. However, only 17863 16,384 entries are available in the TOC. 17864 17865 If you receive a linker error message that saying you have 17866 overflowed the available TOC space, you can reduce the amount of 17867 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 17868 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 17869 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 17870 code to calculate the sum of an address and a constant at run time 17871 instead of putting that sum into the TOC. You may specify one or 17872 both of these options. Each causes GCC to produce very slightly 17873 slower and larger code at the expense of conserving TOC space. 17874 17875 If you still run out of space in the TOC even when you specify 17876 both of these options, specify `-mminimal-toc' instead. This 17877 option causes GCC to make only one TOC entry for every file. When 17878 you specify this option, GCC produces code that is slower and 17879 larger but which uses extremely little TOC space. You may wish to 17880 use this option only on files that contain less 17881 frequently-executed code. 17882 17883`-maix64' 17884`-maix32' 17885 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 17886 64-bit `long' type, and the infrastructure needed to support them. 17887 Specifying `-maix64' implies `-mpowerpc64', while `-maix32' 17888 disables the 64-bit ABI and implies `-mno-powerpc64'. GCC 17889 defaults to `-maix32'. 17890 17891`-mxl-compat' 17892`-mno-xl-compat' 17893 Produce code that conforms more closely to IBM XL compiler 17894 semantics when using AIX-compatible ABI. Pass floating-point 17895 arguments to prototyped functions beyond the register save area 17896 (RSA) on the stack in addition to argument FPRs. Do not assume 17897 that most significant double in 128-bit long double value is 17898 properly rounded when comparing values and converting to double. 17899 Use XL symbol names for long double support routines. 17900 17901 The AIX calling convention was extended but not initially 17902 documented to handle an obscure K&R C case of calling a function 17903 that takes the address of its arguments with fewer arguments than 17904 declared. IBM XL compilers access floating-point arguments that 17905 do not fit in the RSA from the stack when a subroutine is compiled 17906 without optimization. Because always storing floating-point 17907 arguments on the stack is inefficient and rarely needed, this 17908 option is not enabled by default and only is necessary when 17909 calling subroutines compiled by IBM XL compilers without 17910 optimization. 17911 17912`-mpe' 17913 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 17914 application written to use message passing with special startup 17915 code to enable the application to run. The system must have PE 17916 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 17917 `specs' file must be overridden with the `-specs=' option to 17918 specify the appropriate directory location. The Parallel 17919 Environment does not support threads, so the `-mpe' option and the 17920 `-pthread' option are incompatible. 17921 17922`-malign-natural' 17923`-malign-power' 17924 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 17925 `-malign-natural' overrides the ABI-defined alignment of larger 17926 types, such as floating-point doubles, on their natural size-based 17927 boundary. The option `-malign-power' instructs GCC to follow the 17928 ABI-specified alignment rules. GCC defaults to the standard 17929 alignment defined in the ABI. 17930 17931 On 64-bit Darwin, natural alignment is the default, and 17932 `-malign-power' is not supported. 17933 17934`-msoft-float' 17935`-mhard-float' 17936 Generate code that does not use (uses) the floating-point register 17937 set. Software floating-point emulation is provided if you use the 17938 `-msoft-float' option, and pass the option to GCC when linking. 17939 17940`-msingle-float' 17941`-mdouble-float' 17942 Generate code for single- or double-precision floating-point 17943 operations. `-mdouble-float' implies `-msingle-float'. 17944 17945`-msimple-fpu' 17946 Do not generate `sqrt' and `div' instructions for hardware 17947 floating-point unit. 17948 17949`-mfpu=NAME' 17950 Specify type of floating-point unit. Valid values for NAME are 17951 `sp_lite' (equivalent to `-msingle-float -msimple-fpu'), `dp_lite' 17952 (equivalent to `-mdouble-float -msimple-fpu'), `sp_full' 17953 (equivalent to `-msingle-float'), and `dp_full' (equivalent to 17954 `-mdouble-float'). 17955 17956`-mxilinx-fpu' 17957 Perform optimizations for the floating-point unit on Xilinx PPC 17958 405/440. 17959 17960`-mmultiple' 17961`-mno-multiple' 17962 Generate code that uses (does not use) the load multiple word 17963 instructions and the store multiple word instructions. These 17964 instructions are generated by default on POWER systems, and not 17965 generated on PowerPC systems. Do not use `-mmultiple' on 17966 little-endian PowerPC systems, since those instructions do not 17967 work when the processor is in little-endian mode. The exceptions 17968 are PPC740 and PPC750 which permit these instructions in 17969 little-endian mode. 17970 17971`-mstring' 17972`-mno-string' 17973 Generate code that uses (does not use) the load string instructions 17974 and the store string word instructions to save multiple registers 17975 and do small block moves. These instructions are generated by 17976 default on POWER systems, and not generated on PowerPC systems. 17977 Do not use `-mstring' on little-endian PowerPC systems, since those 17978 instructions do not work when the processor is in little-endian 17979 mode. The exceptions are PPC740 and PPC750 which permit these 17980 instructions in little-endian mode. 17981 17982`-mupdate' 17983`-mno-update' 17984 Generate code that uses (does not use) the load or store 17985 instructions that update the base register to the address of the 17986 calculated memory location. These instructions are generated by 17987 default. If you use `-mno-update', there is a small window 17988 between the time that the stack pointer is updated and the address 17989 of the previous frame is stored, which means code that walks the 17990 stack frame across interrupts or signals may get corrupted data. 17991 17992`-mavoid-indexed-addresses' 17993`-mno-avoid-indexed-addresses' 17994 Generate code that tries to avoid (not avoid) the use of indexed 17995 load or store instructions. These instructions can incur a 17996 performance penalty on Power6 processors in certain situations, 17997 such as when stepping through large arrays that cross a 16M 17998 boundary. This option is enabled by default when targeting Power6 17999 and disabled otherwise. 18000 18001`-mfused-madd' 18002`-mno-fused-madd' 18003 Generate code that uses (does not use) the floating-point multiply 18004 and accumulate instructions. These instructions are generated by 18005 default if hardware floating point is used. The machine-dependent 18006 `-mfused-madd' option is now mapped to the machine-independent 18007 `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to 18008 `-ffp-contract=off'. 18009 18010`-mmulhw' 18011`-mno-mulhw' 18012 Generate code that uses (does not use) the half-word multiply and 18013 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 18014 processors. These instructions are generated by default when 18015 targeting those processors. 18016 18017`-mdlmzb' 18018`-mno-dlmzb' 18019 Generate code that uses (does not use) the string-search `dlmzb' 18020 instruction on the IBM 405, 440, 464 and 476 processors. This 18021 instruction is generated by default when targeting those 18022 processors. 18023 18024`-mno-bit-align' 18025`-mbit-align' 18026 On System V.4 and embedded PowerPC systems do not (do) force 18027 structures and unions that contain bit-fields to be aligned to the 18028 base type of the bit-field. 18029 18030 For example, by default a structure containing nothing but 8 18031 `unsigned' bit-fields of length 1 is aligned to a 4-byte boundary 18032 and has a size of 4 bytes. By using `-mno-bit-align', the 18033 structure is aligned to a 1-byte boundary and is 1 byte in size. 18034 18035`-mno-strict-align' 18036`-mstrict-align' 18037 On System V.4 and embedded PowerPC systems do not (do) assume that 18038 unaligned memory references are handled by the system. 18039 18040`-mrelocatable' 18041`-mno-relocatable' 18042 Generate code that allows (does not allow) a static executable to 18043 be relocated to a different address at run time. A simple embedded 18044 PowerPC system loader should relocate the entire contents of 18045 `.got2' and 4-byte locations listed in the `.fixup' section, a 18046 table of 32-bit addresses generated by this option. For this to 18047 work, all objects linked together must be compiled with 18048 `-mrelocatable' or `-mrelocatable-lib'. `-mrelocatable' code 18049 aligns the stack to an 8-byte boundary. 18050 18051`-mrelocatable-lib' 18052`-mno-relocatable-lib' 18053 Like `-mrelocatable', `-mrelocatable-lib' generates a `.fixup' 18054 section to allow static executables to be relocated at run time, 18055 but `-mrelocatable-lib' does not use the smaller stack alignment 18056 of `-mrelocatable'. Objects compiled with `-mrelocatable-lib' may 18057 be linked with objects compiled with any combination of the 18058 `-mrelocatable' options. 18059 18060`-mno-toc' 18061`-mtoc' 18062 On System V.4 and embedded PowerPC systems do not (do) assume that 18063 register 2 contains a pointer to a global area pointing to the 18064 addresses used in the program. 18065 18066`-mlittle' 18067`-mlittle-endian' 18068 On System V.4 and embedded PowerPC systems compile code for the 18069 processor in little-endian mode. The `-mlittle-endian' option is 18070 the same as `-mlittle'. 18071 18072`-mbig' 18073`-mbig-endian' 18074 On System V.4 and embedded PowerPC systems compile code for the 18075 processor in big-endian mode. The `-mbig-endian' option is the 18076 same as `-mbig'. 18077 18078`-mdynamic-no-pic' 18079 On Darwin and Mac OS X systems, compile code so that it is not 18080 relocatable, but that its external references are relocatable. The 18081 resulting code is suitable for applications, but not shared 18082 libraries. 18083 18084`-msingle-pic-base' 18085 Treat the register used for PIC addressing as read-only, rather 18086 than loading it in the prologue for each function. The runtime 18087 system is responsible for initializing this register with an 18088 appropriate value before execution begins. 18089 18090`-mprioritize-restricted-insns=PRIORITY' 18091 This option controls the priority that is assigned to 18092 dispatch-slot restricted instructions during the second scheduling 18093 pass. The argument PRIORITY takes the value `0', `1', or `2' to 18094 assign no, highest, or second-highest (respectively) priority to 18095 dispatch-slot restricted instructions. 18096 18097`-msched-costly-dep=DEPENDENCE_TYPE' 18098 This option controls which dependences are considered costly by 18099 the target during instruction scheduling. The argument 18100 DEPENDENCE_TYPE takes one of the following values: 18101 18102 `no' 18103 No dependence is costly. 18104 18105 `all' 18106 All dependences are costly. 18107 18108 `true_store_to_load' 18109 A true dependence from store to load is costly. 18110 18111 `store_to_load' 18112 Any dependence from store to load is costly. 18113 18114 NUMBER 18115 Any dependence for which the latency is greater than or equal 18116 to NUMBER is costly. 18117 18118`-minsert-sched-nops=SCHEME' 18119 This option controls which NOP insertion scheme is used during the 18120 second scheduling pass. The argument SCHEME takes one of the 18121 following values: 18122 18123 `no' 18124 Don't insert NOPs. 18125 18126 `pad' 18127 Pad with NOPs any dispatch group that has vacant issue slots, 18128 according to the scheduler's grouping. 18129 18130 `regroup_exact' 18131 Insert NOPs to force costly dependent insns into separate 18132 groups. Insert exactly as many NOPs as needed to force an 18133 insn to a new group, according to the estimated processor 18134 grouping. 18135 18136 NUMBER 18137 Insert NOPs to force costly dependent insns into separate 18138 groups. Insert NUMBER NOPs to force an insn to a new group. 18139 18140`-mcall-sysv' 18141 On System V.4 and embedded PowerPC systems compile code using 18142 calling conventions that adhere to the March 1995 draft of the 18143 System V Application Binary Interface, PowerPC processor 18144 supplement. This is the default unless you configured GCC using 18145 `powerpc-*-eabiaix'. 18146 18147`-mcall-sysv-eabi' 18148`-mcall-eabi' 18149 Specify both `-mcall-sysv' and `-meabi' options. 18150 18151`-mcall-sysv-noeabi' 18152 Specify both `-mcall-sysv' and `-mno-eabi' options. 18153 18154`-mcall-aixdesc' 18155 On System V.4 and embedded PowerPC systems compile code for the AIX 18156 operating system. 18157 18158`-mcall-linux' 18159 On System V.4 and embedded PowerPC systems compile code for the 18160 Linux-based GNU system. 18161 18162`-mcall-freebsd' 18163 On System V.4 and embedded PowerPC systems compile code for the 18164 FreeBSD operating system. 18165 18166`-mcall-netbsd' 18167 On System V.4 and embedded PowerPC systems compile code for the 18168 NetBSD operating system. 18169 18170`-mcall-openbsd' 18171 On System V.4 and embedded PowerPC systems compile code for the 18172 OpenBSD operating system. 18173 18174`-maix-struct-return' 18175 Return all structures in memory (as specified by the AIX ABI). 18176 18177`-msvr4-struct-return' 18178 Return structures smaller than 8 bytes in registers (as specified 18179 by the SVR4 ABI). 18180 18181`-mabi=ABI-TYPE' 18182 Extend the current ABI with a particular extension, or remove such 18183 extension. Valid values are `altivec', `no-altivec', `spe', 18184 `no-spe', `ibmlongdouble', `ieeelongdouble', `elfv1', `elfv2'. 18185 18186`-mabi=spe' 18187 Extend the current ABI with SPE ABI extensions. This does not 18188 change the default ABI, instead it adds the SPE ABI extensions to 18189 the current ABI. 18190 18191`-mabi=no-spe' 18192 Disable Book-E SPE ABI extensions for the current ABI. 18193 18194`-mabi=ibmlongdouble' 18195 Change the current ABI to use IBM extended-precision long double. 18196 This is a PowerPC 32-bit SYSV ABI option. 18197 18198`-mabi=ieeelongdouble' 18199 Change the current ABI to use IEEE extended-precision long double. 18200 This is a PowerPC 32-bit Linux ABI option. 18201 18202`-mabi=elfv1' 18203 Change the current ABI to use the ELFv1 ABI. This is the default 18204 ABI for big-endian PowerPC 64-bit Linux. Overriding the default 18205 ABI requires special system support and is likely to fail in 18206 spectacular ways. 18207 18208`-mabi=elfv2' 18209 Change the current ABI to use the ELFv2 ABI. This is the default 18210 ABI for little-endian PowerPC 64-bit Linux. Overriding the 18211 default ABI requires special system support and is likely to fail 18212 in spectacular ways. 18213 18214`-mprototype' 18215`-mno-prototype' 18216 On System V.4 and embedded PowerPC systems assume that all calls to 18217 variable argument functions are properly prototyped. Otherwise, 18218 the compiler must insert an instruction before every 18219 non-prototyped call to set or clear bit 6 of the condition code 18220 register (`CR') to indicate whether floating-point values are 18221 passed in the floating-point registers in case the function takes 18222 variable arguments. With `-mprototype', only calls to prototyped 18223 variable argument functions set or clear the bit. 18224 18225`-msim' 18226 On embedded PowerPC systems, assume that the startup module is 18227 called `sim-crt0.o' and that the standard C libraries are 18228 `libsim.a' and `libc.a'. This is the default for 18229 `powerpc-*-eabisim' configurations. 18230 18231`-mmvme' 18232 On embedded PowerPC systems, assume that the startup module is 18233 called `crt0.o' and the standard C libraries are `libmvme.a' and 18234 `libc.a'. 18235 18236`-mads' 18237 On embedded PowerPC systems, assume that the startup module is 18238 called `crt0.o' and the standard C libraries are `libads.a' and 18239 `libc.a'. 18240 18241`-myellowknife' 18242 On embedded PowerPC systems, assume that the startup module is 18243 called `crt0.o' and the standard C libraries are `libyk.a' and 18244 `libc.a'. 18245 18246`-mvxworks' 18247 On System V.4 and embedded PowerPC systems, specify that you are 18248 compiling for a VxWorks system. 18249 18250`-memb' 18251 On embedded PowerPC systems, set the `PPC_EMB' bit in the ELF flags 18252 header to indicate that `eabi' extended relocations are used. 18253 18254`-meabi' 18255`-mno-eabi' 18256 On System V.4 and embedded PowerPC systems do (do not) adhere to 18257 the Embedded Applications Binary Interface (EABI), which is a set 18258 of modifications to the System V.4 specifications. Selecting 18259 `-meabi' means that the stack is aligned to an 8-byte boundary, a 18260 function `__eabi' is called from `main' to set up the EABI 18261 environment, and the `-msdata' option can use both `r2' and `r13' 18262 to point to two separate small data areas. Selecting `-mno-eabi' 18263 means that the stack is aligned to a 16-byte boundary, no EABI 18264 initialization function is called from `main', and the `-msdata' 18265 option only uses `r13' to point to a single small data area. The 18266 `-meabi' option is on by default if you configured GCC using one 18267 of the `powerpc*-*-eabi*' options. 18268 18269`-msdata=eabi' 18270 On System V.4 and embedded PowerPC systems, put small initialized 18271 `const' global and static data in the `.sdata2' section, which is 18272 pointed to by register `r2'. Put small initialized non-`const' 18273 global and static data in the `.sdata' section, which is pointed 18274 to by register `r13'. Put small uninitialized global and static 18275 data in the `.sbss' section, which is adjacent to the `.sdata' 18276 section. The `-msdata=eabi' option is incompatible with the 18277 `-mrelocatable' option. The `-msdata=eabi' option also sets the 18278 `-memb' option. 18279 18280`-msdata=sysv' 18281 On System V.4 and embedded PowerPC systems, put small global and 18282 static data in the `.sdata' section, which is pointed to by 18283 register `r13'. Put small uninitialized global and static data in 18284 the `.sbss' section, which is adjacent to the `.sdata' section. 18285 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 18286 option. 18287 18288`-msdata=default' 18289`-msdata' 18290 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 18291 compile code the same as `-msdata=eabi', otherwise compile code the 18292 same as `-msdata=sysv'. 18293 18294`-msdata=data' 18295 On System V.4 and embedded PowerPC systems, put small global data 18296 in the `.sdata' section. Put small uninitialized global data in 18297 the `.sbss' section. Do not use register `r13' to address small 18298 data however. This is the default behavior unless other `-msdata' 18299 options are used. 18300 18301`-msdata=none' 18302`-mno-sdata' 18303 On embedded PowerPC systems, put all initialized global and static 18304 data in the `.data' section, and all uninitialized data in the 18305 `.bss' section. 18306 18307`-mblock-move-inline-limit=NUM' 18308 Inline all block moves (such as calls to `memcpy' or structure 18309 copies) less than or equal to NUM bytes. The minimum value for 18310 NUM is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. 18311 The default value is target-specific. 18312 18313`-G NUM' 18314 On embedded PowerPC systems, put global and static items less than 18315 or equal to NUM bytes into the small data or BSS sections instead 18316 of the normal data or BSS section. By default, NUM is 8. The `-G 18317 NUM' switch is also passed to the linker. All modules should be 18318 compiled with the same `-G NUM' value. 18319 18320`-mregnames' 18321`-mno-regnames' 18322 On System V.4 and embedded PowerPC systems do (do not) emit 18323 register names in the assembly language output using symbolic 18324 forms. 18325 18326`-mlongcall' 18327`-mno-longcall' 18328 By default assume that all calls are far away so that a longer and 18329 more expensive calling sequence is required. This is required for 18330 calls farther than 32 megabytes (33,554,432 bytes) from the 18331 current location. A short call is generated if the compiler knows 18332 the call cannot be that far away. This setting can be overridden 18333 by the `shortcall' function attribute, or by `#pragma longcall(0)'. 18334 18335 Some linkers are capable of detecting out-of-range calls and 18336 generating glue code on the fly. On these systems, long calls are 18337 unnecessary and generate slower code. As of this writing, the AIX 18338 linker can do this, as can the GNU linker for PowerPC/64. It is 18339 planned to add this feature to the GNU linker for 32-bit PowerPC 18340 systems as well. 18341 18342 On Darwin/PPC systems, `#pragma longcall' generates `jbsr callee, 18343 L42', plus a "branch island" (glue code). The two target 18344 addresses represent the callee and the branch island. The 18345 Darwin/PPC linker prefers the first address and generates a `bl 18346 callee' if the PPC `bl' instruction reaches the callee directly; 18347 otherwise, the linker generates `bl L42' to call the branch 18348 island. The branch island is appended to the body of the calling 18349 function; it computes the full 32-bit address of the callee and 18350 jumps to it. 18351 18352 On Mach-O (Darwin) systems, this option directs the compiler emit 18353 to the glue for every direct call, and the Darwin linker decides 18354 whether to use or discard it. 18355 18356 In the future, GCC may ignore all longcall specifications when the 18357 linker is known to generate glue. 18358 18359`-mtls-markers' 18360`-mno-tls-markers' 18361 Mark (do not mark) calls to `__tls_get_addr' with a relocation 18362 specifying the function argument. The relocation allows the 18363 linker to reliably associate function call with argument setup 18364 instructions for TLS optimization, which in turn allows GCC to 18365 better schedule the sequence. 18366 18367`-pthread' 18368 Adds support for multithreading with the "pthreads" library. This 18369 option sets flags for both the preprocessor and linker. 18370 18371`-mrecip' 18372`-mno-recip' 18373 This option enables use of the reciprocal estimate and reciprocal 18374 square root estimate instructions with additional Newton-Raphson 18375 steps to increase precision instead of doing a divide or square 18376 root and divide for floating-point arguments. You should use the 18377 `-ffast-math' option when using `-mrecip' (or at least 18378 `-funsafe-math-optimizations', `-finite-math-only', 18379 `-freciprocal-math' and `-fno-trapping-math'). Note that while 18380 the throughput of the sequence is generally higher than the 18381 throughput of the non-reciprocal instruction, the precision of the 18382 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 18383 equals 0.99999994) for reciprocal square roots. 18384 18385`-mrecip=OPT' 18386 This option controls which reciprocal estimate instructions may be 18387 used. OPT is a comma-separated list of options, which may be 18388 preceded by a `!' to invert the option: 18389 18390 `all' 18391 Enable all estimate instructions. 18392 18393 `default' 18394 Enable the default instructions, equivalent to `-mrecip'. 18395 18396 `none' 18397 Disable all estimate instructions, equivalent to `-mno-recip'. 18398 18399 `div' 18400 Enable the reciprocal approximation instructions for both 18401 single and double precision. 18402 18403 `divf' 18404 Enable the single-precision reciprocal approximation 18405 instructions. 18406 18407 `divd' 18408 Enable the double-precision reciprocal approximation 18409 instructions. 18410 18411 `rsqrt' 18412 Enable the reciprocal square root approximation instructions 18413 for both single and double precision. 18414 18415 `rsqrtf' 18416 Enable the single-precision reciprocal square root 18417 approximation instructions. 18418 18419 `rsqrtd' 18420 Enable the double-precision reciprocal square root 18421 approximation instructions. 18422 18423 18424 So, for example, `-mrecip=all,!rsqrtd' enables all of the 18425 reciprocal estimate instructions, except for the `FRSQRTE', 18426 `XSRSQRTEDP', and `XVRSQRTEDP' instructions which handle the 18427 double-precision reciprocal square root calculations. 18428 18429`-mrecip-precision' 18430`-mno-recip-precision' 18431 Assume (do not assume) that the reciprocal estimate instructions 18432 provide higher-precision estimates than is mandated by the PowerPC 18433 ABI. Selecting `-mcpu=power6', `-mcpu=power7' or `-mcpu=power8' 18434 automatically selects `-mrecip-precision'. The double-precision 18435 square root estimate instructions are not generated by default on 18436 low-precision machines, since they do not provide an estimate that 18437 converges after three steps. 18438 18439`-mveclibabi=TYPE' 18440 Specifies the ABI type to use for vectorizing intrinsics using an 18441 external library. The only type supported at present is `mass', 18442 which specifies to use IBM's Mathematical Acceleration Subsystem 18443 (MASS) libraries for vectorizing intrinsics using external 18444 libraries. GCC currently emits calls to `acosd2', `acosf4', 18445 `acoshd2', `acoshf4', `asind2', `asinf4', `asinhd2', `asinhf4', 18446 `atan2d2', `atan2f4', `atand2', `atanf4', `atanhd2', `atanhf4', 18447 `cbrtd2', `cbrtf4', `cosd2', `cosf4', `coshd2', `coshf4', 18448 `erfcd2', `erfcf4', `erfd2', `erff4', `exp2d2', `exp2f4', `expd2', 18449 `expf4', `expm1d2', `expm1f4', `hypotd2', `hypotf4', `lgammad2', 18450 `lgammaf4', `log10d2', `log10f4', `log1pd2', `log1pf4', `log2d2', 18451 `log2f4', `logd2', `logf4', `powd2', `powf4', `sind2', `sinf4', 18452 `sinhd2', `sinhf4', `sqrtd2', `sqrtf4', `tand2', `tanf4', 18453 `tanhd2', and `tanhf4' when generating code for power7. Both 18454 `-ftree-vectorize' and `-funsafe-math-optimizations' must also be 18455 enabled. The MASS libraries must be specified at link time. 18456 18457`-mfriz' 18458`-mno-friz' 18459 Generate (do not generate) the `friz' instruction when the 18460 `-funsafe-math-optimizations' option is used to optimize rounding 18461 of floating-point values to 64-bit integer and back to floating 18462 point. The `friz' instruction does not return the same value if 18463 the floating-point number is too large to fit in an integer. 18464 18465`-mpointers-to-nested-functions' 18466`-mno-pointers-to-nested-functions' 18467 Generate (do not generate) code to load up the static chain 18468 register (`r11') when calling through a pointer on AIX and 64-bit 18469 Linux systems where a function pointer points to a 3-word 18470 descriptor giving the function address, TOC value to be loaded in 18471 register `r2', and static chain value to be loaded in register 18472 `r11'. The `-mpointers-to-nested-functions' is on by default. 18473 You cannot call through pointers to nested functions or pointers 18474 to functions compiled in other languages that use the static chain 18475 if you use `-mno-pointers-to-nested-functions'. 18476 18477`-msave-toc-indirect' 18478`-mno-save-toc-indirect' 18479 Generate (do not generate) code to save the TOC value in the 18480 reserved stack location in the function prologue if the function 18481 calls through a pointer on AIX and 64-bit Linux systems. If the 18482 TOC value is not saved in the prologue, it is saved just before 18483 the call through the pointer. The `-mno-save-toc-indirect' option 18484 is the default. 18485 18486`-mcompat-align-parm' 18487`-mno-compat-align-parm' 18488 Generate (do not generate) code to pass structure parameters with a 18489 maximum alignment of 64 bits, for compatibility with older versions 18490 of GCC. 18491 18492 Older versions of GCC (prior to 4.9.0) incorrectly did not align a 18493 structure parameter on a 128-bit boundary when that structure 18494 contained a member requiring 128-bit alignment. This is corrected 18495 in more recent versions of GCC. This option may be used to 18496 generate code that is compatible with functions compiled with 18497 older versions of GCC. 18498 18499 The `-mno-compat-align-parm' option is the default. 18500 18501 18502File: gcc.info, Node: RX Options, Next: S/390 and zSeries Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 18503 185043.17.38 RX Options 18505------------------ 18506 18507These command-line options are defined for RX targets: 18508 18509`-m64bit-doubles' 18510`-m32bit-doubles' 18511 Make the `double' data type be 64 bits (`-m64bit-doubles') or 32 18512 bits (`-m32bit-doubles') in size. The default is 18513 `-m32bit-doubles'. _Note_ RX floating-point hardware only works 18514 on 32-bit values, which is why the default is `-m32bit-doubles'. 18515 18516`-fpu' 18517`-nofpu' 18518 Enables (`-fpu') or disables (`-nofpu') the use of RX 18519 floating-point hardware. The default is enabled for the RX600 18520 series and disabled for the RX200 series. 18521 18522 Floating-point instructions are only generated for 32-bit 18523 floating-point values, however, so the FPU hardware is not used 18524 for doubles if the `-m64bit-doubles' option is used. 18525 18526 _Note_ If the `-fpu' option is enabled then 18527 `-funsafe-math-optimizations' is also enabled automatically. This 18528 is because the RX FPU instructions are themselves unsafe. 18529 18530`-mcpu=NAME' 18531 Selects the type of RX CPU to be targeted. Currently three types 18532 are supported, the generic `RX600' and `RX200' series hardware and 18533 the specific `RX610' CPU. The default is `RX600'. 18534 18535 The only difference between `RX600' and `RX610' is that the 18536 `RX610' does not support the `MVTIPL' instruction. 18537 18538 The `RX200' series does not have a hardware floating-point unit 18539 and so `-nofpu' is enabled by default when this type is selected. 18540 18541`-mbig-endian-data' 18542`-mlittle-endian-data' 18543 Store data (but not code) in the big-endian format. The default is 18544 `-mlittle-endian-data', i.e. to store data in the little-endian 18545 format. 18546 18547`-msmall-data-limit=N' 18548 Specifies the maximum size in bytes of global and static variables 18549 which can be placed into the small data area. Using the small data 18550 area can lead to smaller and faster code, but the size of area is 18551 limited and it is up to the programmer to ensure that the area does 18552 not overflow. Also when the small data area is used one of the 18553 RX's registers (usually `r13') is reserved for use pointing to this 18554 area, so it is no longer available for use by the compiler. This 18555 could result in slower and/or larger code if variables are pushed 18556 onto the stack instead of being held in this register. 18557 18558 Note, common variables (variables that have not been initialized) 18559 and constants are not placed into the small data area as they are 18560 assigned to other sections in the output executable. 18561 18562 The default value is zero, which disables this feature. Note, this 18563 feature is not enabled by default with higher optimization levels 18564 (`-O2' etc) because of the potentially detrimental effects of 18565 reserving a register. It is up to the programmer to experiment and 18566 discover whether this feature is of benefit to their program. See 18567 the description of the `-mpid' option for a description of how the 18568 actual register to hold the small data area pointer is chosen. 18569 18570`-msim' 18571`-mno-sim' 18572 Use the simulator runtime. The default is to use the libgloss 18573 board-specific runtime. 18574 18575`-mas100-syntax' 18576`-mno-as100-syntax' 18577 When generating assembler output use a syntax that is compatible 18578 with Renesas's AS100 assembler. This syntax can also be handled 18579 by the GAS assembler, but it has some restrictions so it is not 18580 generated by default. 18581 18582`-mmax-constant-size=N' 18583 Specifies the maximum size, in bytes, of a constant that can be 18584 used as an operand in a RX instruction. Although the RX 18585 instruction set does allow constants of up to 4 bytes in length to 18586 be used in instructions, a longer value equates to a longer 18587 instruction. Thus in some circumstances it can be beneficial to 18588 restrict the size of constants that are used in instructions. 18589 Constants that are too big are instead placed into a constant pool 18590 and referenced via register indirection. 18591 18592 The value N can be between 0 and 4. A value of 0 (the default) or 18593 4 means that constants of any size are allowed. 18594 18595`-mrelax' 18596 Enable linker relaxation. Linker relaxation is a process whereby 18597 the linker attempts to reduce the size of a program by finding 18598 shorter versions of various instructions. Disabled by default. 18599 18600`-mint-register=N' 18601 Specify the number of registers to reserve for fast interrupt 18602 handler functions. The value N can be between 0 and 4. A value 18603 of 1 means that register `r13' is reserved for the exclusive use 18604 of fast interrupt handlers. A value of 2 reserves `r13' and 18605 `r12'. A value of 3 reserves `r13', `r12' and `r11', and a value 18606 of 4 reserves `r13' through `r10'. A value of 0, the default, 18607 does not reserve any registers. 18608 18609`-msave-acc-in-interrupts' 18610 Specifies that interrupt handler functions should preserve the 18611 accumulator register. This is only necessary if normal code might 18612 use the accumulator register, for example because it performs 18613 64-bit multiplications. The default is to ignore the accumulator 18614 as this makes the interrupt handlers faster. 18615 18616`-mpid' 18617`-mno-pid' 18618 Enables the generation of position independent data. When enabled 18619 any access to constant data is done via an offset from a base 18620 address held in a register. This allows the location of constant 18621 data to be determined at run time without requiring the executable 18622 to be relocated, which is a benefit to embedded applications with 18623 tight memory constraints. Data that can be modified is not 18624 affected by this option. 18625 18626 Note, using this feature reserves a register, usually `r13', for 18627 the constant data base address. This can result in slower and/or 18628 larger code, especially in complicated functions. 18629 18630 The actual register chosen to hold the constant data base address 18631 depends upon whether the `-msmall-data-limit' and/or the 18632 `-mint-register' command-line options are enabled. Starting with 18633 register `r13' and proceeding downwards, registers are allocated 18634 first to satisfy the requirements of `-mint-register', then 18635 `-mpid' and finally `-msmall-data-limit'. Thus it is possible for 18636 the small data area register to be `r8' if both `-mint-register=4' 18637 and `-mpid' are specified on the command line. 18638 18639 By default this feature is not enabled. The default can be 18640 restored via the `-mno-pid' command-line option. 18641 18642`-mno-warn-multiple-fast-interrupts' 18643`-mwarn-multiple-fast-interrupts' 18644 Prevents GCC from issuing a warning message if it finds more than 18645 one fast interrupt handler when it is compiling a file. The 18646 default is to issue a warning for each extra fast interrupt 18647 handler found, as the RX only supports one such interrupt. 18648 18649 18650 _Note:_ The generic GCC command-line option `-ffixed-REG' has special 18651significance to the RX port when used with the `interrupt' function 18652attribute. This attribute indicates a function intended to process 18653fast interrupts. GCC ensures that it only uses the registers `r10', 18654`r11', `r12' and/or `r13' and only provided that the normal use of the 18655corresponding registers have been restricted via the `-ffixed-REG' or 18656`-mint-register' command-line options. 18657 18658 18659File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RX Options, Up: Submodel Options 18660 186613.17.39 S/390 and zSeries Options 18662--------------------------------- 18663 18664These are the `-m' options defined for the S/390 and zSeries 18665architecture. 18666 18667`-mhard-float' 18668`-msoft-float' 18669 Use (do not use) the hardware floating-point instructions and 18670 registers for floating-point operations. When `-msoft-float' is 18671 specified, functions in `libgcc.a' are used to perform 18672 floating-point operations. When `-mhard-float' is specified, the 18673 compiler generates IEEE floating-point instructions. This is the 18674 default. 18675 18676`-mhard-dfp' 18677`-mno-hard-dfp' 18678 Use (do not use) the hardware decimal-floating-point instructions 18679 for decimal-floating-point operations. When `-mno-hard-dfp' is 18680 specified, functions in `libgcc.a' are used to perform 18681 decimal-floating-point operations. When `-mhard-dfp' is 18682 specified, the compiler generates decimal-floating-point hardware 18683 instructions. This is the default for `-march=z9-ec' or higher. 18684 18685`-mlong-double-64' 18686`-mlong-double-128' 18687 These switches control the size of `long double' type. A size of 18688 64 bits makes the `long double' type equivalent to the `double' 18689 type. This is the default. 18690 18691`-mbackchain' 18692`-mno-backchain' 18693 Store (do not store) the address of the caller's frame as 18694 backchain pointer into the callee's stack frame. A backchain may 18695 be needed to allow debugging using tools that do not understand 18696 DWARF 2 call frame information. When `-mno-packed-stack' is in 18697 effect, the backchain pointer is stored at the bottom of the stack 18698 frame; when `-mpacked-stack' is in effect, the backchain is placed 18699 into the topmost word of the 96/160 byte register save area. 18700 18701 In general, code compiled with `-mbackchain' is call-compatible 18702 with code compiled with `-mmo-backchain'; however, use of the 18703 backchain for debugging purposes usually requires that the whole 18704 binary is built with `-mbackchain'. Note that the combination of 18705 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not 18706 supported. In order to build a linux kernel use `-msoft-float'. 18707 18708 The default is to not maintain the backchain. 18709 18710`-mpacked-stack' 18711`-mno-packed-stack' 18712 Use (do not use) the packed stack layout. When 18713 `-mno-packed-stack' is specified, the compiler uses the all fields 18714 of the 96/160 byte register save area only for their default 18715 purpose; unused fields still take up stack space. When 18716 `-mpacked-stack' is specified, register save slots are densely 18717 packed at the top of the register save area; unused space is 18718 reused for other purposes, allowing for more efficient use of the 18719 available stack space. However, when `-mbackchain' is also in 18720 effect, the topmost word of the save area is always used to store 18721 the backchain, and the return address register is always saved two 18722 words below the backchain. 18723 18724 As long as the stack frame backchain is not used, code generated 18725 with `-mpacked-stack' is call-compatible with code generated with 18726 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 18727 for S/390 or zSeries generated code that uses the stack frame 18728 backchain at run time, not just for debugging purposes. Such code 18729 is not call-compatible with code compiled with `-mpacked-stack'. 18730 Also, note that the combination of `-mbackchain', `-mpacked-stack' 18731 and `-mhard-float' is not supported. In order to build a linux 18732 kernel use `-msoft-float'. 18733 18734 The default is to not use the packed stack layout. 18735 18736`-msmall-exec' 18737`-mno-small-exec' 18738 Generate (or do not generate) code using the `bras' instruction to 18739 do subroutine calls. This only works reliably if the total 18740 executable size does not exceed 64k. The default is to use the 18741 `basr' instruction instead, which does not have this limitation. 18742 18743`-m64' 18744`-m31' 18745 When `-m31' is specified, generate code compliant to the GNU/Linux 18746 for S/390 ABI. When `-m64' is specified, generate code compliant 18747 to the GNU/Linux for zSeries ABI. This allows GCC in particular 18748 to generate 64-bit instructions. For the `s390' targets, the 18749 default is `-m31', while the `s390x' targets default to `-m64'. 18750 18751`-mzarch' 18752`-mesa' 18753 When `-mzarch' is specified, generate code using the instructions 18754 available on z/Architecture. When `-mesa' is specified, generate 18755 code using the instructions available on ESA/390. Note that 18756 `-mesa' is not possible with `-m64'. When generating code 18757 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 18758 When generating code compliant to the GNU/Linux for zSeries ABI, 18759 the default is `-mzarch'. 18760 18761`-mmvcle' 18762`-mno-mvcle' 18763 Generate (or do not generate) code using the `mvcle' instruction 18764 to perform block moves. When `-mno-mvcle' is specified, use a 18765 `mvc' loop instead. This is the default unless optimizing for 18766 size. 18767 18768`-mdebug' 18769`-mno-debug' 18770 Print (or do not print) additional debug information when 18771 compiling. The default is to not print debug information. 18772 18773`-march=CPU-TYPE' 18774 Generate code that runs on CPU-TYPE, which is the name of a system 18775 representing a certain processor type. Possible values for 18776 CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec', `z10', 18777 `z196', `zEC12', and `z13'. When generating code using the 18778 instructions available on z/Architecture, the default is 18779 `-march=z900'. Otherwise, the default is `-march=g5'. 18780 18781`-mtune=CPU-TYPE' 18782 Tune to CPU-TYPE everything applicable about the generated code, 18783 except for the ABI and the set of available instructions. The 18784 list of CPU-TYPE values is the same as for `-march'. The default 18785 is the value used for `-march'. 18786 18787`-mtpf-trace' 18788`-mno-tpf-trace' 18789 Generate code that adds (does not add) in TPF OS specific branches 18790 to trace routines in the operating system. This option is off by 18791 default, even when compiling for the TPF OS. 18792 18793`-mfused-madd' 18794`-mno-fused-madd' 18795 Generate code that uses (does not use) the floating-point multiply 18796 and accumulate instructions. These instructions are generated by 18797 default if hardware floating point is used. 18798 18799`-mwarn-framesize=FRAMESIZE' 18800 Emit a warning if the current function exceeds the given frame 18801 size. Because this is a compile-time check it doesn't need to be 18802 a real problem when the program runs. It is intended to identify 18803 functions that most probably cause a stack overflow. It is useful 18804 to be used in an environment with limited stack size e.g. the 18805 linux kernel. 18806 18807`-mwarn-dynamicstack' 18808 Emit a warning if the function calls `alloca' or uses 18809 dynamically-sized arrays. This is generally a bad idea with a 18810 limited stack size. 18811 18812`-mstack-guard=STACK-GUARD' 18813`-mstack-size=STACK-SIZE' 18814 If these options are provided the S/390 back end emits additional 18815 instructions in the function prologue that trigger a trap if the 18816 stack size is STACK-GUARD bytes above the STACK-SIZE (remember 18817 that the stack on S/390 grows downward). If the STACK-GUARD 18818 option is omitted the smallest power of 2 larger than the frame 18819 size of the compiled function is chosen. These options are 18820 intended to be used to help debugging stack overflow problems. 18821 The additionally emitted code causes only little overhead and 18822 hence can also be used in production-like systems without greater 18823 performance degradation. The given values have to be exact powers 18824 of 2 and STACK-SIZE has to be greater than STACK-GUARD without 18825 exceeding 64k. In order to be efficient the extra code makes the 18826 assumption that the stack starts at an address aligned to the 18827 value given by STACK-SIZE. The STACK-GUARD option can only be 18828 used in conjunction with STACK-SIZE. 18829 18830`-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS' 18831 If the hotpatch option is enabled, a "hot-patching" function 18832 prologue is generated for all functions in the compilation unit. 18833 The funtion label is prepended with the given number of two-byte 18834 NOP instructions (PRE-HALFWORDS, maximum 1000000). After the 18835 label, 2 * POST-HALFWORDS bytes are appended, using the largest 18836 NOP like instructions the architecture allows (maximum 1000000). 18837 18838 If both arguments are zero, hotpatching is disabled. 18839 18840 This option can be overridden for individual functions with the 18841 `hotpatch' attribute. 18842 18843 18844File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 18845 188463.17.40 Score Options 18847--------------------- 18848 18849These options are defined for Score implementations: 18850 18851`-meb' 18852 Compile code for big-endian mode. This is the default. 18853 18854`-mel' 18855 Compile code for little-endian mode. 18856 18857`-mnhwloop' 18858 Disable generation of `bcnz' instructions. 18859 18860`-muls' 18861 Enable generation of unaligned load and store instructions. 18862 18863`-mmac' 18864 Enable the use of multiply-accumulate instructions. Disabled by 18865 default. 18866 18867`-mscore5' 18868 Specify the SCORE5 as the target architecture. 18869 18870`-mscore5u' 18871 Specify the SCORE5U of the target architecture. 18872 18873`-mscore7' 18874 Specify the SCORE7 as the target architecture. This is the default. 18875 18876`-mscore7d' 18877 Specify the SCORE7D as the target architecture. 18878 18879 18880File: gcc.info, Node: SH Options, Next: Solaris 2 Options, Prev: Score Options, Up: Submodel Options 18881 188823.17.41 SH Options 18883------------------ 18884 18885These `-m' options are defined for the SH implementations: 18886 18887`-m1' 18888 Generate code for the SH1. 18889 18890`-m2' 18891 Generate code for the SH2. 18892 18893`-m2e' 18894 Generate code for the SH2e. 18895 18896`-m2a-nofpu' 18897 Generate code for the SH2a without FPU, or for a SH2a-FPU in such 18898 a way that the floating-point unit is not used. 18899 18900`-m2a-single-only' 18901 Generate code for the SH2a-FPU, in such a way that no 18902 double-precision floating-point operations are used. 18903 18904`-m2a-single' 18905 Generate code for the SH2a-FPU assuming the floating-point unit is 18906 in single-precision mode by default. 18907 18908`-m2a' 18909 Generate code for the SH2a-FPU assuming the floating-point unit is 18910 in double-precision mode by default. 18911 18912`-m3' 18913 Generate code for the SH3. 18914 18915`-m3e' 18916 Generate code for the SH3e. 18917 18918`-m4-nofpu' 18919 Generate code for the SH4 without a floating-point unit. 18920 18921`-m4-single-only' 18922 Generate code for the SH4 with a floating-point unit that only 18923 supports single-precision arithmetic. 18924 18925`-m4-single' 18926 Generate code for the SH4 assuming the floating-point unit is in 18927 single-precision mode by default. 18928 18929`-m4' 18930 Generate code for the SH4. 18931 18932`-m4-100' 18933 Generate code for SH4-100. 18934 18935`-m4-100-nofpu' 18936 Generate code for SH4-100 in such a way that the floating-point 18937 unit is not used. 18938 18939`-m4-100-single' 18940 Generate code for SH4-100 assuming the floating-point unit is in 18941 single-precision mode by default. 18942 18943`-m4-100-single-only' 18944 Generate code for SH4-100 in such a way that no double-precision 18945 floating-point operations are used. 18946 18947`-m4-200' 18948 Generate code for SH4-200. 18949 18950`-m4-200-nofpu' 18951 Generate code for SH4-200 without in such a way that the 18952 floating-point unit is not used. 18953 18954`-m4-200-single' 18955 Generate code for SH4-200 assuming the floating-point unit is in 18956 single-precision mode by default. 18957 18958`-m4-200-single-only' 18959 Generate code for SH4-200 in such a way that no double-precision 18960 floating-point operations are used. 18961 18962`-m4-300' 18963 Generate code for SH4-300. 18964 18965`-m4-300-nofpu' 18966 Generate code for SH4-300 without in such a way that the 18967 floating-point unit is not used. 18968 18969`-m4-300-single' 18970 Generate code for SH4-300 in such a way that no double-precision 18971 floating-point operations are used. 18972 18973`-m4-300-single-only' 18974 Generate code for SH4-300 in such a way that no double-precision 18975 floating-point operations are used. 18976 18977`-m4-340' 18978 Generate code for SH4-340 (no MMU, no FPU). 18979 18980`-m4-500' 18981 Generate code for SH4-500 (no FPU). Passes `-isa=sh4-nofpu' to the 18982 assembler. 18983 18984`-m4a-nofpu' 18985 Generate code for the SH4al-dsp, or for a SH4a in such a way that 18986 the floating-point unit is not used. 18987 18988`-m4a-single-only' 18989 Generate code for the SH4a, in such a way that no double-precision 18990 floating-point operations are used. 18991 18992`-m4a-single' 18993 Generate code for the SH4a assuming the floating-point unit is in 18994 single-precision mode by default. 18995 18996`-m4a' 18997 Generate code for the SH4a. 18998 18999`-m4al' 19000 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to 19001 the assembler. GCC doesn't generate any DSP instructions at the 19002 moment. 19003 19004`-m5-32media' 19005 Generate 32-bit code for SHmedia. 19006 19007`-m5-32media-nofpu' 19008 Generate 32-bit code for SHmedia in such a way that the 19009 floating-point unit is not used. 19010 19011`-m5-64media' 19012 Generate 64-bit code for SHmedia. 19013 19014`-m5-64media-nofpu' 19015 Generate 64-bit code for SHmedia in such a way that the 19016 floating-point unit is not used. 19017 19018`-m5-compact' 19019 Generate code for SHcompact. 19020 19021`-m5-compact-nofpu' 19022 Generate code for SHcompact in such a way that the floating-point 19023 unit is not used. 19024 19025`-mb' 19026 Compile code for the processor in big-endian mode. 19027 19028`-ml' 19029 Compile code for the processor in little-endian mode. 19030 19031`-mdalign' 19032 Align doubles at 64-bit boundaries. Note that this changes the 19033 calling conventions, and thus some functions from the standard C 19034 library do not work unless you recompile it first with `-mdalign'. 19035 19036`-mrelax' 19037 Shorten some address references at link time, when possible; uses 19038 the linker option `-relax'. 19039 19040`-mbigtable' 19041 Use 32-bit offsets in `switch' tables. The default is to use 19042 16-bit offsets. 19043 19044`-mbitops' 19045 Enable the use of bit manipulation instructions on SH2A. 19046 19047`-mfmovd' 19048 Enable the use of the instruction `fmovd'. Check `-mdalign' for 19049 alignment constraints. 19050 19051`-mrenesas' 19052 Comply with the calling conventions defined by Renesas. 19053 19054`-mno-renesas' 19055 Comply with the calling conventions defined for GCC before the 19056 Renesas conventions were available. This option is the default 19057 for all targets of the SH toolchain. 19058 19059`-mnomacsave' 19060 Mark the `MAC' register as call-clobbered, even if `-mrenesas' is 19061 given. 19062 19063`-mieee' 19064`-mno-ieee' 19065 Control the IEEE compliance of floating-point comparisons, which 19066 affects the handling of cases where the result of a comparison is 19067 unordered. By default `-mieee' is implicitly enabled. If 19068 `-ffinite-math-only' is enabled `-mno-ieee' is implicitly set, 19069 which results in faster floating-point greater-equal and 19070 less-equal comparisons. The implcit settings can be overridden by 19071 specifying either `-mieee' or `-mno-ieee'. 19072 19073`-minline-ic_invalidate' 19074 Inline code to invalidate instruction cache entries after setting 19075 up nested function trampolines. This option has no effect if 19076 `-musermode' is in effect and the selected code generation option 19077 (e.g. `-m4') does not allow the use of the `icbi' instruction. If 19078 the selected code generation option does not allow the use of the 19079 `icbi' instruction, and `-musermode' is not in effect, the inlined 19080 code manipulates the instruction cache address array directly with 19081 an associative write. This not only requires privileged mode at 19082 run time, but it also fails if the cache line had been mapped via 19083 the TLB and has become unmapped. 19084 19085`-misize' 19086 Dump instruction size and location in the assembly code. 19087 19088`-mpadstruct' 19089 This option is deprecated. It pads structures to multiple of 4 19090 bytes, which is incompatible with the SH ABI. 19091 19092`-matomic-model=MODEL' 19093 Sets the model of atomic operations and additional parameters as a 19094 comma separated list. For details on the atomic built-in 19095 functions see *Note __atomic Builtins::. The following models and 19096 parameters are supported: 19097 19098 `none' 19099 Disable compiler generated atomic sequences and emit library 19100 calls for atomic operations. This is the default if the 19101 target is not `sh*-*-linux*'. 19102 19103 `soft-gusa' 19104 Generate GNU/Linux compatible gUSA software atomic sequences 19105 for the atomic built-in functions. The generated atomic 19106 sequences require additional support from the 19107 interrupt/exception handling code of the system and are only 19108 suitable for SH3* and SH4* single-core systems. This option 19109 is enabled by default when the target is `sh*-*-linux*' and 19110 SH3* or SH4*. When the target is SH4A, this option also 19111 partially utilizes the hardware atomic instructions `movli.l' 19112 and `movco.l' to create more efficient code, unless `strict' 19113 is specified. 19114 19115 `soft-tcb' 19116 Generate software atomic sequences that use a variable in the 19117 thread control block. This is a variation of the gUSA 19118 sequences which can also be used on SH1* and SH2* targets. 19119 The generated atomic sequences require additional support 19120 from the interrupt/exception handling code of the system and 19121 are only suitable for single-core systems. When using this 19122 model, the `gbr-offset=' parameter has to be specified as 19123 well. 19124 19125 `soft-imask' 19126 Generate software atomic sequences that temporarily disable 19127 interrupts by setting `SR.IMASK = 1111'. This model works 19128 only when the program runs in privileged mode and is only 19129 suitable for single-core systems. Additional support from 19130 the interrupt/exception handling code of the system is not 19131 required. This model is enabled by default when the target is 19132 `sh*-*-linux*' and SH1* or SH2*. 19133 19134 `hard-llcs' 19135 Generate hardware atomic sequences using the `movli.l' and 19136 `movco.l' instructions only. This is only available on SH4A 19137 and is suitable for multi-core systems. Since the hardware 19138 instructions support only 32 bit atomic variables access to 8 19139 or 16 bit variables is emulated with 32 bit accesses. Code 19140 compiled with this option is also compatible with other 19141 software atomic model interrupt/exception handling systems if 19142 executed on an SH4A system. Additional support from the 19143 interrupt/exception handling code of the system is not 19144 required for this model. 19145 19146 `gbr-offset=' 19147 This parameter specifies the offset in bytes of the variable 19148 in the thread control block structure that should be used by 19149 the generated atomic sequences when the `soft-tcb' model has 19150 been selected. For other models this parameter is ignored. 19151 The specified value must be an integer multiple of four and 19152 in the range 0-1020. 19153 19154 `strict' 19155 This parameter prevents mixed usage of multiple atomic 19156 models, even if they are compatible, and makes the compiler 19157 generate atomic sequences of the specified model only. 19158 19159 19160`-mtas' 19161 Generate the `tas.b' opcode for `__atomic_test_and_set'. Notice 19162 that depending on the particular hardware and software 19163 configuration this can degrade overall performance due to the 19164 operand cache line flushes that are implied by the `tas.b' 19165 instruction. On multi-core SH4A processors the `tas.b' 19166 instruction must be used with caution since it can result in data 19167 corruption for certain cache configurations. 19168 19169`-mprefergot' 19170 When generating position-independent code, emit function calls 19171 using the Global Offset Table instead of the Procedure Linkage 19172 Table. 19173 19174`-musermode' 19175`-mno-usermode' 19176 Don't allow (allow) the compiler generating privileged mode code. 19177 Specifying `-musermode' also implies `-mno-inline-ic_invalidate' 19178 if the inlined code would not work in user mode. `-musermode' is 19179 the default when the target is `sh*-*-linux*'. If the target is 19180 SH1* or SH2* `-musermode' has no effect, since there is no user 19181 mode. 19182 19183`-multcost=NUMBER' 19184 Set the cost to assume for a multiply insn. 19185 19186`-mdiv=STRATEGY' 19187 Set the division strategy to be used for integer division 19188 operations. For SHmedia STRATEGY can be one of: 19189 19190 `fp' 19191 Performs the operation in floating point. This has a very 19192 high latency, but needs only a few instructions, so it might 19193 be a good choice if your code has enough easily-exploitable 19194 ILP to allow the compiler to schedule the floating-point 19195 instructions together with other instructions. Division by 19196 zero causes a floating-point exception. 19197 19198 `inv' 19199 Uses integer operations to calculate the inverse of the 19200 divisor, and then multiplies the dividend with the inverse. 19201 This strategy allows CSE and hoisting of the inverse 19202 calculation. Division by zero calculates an unspecified 19203 result, but does not trap. 19204 19205 `inv:minlat' 19206 A variant of `inv' where, if no CSE or hoisting opportunities 19207 have been found, or if the entire operation has been hoisted 19208 to the same place, the last stages of the inverse calculation 19209 are intertwined with the final multiply to reduce the overall 19210 latency, at the expense of using a few more instructions, and 19211 thus offering fewer scheduling opportunities with other code. 19212 19213 `call' 19214 Calls a library function that usually implements the 19215 `inv:minlat' strategy. This gives high code density for 19216 `m5-*media-nofpu' compilations. 19217 19218 `call2' 19219 Uses a different entry point of the same library function, 19220 where it assumes that a pointer to a lookup table has already 19221 been set up, which exposes the pointer load to CSE and code 19222 hoisting optimizations. 19223 19224 `inv:call' 19225 `inv:call2' 19226 `inv:fp' 19227 Use the `inv' algorithm for initial code generation, but if 19228 the code stays unoptimized, revert to the `call', `call2', or 19229 `fp' strategies, respectively. Note that the 19230 potentially-trapping side effect of division by zero is 19231 carried by a separate instruction, so it is possible that all 19232 the integer instructions are hoisted out, but the marker for 19233 the side effect stays where it is. A recombination to 19234 floating-point operations or a call is not possible in that 19235 case. 19236 19237 `inv20u' 19238 `inv20l' 19239 Variants of the `inv:minlat' strategy. In the case that the 19240 inverse calculation is not separated from the multiply, they 19241 speed up division where the dividend fits into 20 bits (plus 19242 sign where applicable) by inserting a test to skip a number 19243 of operations in this case; this test slows down the case of 19244 larger dividends. `inv20u' assumes the case of a such a 19245 small dividend to be unlikely, and `inv20l' assumes it to be 19246 likely. 19247 19248 19249 For targets other than SHmedia STRATEGY can be one of: 19250 19251 `call-div1' 19252 Calls a library function that uses the single-step division 19253 instruction `div1' to perform the operation. Division by 19254 zero calculates an unspecified result and does not trap. 19255 This is the default except for SH4, SH2A and SHcompact. 19256 19257 `call-fp' 19258 Calls a library function that performs the operation in 19259 double precision floating point. Division by zero causes a 19260 floating-point exception. This is the default for SHcompact 19261 with FPU. Specifying this for targets that do not have a 19262 double precision FPU defaults to `call-div1'. 19263 19264 `call-table' 19265 Calls a library function that uses a lookup table for small 19266 divisors and the `div1' instruction with case distinction for 19267 larger divisors. Division by zero calculates an unspecified 19268 result and does not trap. This is the default for SH4. 19269 Specifying this for targets that do not have dynamic shift 19270 instructions defaults to `call-div1'. 19271 19272 19273 When a division strategy has not been specified the default 19274 strategy is selected based on the current target. For SH2A the 19275 default strategy is to use the `divs' and `divu' instructions 19276 instead of library function calls. 19277 19278`-maccumulate-outgoing-args' 19279 Reserve space once for outgoing arguments in the function prologue 19280 rather than around each call. Generally beneficial for 19281 performance and size. Also needed for unwinding to avoid changing 19282 the stack frame around conditional code. 19283 19284`-mdivsi3_libfunc=NAME' 19285 Set the name of the library function used for 32-bit signed 19286 division to NAME. This only affects the name used in the `call' 19287 and `inv:call' division strategies, and the compiler still expects 19288 the same sets of input/output/clobbered registers as if this 19289 option were not present. 19290 19291`-mfixed-range=REGISTER-RANGE' 19292 Generate code treating the given register range as fixed registers. 19293 A fixed register is one that the register allocator can not use. 19294 This is useful when compiling kernel code. A register range is 19295 specified as two registers separated by a dash. Multiple register 19296 ranges can be specified separated by a comma. 19297 19298`-mindexed-addressing' 19299 Enable the use of the indexed addressing mode for 19300 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 19301 implement 32-bit wrap-around semantics for the indexed addressing 19302 mode. The architecture allows the implementation of processors 19303 with 64-bit MMU, which the OS could use to get 32-bit addressing, 19304 but since no current hardware implementation supports this or any 19305 other way to make the indexed addressing mode safe to use in the 19306 32-bit ABI, the default is `-mno-indexed-addressing'. 19307 19308`-mgettrcost=NUMBER' 19309 Set the cost assumed for the `gettr' instruction to NUMBER. The 19310 default is 2 if `-mpt-fixed' is in effect, 100 otherwise. 19311 19312`-mpt-fixed' 19313 Assume `pt*' instructions won't trap. This generally generates 19314 better-scheduled code, but is unsafe on current hardware. The 19315 current architecture definition says that `ptabs' and `ptrel' trap 19316 when the target anded with 3 is 3. This has the unintentional 19317 effect of making it unsafe to schedule these instructions before a 19318 branch, or hoist them out of a loop. For example, 19319 `__do_global_ctors', a part of `libgcc' that runs constructors at 19320 program startup, calls functions in a list which is delimited by 19321 -1. With the `-mpt-fixed' option, the `ptabs' is done before 19322 testing against -1. That means that all the constructors run a 19323 bit more quickly, but when the loop comes to the end of the list, 19324 the program crashes because `ptabs' loads -1 into a target 19325 register. 19326 19327 Since this option is unsafe for any hardware implementing the 19328 current architecture specification, the default is 19329 `-mno-pt-fixed'. Unless specified explicitly with `-mgettrcost', 19330 `-mno-pt-fixed' also implies `-mgettrcost=100'; this deters 19331 register allocation from using target registers for storing 19332 ordinary integers. 19333 19334`-minvalid-symbols' 19335 Assume symbols might be invalid. Ordinary function symbols 19336 generated by the compiler are always valid to load with 19337 `movi'/`shori'/`ptabs' or `movi'/`shori'/`ptrel', but with 19338 assembler and/or linker tricks it is possible to generate symbols 19339 that cause `ptabs' or `ptrel' to trap. This option is only 19340 meaningful when `-mno-pt-fixed' is in effect. It prevents 19341 cross-basic-block CSE, hoisting and most scheduling of symbol 19342 loads. The default is `-mno-invalid-symbols'. 19343 19344`-mbranch-cost=NUM' 19345 Assume NUM to be the cost for a branch instruction. Higher numbers 19346 make the compiler try to generate more branch-free code if 19347 possible. If not specified the value is selected depending on the 19348 processor type that is being compiled for. 19349 19350`-mzdcbranch' 19351`-mno-zdcbranch' 19352 Assume (do not assume) that zero displacement conditional branch 19353 instructions `bt' and `bf' are fast. If `-mzdcbranch' is 19354 specified, the compiler prefers zero displacement branch code 19355 sequences. This is enabled by default when generating code for 19356 SH4 and SH4A. It can be explicitly disabled by specifying 19357 `-mno-zdcbranch'. 19358 19359`-mcbranch-force-delay-slot' 19360 Force the usage of delay slots for conditional branches, which 19361 stuffs the delay slot with a `nop' if a suitable instruction can't 19362 be found. By default this option is disabled. It can be enabled 19363 to work around hardware bugs as found in the original SH7055. 19364 19365`-mfused-madd' 19366`-mno-fused-madd' 19367 Generate code that uses (does not use) the floating-point multiply 19368 and accumulate instructions. These instructions are generated by 19369 default if hardware floating point is used. The machine-dependent 19370 `-mfused-madd' option is now mapped to the machine-independent 19371 `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to 19372 `-ffp-contract=off'. 19373 19374`-mfsca' 19375`-mno-fsca' 19376 Allow or disallow the compiler to emit the `fsca' instruction for 19377 sine and cosine approximations. The option `-mfsca' must be used 19378 in combination with `-funsafe-math-optimizations'. It is enabled 19379 by default when generating code for SH4A. Using `-mno-fsca' 19380 disables sine and cosine approximations even if 19381 `-funsafe-math-optimizations' is in effect. 19382 19383`-mfsrra' 19384`-mno-fsrra' 19385 Allow or disallow the compiler to emit the `fsrra' instruction for 19386 reciprocal square root approximations. The option `-mfsrra' must 19387 be used in combination with `-funsafe-math-optimizations' and 19388 `-ffinite-math-only'. It is enabled by default when generating 19389 code for SH4A. Using `-mno-fsrra' disables reciprocal square root 19390 approximations even if `-funsafe-math-optimizations' and 19391 `-ffinite-math-only' are in effect. 19392 19393`-mpretend-cmove' 19394 Prefer zero-displacement conditional branches for conditional move 19395 instruction patterns. This can result in faster code on the SH4 19396 processor. 19397 19398 19399 19400File: gcc.info, Node: Solaris 2 Options, Next: SPARC Options, Prev: SH Options, Up: Submodel Options 19401 194023.17.42 Solaris 2 Options 19403------------------------- 19404 19405These `-m' options are supported on Solaris 2: 19406 19407`-mclear-hwcap' 19408 `-mclear-hwcap' tells the compiler to remove the hardware 19409 capabilities generated by the Solaris assembler. This is only 19410 necessary when object files use ISA extensions not supported by 19411 the current machine, but check at runtime whether or not to use 19412 them. 19413 19414`-mimpure-text' 19415 `-mimpure-text', used in addition to `-shared', tells the compiler 19416 to not pass `-z text' to the linker when linking a shared object. 19417 Using this option, you can link position-dependent code into a 19418 shared object. 19419 19420 `-mimpure-text' suppresses the "relocations remain against 19421 allocatable but non-writable sections" linker error message. 19422 However, the necessary relocations trigger copy-on-write, and the 19423 shared object is not actually shared across processes. Instead of 19424 using `-mimpure-text', you should compile all source code with 19425 `-fpic' or `-fPIC'. 19426 19427 19428 These switches are supported in addition to the above on Solaris 2: 19429 19430`-pthreads' 19431 Add support for multithreading using the POSIX threads library. 19432 This option sets flags for both the preprocessor and linker. This 19433 option does not affect the thread safety of object code produced 19434 by the compiler or that of libraries supplied with it. 19435 19436`-pthread' 19437 This is a synonym for `-pthreads'. 19438 19439 19440File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: Solaris 2 Options, Up: Submodel Options 19441 194423.17.43 SPARC Options 19443--------------------- 19444 19445These `-m' options are supported on the SPARC: 19446 19447`-mno-app-regs' 19448`-mapp-regs' 19449 Specify `-mapp-regs' to generate output using the global registers 19450 2 through 4, which the SPARC SVR4 ABI reserves for applications. 19451 Like the global register 1, each global register 2 through 4 is 19452 then treated as an allocable register that is clobbered by 19453 function calls. This is the default. 19454 19455 To be fully SVR4 ABI-compliant at the cost of some performance 19456 loss, specify `-mno-app-regs'. You should compile libraries and 19457 system software with this option. 19458 19459`-mflat' 19460`-mno-flat' 19461 With `-mflat', the compiler does not generate save/restore 19462 instructions and uses a "flat" or single register window model. 19463 This model is compatible with the regular register window model. 19464 The local registers and the input registers (0-5) are still 19465 treated as "call-saved" registers and are saved on the stack as 19466 needed. 19467 19468 With `-mno-flat' (the default), the compiler generates save/restore 19469 instructions (except for leaf functions). This is the normal 19470 operating mode. 19471 19472`-mfpu' 19473`-mhard-float' 19474 Generate output containing floating-point instructions. This is 19475 the default. 19476 19477`-mno-fpu' 19478`-msoft-float' 19479 Generate output containing library calls for floating point. 19480 *Warning:* the requisite libraries are not available for all SPARC 19481 targets. Normally the facilities of the machine's usual C 19482 compiler are used, but this cannot be done directly in 19483 cross-compilation. You must make your own arrangements to provide 19484 suitable library functions for cross-compilation. The embedded 19485 targets `sparc-*-aout' and `sparclite-*-*' do provide software 19486 floating-point support. 19487 19488 `-msoft-float' changes the calling convention in the output file; 19489 therefore, it is only useful if you compile _all_ of a program with 19490 this option. In particular, you need to compile `libgcc.a', the 19491 library that comes with GCC, with `-msoft-float' in order for this 19492 to work. 19493 19494`-mhard-quad-float' 19495 Generate output containing quad-word (long double) floating-point 19496 instructions. 19497 19498`-msoft-quad-float' 19499 Generate output containing library calls for quad-word (long 19500 double) floating-point instructions. The functions called are 19501 those specified in the SPARC ABI. This is the default. 19502 19503 As of this writing, there are no SPARC implementations that have 19504 hardware support for the quad-word floating-point instructions. 19505 They all invoke a trap handler for one of these instructions, and 19506 then the trap handler emulates the effect of the instruction. 19507 Because of the trap handler overhead, this is much slower than 19508 calling the ABI library routines. Thus the `-msoft-quad-float' 19509 option is the default. 19510 19511`-mno-unaligned-doubles' 19512`-munaligned-doubles' 19513 Assume that doubles have 8-byte alignment. This is the default. 19514 19515 With `-munaligned-doubles', GCC assumes that doubles have 8-byte 19516 alignment only if they are contained in another type, or if they 19517 have an absolute address. Otherwise, it assumes they have 4-byte 19518 alignment. Specifying this option avoids some rare compatibility 19519 problems with code generated by other compilers. It is not the 19520 default because it results in a performance loss, especially for 19521 floating-point code. 19522 19523`-muser-mode' 19524`-mno-user-mode' 19525 Do not generate code that can only run in supervisor mode. This 19526 is relevant only for the `casa' instruction emitted for the LEON3 19527 processor. This is the default. 19528 19529`-mno-faster-structs' 19530`-mfaster-structs' 19531 With `-mfaster-structs', the compiler assumes that structures 19532 should have 8-byte alignment. This enables the use of pairs of 19533 `ldd' and `std' instructions for copies in structure assignment, 19534 in place of twice as many `ld' and `st' pairs. However, the use 19535 of this changed alignment directly violates the SPARC ABI. Thus, 19536 it's intended only for use on targets where the developer 19537 acknowledges that their resulting code is not directly in line with 19538 the rules of the ABI. 19539 19540`-mcpu=CPU_TYPE' 19541 Set the instruction set, register set, and instruction scheduling 19542 parameters for machine type CPU_TYPE. Supported values for 19543 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc', 19544 `leon', `leon3', `leon3v7', `sparclite', `f930', `f934', 19545 `sparclite86x', `sparclet', `tsc701', `v9', `ultrasparc', 19546 `ultrasparc3', `niagara', `niagara2', `niagara3' and `niagara4'. 19547 19548 Native Solaris and GNU/Linux toolchains also support the value 19549 `native', which selects the best architecture option for the host 19550 processor. `-mcpu=native' has no effect if GCC does not recognize 19551 the processor. 19552 19553 Default instruction scheduling parameters are used for values that 19554 select an architecture and not an implementation. These are `v7', 19555 `v8', `sparclite', `sparclet', `v9'. 19556 19557 Here is a list of each supported architecture and their supported 19558 implementations. 19559 19560 v7 19561 cypress, leon3v7 19562 19563 v8 19564 supersparc, hypersparc, leon, leon3 19565 19566 sparclite 19567 f930, f934, sparclite86x 19568 19569 sparclet 19570 tsc701 19571 19572 v9 19573 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4 19574 19575 By default (unless configured otherwise), GCC generates code for 19576 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 19577 the compiler additionally optimizes it for the Cypress CY7C602 19578 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 19579 also appropriate for the older SPARCStation 1, 2, IPX etc. 19580 19581 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 19582 architecture. The only difference from V7 code is that the 19583 compiler emits the integer multiply and integer divide 19584 instructions which exist in SPARC-V8 but not in SPARC-V7. With 19585 `-mcpu=supersparc', the compiler additionally optimizes it for the 19586 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 19587 series. 19588 19589 With `-mcpu=sparclite', GCC generates code for the SPARClite 19590 variant of the SPARC architecture. This adds the integer 19591 multiply, integer divide step and scan (`ffs') instructions which 19592 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 19593 compiler additionally optimizes it for the Fujitsu MB86930 chip, 19594 which is the original SPARClite, with no FPU. With `-mcpu=f934', 19595 the compiler additionally optimizes it for the Fujitsu MB86934 19596 chip, which is the more recent SPARClite with FPU. 19597 19598 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 19599 of the SPARC architecture. This adds the integer multiply, 19600 multiply/accumulate, integer divide step and scan (`ffs') 19601 instructions which exist in SPARClet but not in SPARC-V7. With 19602 `-mcpu=tsc701', the compiler additionally optimizes it for the 19603 TEMIC SPARClet chip. 19604 19605 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 19606 architecture. This adds 64-bit integer and floating-point move 19607 instructions, 3 additional floating-point condition code registers 19608 and conditional move instructions. With `-mcpu=ultrasparc', the 19609 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 19610 chips. With `-mcpu=ultrasparc3', the compiler additionally 19611 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 19612 chips. With `-mcpu=niagara', the compiler additionally optimizes 19613 it for Sun UltraSPARC T1 chips. With `-mcpu=niagara2', the 19614 compiler additionally optimizes it for Sun UltraSPARC T2 chips. 19615 With `-mcpu=niagara3', the compiler additionally optimizes it for 19616 Sun UltraSPARC T3 chips. With `-mcpu=niagara4', the compiler 19617 additionally optimizes it for Sun UltraSPARC T4 chips. 19618 19619`-mtune=CPU_TYPE' 19620 Set the instruction scheduling parameters for machine type 19621 CPU_TYPE, but do not set the instruction set or register set that 19622 the option `-mcpu=CPU_TYPE' does. 19623 19624 The same values for `-mcpu=CPU_TYPE' can be used for 19625 `-mtune=CPU_TYPE', but the only useful values are those that 19626 select a particular CPU implementation. Those are `cypress', 19627 `supersparc', `hypersparc', `leon', `leon3', `leon3v7', `f930', 19628 `f934', `sparclite86x', `tsc701', `ultrasparc', `ultrasparc3', 19629 `niagara', `niagara2', `niagara3' and `niagara4'. With native 19630 Solaris and GNU/Linux toolchains, `native' can also be used. 19631 19632`-mv8plus' 19633`-mno-v8plus' 19634 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 19635 difference from the V8 ABI is that the global and out registers are 19636 considered 64 bits wide. This is enabled by default on Solaris in 19637 32-bit mode for all SPARC-V9 processors. 19638 19639`-mvis' 19640`-mno-vis' 19641 With `-mvis', GCC generates code that takes advantage of the 19642 UltraSPARC Visual Instruction Set extensions. The default is 19643 `-mno-vis'. 19644 19645`-mvis2' 19646`-mno-vis2' 19647 With `-mvis2', GCC generates code that takes advantage of version 19648 2.0 of the UltraSPARC Visual Instruction Set extensions. The 19649 default is `-mvis2' when targeting a cpu that supports such 19650 instructions, such as UltraSPARC-III and later. Setting `-mvis2' 19651 also sets `-mvis'. 19652 19653`-mvis3' 19654`-mno-vis3' 19655 With `-mvis3', GCC generates code that takes advantage of version 19656 3.0 of the UltraSPARC Visual Instruction Set extensions. The 19657 default is `-mvis3' when targeting a cpu that supports such 19658 instructions, such as niagara-3 and later. Setting `-mvis3' also 19659 sets `-mvis2' and `-mvis'. 19660 19661`-mcbcond' 19662`-mno-cbcond' 19663 With `-mcbcond', GCC generates code that takes advantage of 19664 compare-and-branch instructions, as defined in the Sparc 19665 Architecture 2011. The default is `-mcbcond' when targeting a cpu 19666 that supports such instructions, such as niagara-4 and later. 19667 19668`-mpopc' 19669`-mno-popc' 19670 With `-mpopc', GCC generates code that takes advantage of the 19671 UltraSPARC population count instruction. The default is `-mpopc' 19672 when targeting a cpu that supports such instructions, such as 19673 Niagara-2 and later. 19674 19675`-mfmaf' 19676`-mno-fmaf' 19677 With `-mfmaf', GCC generates code that takes advantage of the 19678 UltraSPARC Fused Multiply-Add Floating-point extensions. The 19679 default is `-mfmaf' when targeting a cpu that supports such 19680 instructions, such as Niagara-3 and later. 19681 19682`-mfix-at697f' 19683 Enable the documented workaround for the single erratum of the 19684 Atmel AT697F processor (which corresponds to erratum #13 of the 19685 AT697E processor). 19686 19687`-mfix-ut699' 19688 Enable the documented workarounds for the floating-point errata 19689 and the data cache nullify errata of the UT699 processor. 19690 19691 These `-m' options are supported in addition to the above on SPARC-V9 19692processors in 64-bit environments: 19693 19694`-m32' 19695`-m64' 19696 Generate code for a 32-bit or 64-bit environment. The 32-bit 19697 environment sets int, long and pointer to 32 bits. The 64-bit 19698 environment sets int to 32 bits and long and pointer to 64 bits. 19699 19700`-mcmodel=WHICH' 19701 Set the code model to one of 19702 19703 `medlow' 19704 The Medium/Low code model: 64-bit addresses, programs must be 19705 linked in the low 32 bits of memory. Programs can be 19706 statically or dynamically linked. 19707 19708 `medmid' 19709 The Medium/Middle code model: 64-bit addresses, programs must 19710 be linked in the low 44 bits of memory, the text and data 19711 segments must be less than 2GB in size and the data segment 19712 must be located within 2GB of the text segment. 19713 19714 `medany' 19715 The Medium/Anywhere code model: 64-bit addresses, programs 19716 may be linked anywhere in memory, the text and data segments 19717 must be less than 2GB in size and the data segment must be 19718 located within 2GB of the text segment. 19719 19720 `embmedany' 19721 The Medium/Anywhere code model for embedded systems: 64-bit 19722 addresses, the text and data segments must be less than 2GB in 19723 size, both starting anywhere in memory (determined at link 19724 time). The global register %g4 points to the base of the 19725 data segment. Programs are statically linked and PIC is not 19726 supported. 19727 19728`-mmemory-model=MEM-MODEL' 19729 Set the memory model in force on the processor to one of 19730 19731 `default' 19732 The default memory model for the processor and operating 19733 system. 19734 19735 `rmo' 19736 Relaxed Memory Order 19737 19738 `pso' 19739 Partial Store Order 19740 19741 `tso' 19742 Total Store Order 19743 19744 `sc' 19745 Sequential Consistency 19746 19747 These memory models are formally defined in Appendix D of the 19748 Sparc V9 architecture manual, as set in the processor's 19749 `PSTATE.MM' field. 19750 19751`-mstack-bias' 19752`-mno-stack-bias' 19753 With `-mstack-bias', GCC assumes that the stack pointer, and frame 19754 pointer if present, are offset by -2047 which must be added back 19755 when making stack frame references. This is the default in 64-bit 19756 mode. Otherwise, assume no such offset is present. 19757 19758 19759File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options 19760 197613.17.44 SPU Options 19762------------------- 19763 19764These `-m' options are supported on the SPU: 19765 19766`-mwarn-reloc' 19767`-merror-reloc' 19768 The loader for SPU does not handle dynamic relocations. By 19769 default, GCC gives an error when it generates code that requires a 19770 dynamic relocation. `-mno-error-reloc' disables the error, 19771 `-mwarn-reloc' generates a warning instead. 19772 19773`-msafe-dma' 19774`-munsafe-dma' 19775 Instructions that initiate or test completion of DMA must not be 19776 reordered with respect to loads and stores of the memory that is 19777 being accessed. With `-munsafe-dma' you must use the `volatile' 19778 keyword to protect memory accesses, but that can lead to 19779 inefficient code in places where the memory is known to not 19780 change. Rather than mark the memory as volatile, you can use 19781 `-msafe-dma' to tell the compiler to treat the DMA instructions as 19782 potentially affecting all memory. 19783 19784`-mbranch-hints' 19785 By default, GCC generates a branch hint instruction to avoid 19786 pipeline stalls for always-taken or probably-taken branches. A 19787 hint is not generated closer than 8 instructions away from its 19788 branch. There is little reason to disable them, except for 19789 debugging purposes, or to make an object a little bit smaller. 19790 19791`-msmall-mem' 19792`-mlarge-mem' 19793 By default, GCC generates code assuming that addresses are never 19794 larger than 18 bits. With `-mlarge-mem' code is generated that 19795 assumes a full 32-bit address. 19796 19797`-mstdmain' 19798 By default, GCC links against startup code that assumes the 19799 SPU-style main function interface (which has an unconventional 19800 parameter list). With `-mstdmain', GCC links your program against 19801 startup code that assumes a C99-style interface to `main', 19802 including a local copy of `argv' strings. 19803 19804`-mfixed-range=REGISTER-RANGE' 19805 Generate code treating the given register range as fixed registers. 19806 A fixed register is one that the register allocator cannot use. 19807 This is useful when compiling kernel code. A register range is 19808 specified as two registers separated by a dash. Multiple register 19809 ranges can be specified separated by a comma. 19810 19811`-mea32' 19812`-mea64' 19813 Compile code assuming that pointers to the PPU address space 19814 accessed via the `__ea' named address space qualifier are either 19815 32 or 64 bits wide. The default is 32 bits. As this is an 19816 ABI-changing option, all object code in an executable must be 19817 compiled with the same setting. 19818 19819`-maddress-space-conversion' 19820`-mno-address-space-conversion' 19821 Allow/disallow treating the `__ea' address space as superset of 19822 the generic address space. This enables explicit type casts 19823 between `__ea' and generic pointer as well as implicit conversions 19824 of generic pointers to `__ea' pointers. The default is to allow 19825 address space pointer conversions. 19826 19827`-mcache-size=CACHE-SIZE' 19828 This option controls the version of libgcc that the compiler links 19829 to an executable and selects a software-managed cache for 19830 accessing variables in the `__ea' address space with a particular 19831 cache size. Possible options for CACHE-SIZE are `8', `16', `32', 19832 `64' and `128'. The default cache size is 64KB. 19833 19834`-matomic-updates' 19835`-mno-atomic-updates' 19836 This option controls the version of libgcc that the compiler links 19837 to an executable and selects whether atomic updates to the 19838 software-managed cache of PPU-side variables are used. If you use 19839 atomic updates, changes to a PPU variable from SPU code using the 19840 `__ea' named address space qualifier do not interfere with changes 19841 to other PPU variables residing in the same cache line from PPU 19842 code. If you do not use atomic updates, such interference may 19843 occur; however, writing back cache lines is more efficient. The 19844 default behavior is to use atomic updates. 19845 19846`-mdual-nops' 19847`-mdual-nops=N' 19848 By default, GCC inserts nops to increase dual issue when it expects 19849 it to increase performance. N can be a value from 0 to 10. A 19850 smaller N inserts fewer nops. 10 is the default, 0 is the same as 19851 `-mno-dual-nops'. Disabled with `-Os'. 19852 19853`-mhint-max-nops=N' 19854 Maximum number of nops to insert for a branch hint. A branch hint 19855 must be at least 8 instructions away from the branch it is 19856 affecting. GCC inserts up to N nops to enforce this, otherwise it 19857 does not generate the branch hint. 19858 19859`-mhint-max-distance=N' 19860 The encoding of the branch hint instruction limits the hint to be 19861 within 256 instructions of the branch it is affecting. By 19862 default, GCC makes sure it is within 125. 19863 19864`-msafe-hints' 19865 Work around a hardware bug that causes the SPU to stall 19866 indefinitely. By default, GCC inserts the `hbrp' instruction to 19867 make sure this stall won't happen. 19868 19869 19870 19871File: gcc.info, Node: System V Options, Next: TILE-Gx Options, Prev: SPU Options, Up: Submodel Options 19872 198733.17.45 Options for System V 19874---------------------------- 19875 19876These additional options are available on System V Release 4 for 19877compatibility with other compilers on those systems: 19878 19879`-G' 19880 Create a shared object. It is recommended that `-symbolic' or 19881 `-shared' be used instead. 19882 19883`-Qy' 19884 Identify the versions of each tool used by the compiler, in a 19885 `.ident' assembler directive in the output. 19886 19887`-Qn' 19888 Refrain from adding `.ident' directives to the output file (this is 19889 the default). 19890 19891`-YP,DIRS' 19892 Search the directories DIRS, and no others, for libraries 19893 specified with `-l'. 19894 19895`-Ym,DIR' 19896 Look in the directory DIR to find the M4 preprocessor. The 19897 assembler uses this option. 19898 19899 19900File: gcc.info, Node: TILE-Gx Options, Next: TILEPro Options, Prev: System V Options, Up: Submodel Options 19901 199023.17.46 TILE-Gx Options 19903----------------------- 19904 19905These `-m' options are supported on the TILE-Gx: 19906 19907`-mcmodel=small' 19908 Generate code for the small model. The distance for direct calls 19909 is limited to 500M in either direction. PC-relative addresses are 19910 32 bits. Absolute addresses support the full address range. 19911 19912`-mcmodel=large' 19913 Generate code for the large model. There is no limitation on call 19914 distance, pc-relative addresses, or absolute addresses. 19915 19916`-mcpu=NAME' 19917 Selects the type of CPU to be targeted. Currently the only 19918 supported type is `tilegx'. 19919 19920`-m32' 19921`-m64' 19922 Generate code for a 32-bit or 64-bit environment. The 32-bit 19923 environment sets int, long, and pointer to 32 bits. The 64-bit 19924 environment sets int to 32 bits and long and pointer to 64 bits. 19925 19926`-mbig-endian' 19927`-mlittle-endian' 19928 Generate code in big/little endian mode, respectively. 19929 19930 19931File: gcc.info, Node: TILEPro Options, Next: V850 Options, Prev: TILE-Gx Options, Up: Submodel Options 19932 199333.17.47 TILEPro Options 19934----------------------- 19935 19936These `-m' options are supported on the TILEPro: 19937 19938`-mcpu=NAME' 19939 Selects the type of CPU to be targeted. Currently the only 19940 supported type is `tilepro'. 19941 19942`-m32' 19943 Generate code for a 32-bit environment, which sets int, long, and 19944 pointer to 32 bits. This is the only supported behavior so the 19945 flag is essentially ignored. 19946 19947 19948File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: TILEPro Options, Up: Submodel Options 19949 199503.17.48 V850 Options 19951-------------------- 19952 19953These `-m' options are defined for V850 implementations: 19954 19955`-mlong-calls' 19956`-mno-long-calls' 19957 Treat all calls as being far away (near). If calls are assumed to 19958 be far away, the compiler always loads the function's address into 19959 a register, and calls indirect through the pointer. 19960 19961`-mno-ep' 19962`-mep' 19963 Do not optimize (do optimize) basic blocks that use the same index 19964 pointer 4 or more times to copy pointer into the `ep' register, and 19965 use the shorter `sld' and `sst' instructions. The `-mep' option 19966 is on by default if you optimize. 19967 19968`-mno-prolog-function' 19969`-mprolog-function' 19970 Do not use (do use) external functions to save and restore 19971 registers at the prologue and epilogue of a function. The 19972 external functions are slower, but use less code space if more 19973 than one function saves the same number of registers. The 19974 `-mprolog-function' option is on by default if you optimize. 19975 19976`-mspace' 19977 Try to make the code as small as possible. At present, this just 19978 turns on the `-mep' and `-mprolog-function' options. 19979 19980`-mtda=N' 19981 Put static or global variables whose size is N bytes or less into 19982 the tiny data area that register `ep' points to. The tiny data 19983 area can hold up to 256 bytes in total (128 bytes for byte 19984 references). 19985 19986`-msda=N' 19987 Put static or global variables whose size is N bytes or less into 19988 the small data area that register `gp' points to. The small data 19989 area can hold up to 64 kilobytes. 19990 19991`-mzda=N' 19992 Put static or global variables whose size is N bytes or less into 19993 the first 32 kilobytes of memory. 19994 19995`-mv850' 19996 Specify that the target processor is the V850. 19997 19998`-mv850e3v5' 19999 Specify that the target processor is the V850E3V5. The 20000 preprocessor constant `__v850e3v5__' is defined if this option is 20001 used. 20002 20003`-mv850e2v4' 20004 Specify that the target processor is the V850E3V5. This is an 20005 alias for the `-mv850e3v5' option. 20006 20007`-mv850e2v3' 20008 Specify that the target processor is the V850E2V3. The 20009 preprocessor constant `__v850e2v3__' is defined if this option is 20010 used. 20011 20012`-mv850e2' 20013 Specify that the target processor is the V850E2. The preprocessor 20014 constant `__v850e2__' is defined if this option is used. 20015 20016`-mv850e1' 20017 Specify that the target processor is the V850E1. The preprocessor 20018 constants `__v850e1__' and `__v850e__' are defined if this option 20019 is used. 20020 20021`-mv850es' 20022 Specify that the target processor is the V850ES. This is an alias 20023 for the `-mv850e1' option. 20024 20025`-mv850e' 20026 Specify that the target processor is the V850E. The preprocessor 20027 constant `__v850e__' is defined if this option is used. 20028 20029 If neither `-mv850' nor `-mv850e' nor `-mv850e1' nor `-mv850e2' 20030 nor `-mv850e2v3' nor `-mv850e3v5' are defined then a default 20031 target processor is chosen and the relevant `__v850*__' 20032 preprocessor constant is defined. 20033 20034 The preprocessor constants `__v850' and `__v851__' are always 20035 defined, regardless of which processor variant is the target. 20036 20037`-mdisable-callt' 20038`-mno-disable-callt' 20039 This option suppresses generation of the `CALLT' instruction for 20040 the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the 20041 v850 architecture. 20042 20043 This option is enabled by default when the RH850 ABI is in use 20044 (see `-mrh850-abi'), and disabled by default when the GCC ABI is 20045 in use. If `CALLT' instructions are being generated then the C 20046 preprocessor symbol `__V850_CALLT__' is defined. 20047 20048`-mrelax' 20049`-mno-relax' 20050 Pass on (or do not pass on) the `-mrelax' command-line option to 20051 the assembler. 20052 20053`-mlong-jumps' 20054`-mno-long-jumps' 20055 Disable (or re-enable) the generation of PC-relative jump 20056 instructions. 20057 20058`-msoft-float' 20059`-mhard-float' 20060 Disable (or re-enable) the generation of hardware floating point 20061 instructions. This option is only significant when the target 20062 architecture is `V850E2V3' or higher. If hardware floating point 20063 instructions are being generated then the C preprocessor symbol 20064 `__FPU_OK__' is defined, otherwise the symbol `__NO_FPU__' is 20065 defined. 20066 20067`-mloop' 20068 Enables the use of the e3v5 LOOP instruction. The use of this 20069 instruction is not enabled by default when the e3v5 architecture is 20070 selected because its use is still experimental. 20071 20072`-mrh850-abi' 20073`-mghs' 20074 Enables support for the RH850 version of the V850 ABI. This is the 20075 default. With this version of the ABI the following rules apply: 20076 20077 * Integer sized structures and unions are returned via a memory 20078 pointer rather than a register. 20079 20080 * Large structures and unions (more than 8 bytes in size) are 20081 passed by value. 20082 20083 * Functions are aligned to 16-bit boundaries. 20084 20085 * The `-m8byte-align' command-line option is supported. 20086 20087 * The `-mdisable-callt' command-line option is enabled by 20088 default. The `-mno-disable-callt' command-line option is not 20089 supported. 20090 20091 When this version of the ABI is enabled the C preprocessor symbol 20092 `__V850_RH850_ABI__' is defined. 20093 20094`-mgcc-abi' 20095 Enables support for the old GCC version of the V850 ABI. With this 20096 version of the ABI the following rules apply: 20097 20098 * Integer sized structures and unions are returned in register 20099 `r10'. 20100 20101 * Large structures and unions (more than 8 bytes in size) are 20102 passed by reference. 20103 20104 * Functions are aligned to 32-bit boundaries, unless optimizing 20105 for size. 20106 20107 * The `-m8byte-align' command-line option is not supported. 20108 20109 * The `-mdisable-callt' command-line option is supported but not 20110 enabled by default. 20111 20112 When this version of the ABI is enabled the C preprocessor symbol 20113 `__V850_GCC_ABI__' is defined. 20114 20115`-m8byte-align' 20116`-mno-8byte-align' 20117 Enables support for `double' and `long long' types to be aligned 20118 on 8-byte boundaries. The default is to restrict the alignment of 20119 all objects to at most 4-bytes. When `-m8byte-align' is in effect 20120 the C preprocessor symbol `__V850_8BYTE_ALIGN__' is defined. 20121 20122`-mbig-switch' 20123 Generate code suitable for big switch tables. Use this option 20124 only if the assembler/linker complain about out of range branches 20125 within a switch table. 20126 20127`-mapp-regs' 20128 This option causes r2 and r5 to be used in the code generated by 20129 the compiler. This setting is the default. 20130 20131`-mno-app-regs' 20132 This option causes r2 and r5 to be treated as fixed registers. 20133 20134 20135 20136File: gcc.info, Node: VAX Options, Next: Visium Options, Prev: V850 Options, Up: Submodel Options 20137 201383.17.49 VAX Options 20139------------------- 20140 20141These `-m' options are defined for the VAX: 20142 20143`-munix' 20144 Do not output certain jump instructions (`aobleq' and so on) that 20145 the Unix assembler for the VAX cannot handle across long ranges. 20146 20147`-mgnu' 20148 Do output those jump instructions, on the assumption that the GNU 20149 assembler is being used. 20150 20151`-mg' 20152 Output code for G-format floating-point numbers instead of 20153 D-format. 20154 20155 20156File: gcc.info, Node: Visium Options, Next: VMS Options, Prev: VAX Options, Up: Submodel Options 20157 201583.17.50 Visium Options 20159---------------------- 20160 20161`-mdebug' 20162 A program which performs file I/O and is destined to run on an MCM 20163 target should be linked with this option. It causes the libraries 20164 libc.a and libdebug.a to be linked. The program should be run on 20165 the target under the control of the GDB remote debugging stub. 20166 20167`-msim' 20168 A program which performs file I/O and is destined to run on the 20169 simulator should be linked with option. This causes libraries 20170 libc.a and libsim.a to be linked. 20171 20172`-mfpu' 20173`-mhard-float' 20174 Generate code containing floating-point instructions. This is the 20175 default. 20176 20177`-mno-fpu' 20178`-msoft-float' 20179 Generate code containing library calls for floating-point. 20180 20181 `-msoft-float' changes the calling convention in the output file; 20182 therefore, it is only useful if you compile _all_ of a program with 20183 this option. In particular, you need to compile `libgcc.a', the 20184 library that comes with GCC, with `-msoft-float' in order for this 20185 to work. 20186 20187`-mcpu=CPU_TYPE' 20188 Set the instruction set, register set, and instruction scheduling 20189 parameters for machine type CPU_TYPE. Supported values for 20190 CPU_TYPE are `mcm', `gr5' and `gr6'. 20191 20192 `mcm' is a synonym of `gr5' present for backward compatibility. 20193 20194 By default (unless configured otherwise), GCC generates code for 20195 the GR5 variant of the Visium architecture. 20196 20197 With `-mcpu=gr6', GCC generates code for the GR6 variant of the 20198 Visium architecture. The only difference from GR5 code is that 20199 the compiler will generate block move instructions. 20200 20201`-mtune=CPU_TYPE' 20202 Set the instruction scheduling parameters for machine type 20203 CPU_TYPE, but do not set the instruction set or register set that 20204 the option `-mcpu=CPU_TYPE' would. 20205 20206`-msv-mode' 20207 Generate code for the supervisor mode, where there are no 20208 restrictions on the access to general registers. This is the 20209 default. 20210 20211`-muser-mode' 20212 Generate code for the user mode, where the access to some general 20213 registers is forbidden: on the GR5, registers r24 to r31 cannot be 20214 accessed in this mode; on the GR6, only registers r29 to r31 are 20215 affected. 20216 20217 20218File: gcc.info, Node: VMS Options, Next: VxWorks Options, Prev: Visium Options, Up: Submodel Options 20219 202203.17.51 VMS Options 20221------------------- 20222 20223These `-m' options are defined for the VMS implementations: 20224 20225`-mvms-return-codes' 20226 Return VMS condition codes from `main'. The default is to return 20227 POSIX-style condition (e.g. error) codes. 20228 20229`-mdebug-main=PREFIX' 20230 Flag the first routine whose name starts with PREFIX as the main 20231 routine for the debugger. 20232 20233`-mmalloc64' 20234 Default to 64-bit memory allocation routines. 20235 20236`-mpointer-size=SIZE' 20237 Set the default size of pointers. Possible options for SIZE are 20238 `32' or `short' for 32 bit pointers, `64' or `long' for 64 bit 20239 pointers, and `no' for supporting only 32 bit pointers. The later 20240 option disables `pragma pointer_size'. 20241 20242 20243File: gcc.info, Node: VxWorks Options, Next: x86 Options, Prev: VMS Options, Up: Submodel Options 20244 202453.17.52 VxWorks Options 20246----------------------- 20247 20248The options in this section are defined for all VxWorks targets. 20249Options specific to the target hardware are listed with the other 20250options for that target. 20251 20252`-mrtp' 20253 GCC can generate code for both VxWorks kernels and real time 20254 processes (RTPs). This option switches from the former to the 20255 latter. It also defines the preprocessor macro `__RTP__'. 20256 20257`-non-static' 20258 Link an RTP executable against shared libraries rather than static 20259 libraries. The options `-static' and `-shared' can also be used 20260 for RTPs (*note Link Options::); `-static' is the default. 20261 20262`-Bstatic' 20263`-Bdynamic' 20264 These options are passed down to the linker. They are defined for 20265 compatibility with Diab. 20266 20267`-Xbind-lazy' 20268 Enable lazy binding of function calls. This option is equivalent 20269 to `-Wl,-z,now' and is defined for compatibility with Diab. 20270 20271`-Xbind-now' 20272 Disable lazy binding of function calls. This option is the 20273 default and is defined for compatibility with Diab. 20274 20275 20276File: gcc.info, Node: x86 Options, Next: x86 Windows Options, Prev: VxWorks Options, Up: Submodel Options 20277 202783.17.53 x86 Options 20279------------------- 20280 20281These `-m' options are defined for the x86 family of computers. 20282 20283`-march=CPU-TYPE' 20284 Generate instructions for the machine type CPU-TYPE. In contrast 20285 to `-mtune=CPU-TYPE', which merely tunes the generated code for 20286 the specified CPU-TYPE, `-march=CPU-TYPE' allows GCC to generate 20287 code that may not run at all on processors other than the one 20288 indicated. Specifying `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 20289 20290 The choices for CPU-TYPE are: 20291 20292 `native' 20293 This selects the CPU to generate code for at compilation time 20294 by determining the processor type of the compiling machine. 20295 Using `-march=native' enables all instruction subsets 20296 supported by the local machine (hence the result might not 20297 run on different machines). Using `-mtune=native' produces 20298 code optimized for the local machine under the constraints of 20299 the selected instruction set. 20300 20301 `i386' 20302 Original Intel i386 CPU. 20303 20304 `i486' 20305 Intel i486 CPU. (No scheduling is implemented for this chip.) 20306 20307 `i586' 20308 `pentium' 20309 Intel Pentium CPU with no MMX support. 20310 20311 `pentium-mmx' 20312 Intel Pentium MMX CPU, based on Pentium core with MMX 20313 instruction set support. 20314 20315 `pentiumpro' 20316 Intel Pentium Pro CPU. 20317 20318 `i686' 20319 When used with `-march', the Pentium Pro instruction set is 20320 used, so the code runs on all i686 family chips. When used 20321 with `-mtune', it has the same meaning as `generic'. 20322 20323 `pentium2' 20324 Intel Pentium II CPU, based on Pentium Pro core with MMX 20325 instruction set support. 20326 20327 `pentium3' 20328 `pentium3m' 20329 Intel Pentium III CPU, based on Pentium Pro core with MMX and 20330 SSE instruction set support. 20331 20332 `pentium-m' 20333 Intel Pentium M; low-power version of Intel Pentium III CPU 20334 with MMX, SSE and SSE2 instruction set support. Used by 20335 Centrino notebooks. 20336 20337 `pentium4' 20338 `pentium4m' 20339 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set 20340 support. 20341 20342 `prescott' 20343 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 20344 and SSE3 instruction set support. 20345 20346 `nocona' 20347 Improved version of Intel Pentium 4 CPU with 64-bit 20348 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 20349 20350 `core2' 20351 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 20352 and SSSE3 instruction set support. 20353 20354 `nehalem' 20355 Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, 20356 SSE3, SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set 20357 support. 20358 20359 `westmere' 20360 Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2, 20361 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL 20362 instruction set support. 20363 20364 `sandybridge' 20365 Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, 20366 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and 20367 PCLMUL instruction set support. 20368 20369 `ivybridge' 20370 Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, 20371 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, 20372 FSGSBASE, RDRND and F16C instruction set support. 20373 20374 `haswell' 20375 Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, 20376 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, 20377 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction 20378 set support. 20379 20380 `broadwell' 20381 Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE, 20382 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, 20383 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX 20384 and PREFETCHW instruction set support. 20385 20386 `bonnell' 20387 Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, 20388 SSE2, SSE3 and SSSE3 instruction set support. 20389 20390 `silvermont' 20391 Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, 20392 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and 20393 RDRND instruction set support. 20394 20395 `knl' 20396 Intel Knight's Landing CPU with 64-bit extensions, MOVBE, 20397 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, 20398 AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, 20399 RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER and 20400 AVX512CD instruction set support. 20401 20402 `k6' 20403 AMD K6 CPU with MMX instruction set support. 20404 20405 `k6-2' 20406 `k6-3' 20407 Improved versions of AMD K6 CPU with MMX and 3DNow! 20408 instruction set support. 20409 20410 `athlon' 20411 `athlon-tbird' 20412 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE 20413 prefetch instructions support. 20414 20415 `athlon-4' 20416 `athlon-xp' 20417 `athlon-mp' 20418 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and 20419 full SSE instruction set support. 20420 20421 `k8' 20422 `opteron' 20423 `athlon64' 20424 `athlon-fx' 20425 Processors based on the AMD K8 core with x86-64 instruction 20426 set support, including the AMD Opteron, Athlon 64, and Athlon 20427 64 FX processors. (This supersets MMX, SSE, SSE2, 3DNow!, 20428 enhanced 3DNow! and 64-bit instruction set extensions.) 20429 20430 `k8-sse3' 20431 `opteron-sse3' 20432 `athlon64-sse3' 20433 Improved versions of AMD K8 cores with SSE3 instruction set 20434 support. 20435 20436 `amdfam10' 20437 `barcelona' 20438 CPUs based on AMD Family 10h cores with x86-64 instruction 20439 set support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 20440 3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set 20441 extensions.) 20442 20443 `bdver1' 20444 CPUs based on AMD Family 15h cores with x86-64 instruction 20445 set support. (This supersets FMA4, AVX, XOP, LWP, AES, 20446 PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, 20447 SSE4.2, ABM and 64-bit instruction set extensions.) 20448 20449 `bdver2' 20450 AMD Family 15h core based CPUs with x86-64 instruction set 20451 support. (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, 20452 XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, 20453 SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set 20454 extensions.) 20455 20456 `bdver3' 20457 AMD Family 15h core based CPUs with x86-64 instruction set 20458 support. (This supersets BMI, TBM, F16C, FMA, FMA4, 20459 FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, 20460 SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit 20461 instruction set extensions. 20462 20463 `bdver4' 20464 AMD Family 15h core based CPUs with x86-64 instruction set 20465 support. (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4, 20466 FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, 20467 MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 20468 64-bit instruction set extensions. 20469 20470 `btver1' 20471 CPUs based on AMD Family 14h cores with x86-64 instruction 20472 set support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, 20473 SSE4A, CX16, ABM and 64-bit instruction set extensions.) 20474 20475 `btver2' 20476 CPUs based on AMD Family 16h cores with x86-64 instruction 20477 set support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, 20478 AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, 20479 SSE, MMX and 64-bit instruction set extensions. 20480 20481 `winchip-c6' 20482 IDT WinChip C6 CPU, dealt in same way as i486 with additional 20483 MMX instruction set support. 20484 20485 `winchip2' 20486 IDT WinChip 2 CPU, dealt in same way as i486 with additional 20487 MMX and 3DNow! instruction set support. 20488 20489 `c3' 20490 VIA C3 CPU with MMX and 3DNow! instruction set support. (No 20491 scheduling is implemented for this chip.) 20492 20493 `c3-2' 20494 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set 20495 support. (No scheduling is implemented for this chip.) 20496 20497 `geode' 20498 AMD Geode embedded processor with MMX and 3DNow! instruction 20499 set support. 20500 20501`-mtune=CPU-TYPE' 20502 Tune to CPU-TYPE everything applicable about the generated code, 20503 except for the ABI and the set of available instructions. While 20504 picking a specific CPU-TYPE schedules things appropriately for 20505 that particular chip, the compiler does not generate any code that 20506 cannot run on the default machine type unless you use a 20507 `-march=CPU-TYPE' option. For example, if GCC is configured for 20508 i686-pc-linux-gnu then `-mtune=pentium4' generates code that is 20509 tuned for Pentium 4 but still runs on i686 machines. 20510 20511 The choices for CPU-TYPE are the same as for `-march'. In 20512 addition, `-mtune' supports 2 extra choices for CPU-TYPE: 20513 20514 `generic' 20515 Produce code optimized for the most common IA32/AMD64/EM64T 20516 processors. If you know the CPU on which your code will run, 20517 then you should use the corresponding `-mtune' or `-march' 20518 option instead of `-mtune=generic'. But, if you do not know 20519 exactly what CPU users of your application will have, then 20520 you should use this option. 20521 20522 As new processors are deployed in the marketplace, the 20523 behavior of this option will change. Therefore, if you 20524 upgrade to a newer version of GCC, code generation controlled 20525 by this option will change to reflect the processors that are 20526 most common at the time that version of GCC is released. 20527 20528 There is no `-march=generic' option because `-march' 20529 indicates the instruction set the compiler can use, and there 20530 is no generic instruction set applicable to all processors. 20531 In contrast, `-mtune' indicates the processor (or, in this 20532 case, collection of processors) for which the code is 20533 optimized. 20534 20535 `intel' 20536 Produce code optimized for the most current Intel processors, 20537 which are Haswell and Silvermont for this version of GCC. If 20538 you know the CPU on which your code will run, then you should 20539 use the corresponding `-mtune' or `-march' option instead of 20540 `-mtune=intel'. But, if you want your application performs 20541 better on both Haswell and Silvermont, then you should use 20542 this option. 20543 20544 As new Intel processors are deployed in the marketplace, the 20545 behavior of this option will change. Therefore, if you 20546 upgrade to a newer version of GCC, code generation controlled 20547 by this option will change to reflect the most current Intel 20548 processors at the time that version of GCC is released. 20549 20550 There is no `-march=intel' option because `-march' indicates 20551 the instruction set the compiler can use, and there is no 20552 common instruction set applicable to all processors. In 20553 contrast, `-mtune' indicates the processor (or, in this case, 20554 collection of processors) for which the code is optimized. 20555 20556`-mcpu=CPU-TYPE' 20557 A deprecated synonym for `-mtune'. 20558 20559`-mfpmath=UNIT' 20560 Generate floating-point arithmetic for selected unit UNIT. The 20561 choices for UNIT are: 20562 20563 `387' 20564 Use the standard 387 floating-point coprocessor present on 20565 the majority of chips and emulated otherwise. Code compiled 20566 with this option runs almost everywhere. The temporary 20567 results are computed in 80-bit precision instead of the 20568 precision specified by the type, resulting in slightly 20569 different results compared to most of other chips. See 20570 `-ffloat-store' for more detailed description. 20571 20572 This is the default choice for x86-32 targets. 20573 20574 `sse' 20575 Use scalar floating-point instructions present in the SSE 20576 instruction set. This instruction set is supported by 20577 Pentium III and newer chips, and in the AMD line by Athlon-4, 20578 Athlon XP and Athlon MP chips. The earlier version of the SSE 20579 instruction set supports only single-precision arithmetic, 20580 thus the double and extended-precision arithmetic are still 20581 done using 387. A later version, present only in Pentium 4 20582 and AMD x86-64 chips, supports double-precision arithmetic 20583 too. 20584 20585 For the x86-32 compiler, you must use `-march=CPU-TYPE', 20586 `-msse' or `-msse2' switches to enable SSE extensions and 20587 make this option effective. For the x86-64 compiler, these 20588 extensions are enabled by default. 20589 20590 The resulting code should be considerably faster in the 20591 majority of cases and avoid the numerical instability 20592 problems of 387 code, but may break some existing code that 20593 expects temporaries to be 80 bits. 20594 20595 This is the default choice for the x86-64 compiler. 20596 20597 `sse,387' 20598 `sse+387' 20599 `both' 20600 Attempt to utilize both instruction sets at once. This 20601 effectively doubles the amount of available registers, and on 20602 chips with separate execution units for 387 and SSE the 20603 execution resources too. Use this option with care, as it is 20604 still experimental, because the GCC register allocator does 20605 not model separate functional units well, resulting in 20606 unstable performance. 20607 20608`-masm=DIALECT' 20609 Output assembly instructions using selected DIALECT. Also affects 20610 which dialect is used for basic `asm' (*note Basic Asm::) and 20611 extended `asm' (*note Extended Asm::). Supported choices (in 20612 dialect order) are `att' or `intel'. The default is `att'. Darwin 20613 does not support `intel'. 20614 20615`-mieee-fp' 20616`-mno-ieee-fp' 20617 Control whether or not the compiler uses IEEE floating-point 20618 comparisons. These correctly handle the case where the result of a 20619 comparison is unordered. 20620 20621`-msoft-float' 20622 Generate output containing library calls for floating point. 20623 20624 *Warning:* the requisite libraries are not part of GCC. Normally 20625 the facilities of the machine's usual C compiler are used, but 20626 this can't be done directly in cross-compilation. You must make 20627 your own arrangements to provide suitable library functions for 20628 cross-compilation. 20629 20630 On machines where a function returns floating-point results in the 20631 80387 register stack, some floating-point opcodes may be emitted 20632 even if `-msoft-float' is used. 20633 20634`-mno-fp-ret-in-387' 20635 Do not use the FPU registers for return values of functions. 20636 20637 The usual calling convention has functions return values of types 20638 `float' and `double' in an FPU register, even if there is no FPU. 20639 The idea is that the operating system should emulate an FPU. 20640 20641 The option `-mno-fp-ret-in-387' causes such values to be returned 20642 in ordinary CPU registers instead. 20643 20644`-mno-fancy-math-387' 20645 Some 387 emulators do not support the `sin', `cos' and `sqrt' 20646 instructions for the 387. Specify this option to avoid generating 20647 those instructions. This option is the default on OpenBSD and 20648 NetBSD. This option is overridden when `-march' indicates that 20649 the target CPU always has an FPU and so the instruction does not 20650 need emulation. These instructions are not generated unless you 20651 also use the `-funsafe-math-optimizations' switch. 20652 20653`-malign-double' 20654`-mno-align-double' 20655 Control whether GCC aligns `double', `long double', and `long 20656 long' variables on a two-word boundary or a one-word boundary. 20657 Aligning `double' variables on a two-word boundary produces code 20658 that runs somewhat faster on a Pentium at the expense of more 20659 memory. 20660 20661 On x86-64, `-malign-double' is enabled by default. 20662 20663 *Warning:* if you use the `-malign-double' switch, structures 20664 containing the above types are aligned differently than the 20665 published application binary interface specifications for the 20666 x86-32 and are not binary compatible with structures in code 20667 compiled without that switch. 20668 20669`-m96bit-long-double' 20670`-m128bit-long-double' 20671 These switches control the size of `long double' type. The x86-32 20672 application binary interface specifies the size to be 96 bits, so 20673 `-m96bit-long-double' is the default in 32-bit mode. 20674 20675 Modern architectures (Pentium and newer) prefer `long double' to 20676 be aligned to an 8- or 16-byte boundary. In arrays or structures 20677 conforming to the ABI, this is not possible. So specifying 20678 `-m128bit-long-double' aligns `long double' to a 16-byte boundary 20679 by padding the `long double' with an additional 32-bit zero. 20680 20681 In the x86-64 compiler, `-m128bit-long-double' is the default 20682 choice as its ABI specifies that `long double' is aligned on 20683 16-byte boundary. 20684 20685 Notice that neither of these options enable any extra precision 20686 over the x87 standard of 80 bits for a `long double'. 20687 20688 *Warning:* if you override the default value for your target ABI, 20689 this changes the size of structures and arrays containing `long 20690 double' variables, as well as modifying the function calling 20691 convention for functions taking `long double'. Hence they are not 20692 binary-compatible with code compiled without that switch. 20693 20694`-mlong-double-64' 20695`-mlong-double-80' 20696`-mlong-double-128' 20697 These switches control the size of `long double' type. A size of 20698 64 bits makes the `long double' type equivalent to the `double' 20699 type. This is the default for 32-bit Bionic C library. A size of 20700 128 bits makes the `long double' type equivalent to the 20701 `__float128' type. This is the default for 64-bit Bionic C library. 20702 20703 *Warning:* if you override the default value for your target ABI, 20704 this changes the size of structures and arrays containing `long 20705 double' variables, as well as modifying the function calling 20706 convention for functions taking `long double'. Hence they are not 20707 binary-compatible with code compiled without that switch. 20708 20709`-malign-data=TYPE' 20710 Control how GCC aligns variables. Supported values for TYPE are 20711 `compat' uses increased alignment value compatible uses GCC 4.8 20712 and earlier, `abi' uses alignment value as specified by the psABI, 20713 and `cacheline' uses increased alignment value to match the cache 20714 line size. `compat' is the default. 20715 20716`-mlarge-data-threshold=THRESHOLD' 20717 When `-mcmodel=medium' is specified, data objects larger than 20718 THRESHOLD are placed in the large data section. This value must 20719 be the same across all objects linked into the binary, and 20720 defaults to 65535. 20721 20722`-mrtd' 20723 Use a different function-calling convention, in which functions 20724 that take a fixed number of arguments return with the `ret NUM' 20725 instruction, which pops their arguments while returning. This 20726 saves one instruction in the caller since there is no need to pop 20727 the arguments there. 20728 20729 You can specify that an individual function is called with this 20730 calling sequence with the function attribute `stdcall'. You can 20731 also override the `-mrtd' option by using the function attribute 20732 `cdecl'. *Note Function Attributes::. 20733 20734 *Warning:* this calling convention is incompatible with the one 20735 normally used on Unix, so you cannot use it if you need to call 20736 libraries compiled with the Unix compiler. 20737 20738 Also, you must provide function prototypes for all functions that 20739 take variable numbers of arguments (including `printf'); otherwise 20740 incorrect code is generated for calls to those functions. 20741 20742 In addition, seriously incorrect code results if you call a 20743 function with too many arguments. (Normally, extra arguments are 20744 harmlessly ignored.) 20745 20746`-mregparm=NUM' 20747 Control how many registers are used to pass integer arguments. By 20748 default, no registers are used to pass arguments, and at most 3 20749 registers can be used. You can control this behavior for a 20750 specific function by using the function attribute `regparm'. 20751 *Note Function Attributes::. 20752 20753 *Warning:* if you use this switch, and NUM is nonzero, then you 20754 must build all modules with the same value, including any 20755 libraries. This includes the system libraries and startup modules. 20756 20757`-msseregparm' 20758 Use SSE register passing conventions for float and double arguments 20759 and return values. You can control this behavior for a specific 20760 function by using the function attribute `sseregparm'. *Note 20761 Function Attributes::. 20762 20763 *Warning:* if you use this switch then you must build all modules 20764 with the same value, including any libraries. This includes the 20765 system libraries and startup modules. 20766 20767`-mvect8-ret-in-mem' 20768 Return 8-byte vectors in memory instead of MMX registers. This is 20769 the default on Solaris 8 and 9 and VxWorks to match the ABI of the 20770 Sun Studio compilers until version 12. Later compiler versions 20771 (starting with Studio 12 Update 1) follow the ABI used by other 20772 x86 targets, which is the default on Solaris 10 and later. _Only_ 20773 use this option if you need to remain compatible with existing 20774 code produced by those previous compiler versions or older 20775 versions of GCC. 20776 20777`-mpc32' 20778`-mpc64' 20779`-mpc80' 20780 Set 80387 floating-point precision to 32, 64 or 80 bits. When 20781 `-mpc32' is specified, the significands of results of 20782 floating-point operations are rounded to 24 bits (single 20783 precision); `-mpc64' rounds the significands of results of 20784 floating-point operations to 53 bits (double precision) and 20785 `-mpc80' rounds the significands of results of floating-point 20786 operations to 64 bits (extended double precision), which is the 20787 default. When this option is used, floating-point operations in 20788 higher precisions are not available to the programmer without 20789 setting the FPU control word explicitly. 20790 20791 Setting the rounding of floating-point operations to less than the 20792 default 80 bits can speed some programs by 2% or more. Note that 20793 some mathematical libraries assume that extended-precision 20794 (80-bit) floating-point operations are enabled by default; 20795 routines in such libraries could suffer significant loss of 20796 accuracy, typically through so-called "catastrophic cancellation", 20797 when this option is used to set the precision to less than 20798 extended precision. 20799 20800`-mstackrealign' 20801 Realign the stack at entry. On the x86, the `-mstackrealign' 20802 option generates an alternate prologue and epilogue that realigns 20803 the run-time stack if necessary. This supports mixing legacy 20804 codes that keep 4-byte stack alignment with modern codes that keep 20805 16-byte stack alignment for SSE compatibility. See also the 20806 attribute `force_align_arg_pointer', applicable to individual 20807 functions. 20808 20809`-mpreferred-stack-boundary=NUM' 20810 Attempt to keep the stack boundary aligned to a 2 raised to NUM 20811 byte boundary. If `-mpreferred-stack-boundary' is not specified, 20812 the default is 4 (16 bytes or 128 bits). 20813 20814 *Warning:* When generating code for the x86-64 architecture with 20815 SSE extensions disabled, `-mpreferred-stack-boundary=3' can be 20816 used to keep the stack boundary aligned to 8 byte boundary. Since 20817 x86-64 ABI require 16 byte stack alignment, this is ABI 20818 incompatible and intended to be used in controlled environment 20819 where stack space is important limitation. This option leads to 20820 wrong code when functions compiled with 16 byte stack alignment 20821 (such as functions from a standard library) are called with 20822 misaligned stack. In this case, SSE instructions may lead to 20823 misaligned memory access traps. In addition, variable arguments 20824 are handled incorrectly for 16 byte aligned objects (including x87 20825 long double and __int128), leading to wrong results. You must 20826 build all modules with `-mpreferred-stack-boundary=3', including 20827 any libraries. This includes the system libraries and startup 20828 modules. 20829 20830`-mincoming-stack-boundary=NUM' 20831 Assume the incoming stack is aligned to a 2 raised to NUM byte 20832 boundary. If `-mincoming-stack-boundary' is not specified, the 20833 one specified by `-mpreferred-stack-boundary' is used. 20834 20835 On Pentium and Pentium Pro, `double' and `long double' values 20836 should be aligned to an 8-byte boundary (see `-malign-double') or 20837 suffer significant run time performance penalties. On Pentium 20838 III, the Streaming SIMD Extension (SSE) data type `__m128' may not 20839 work properly if it is not 16-byte aligned. 20840 20841 To ensure proper alignment of this values on the stack, the stack 20842 boundary must be as aligned as that required by any value stored 20843 on the stack. Further, every function must be generated such that 20844 it keeps the stack aligned. Thus calling a function compiled with 20845 a higher preferred stack boundary from a function compiled with a 20846 lower preferred stack boundary most likely misaligns the stack. 20847 It is recommended that libraries that use callbacks always use the 20848 default setting. 20849 20850 This extra alignment does consume extra stack space, and generally 20851 increases code size. Code that is sensitive to stack space usage, 20852 such as embedded systems and operating system kernels, may want to 20853 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 20854 20855`-mmmx' 20856`-msse' 20857`-msse2' 20858`-msse3' 20859`-mssse3' 20860`-msse4' 20861`-msse4a' 20862`-msse4.1' 20863`-msse4.2' 20864`-mavx' 20865`-mavx2' 20866`-mavx512f' 20867`-mavx512pf' 20868`-mavx512er' 20869`-mavx512cd' 20870`-msha' 20871`-maes' 20872`-mpclmul' 20873`-mclfushopt' 20874`-mfsgsbase' 20875`-mrdrnd' 20876`-mf16c' 20877`-mfma' 20878`-mfma4' 20879`-mno-fma4' 20880`-mprefetchwt1' 20881`-mxop' 20882`-mlwp' 20883`-m3dnow' 20884`-mpopcnt' 20885`-mabm' 20886`-mbmi' 20887`-mbmi2' 20888`-mlzcnt' 20889`-mfxsr' 20890`-mxsave' 20891`-mxsaveopt' 20892`-mxsavec' 20893`-mxsaves' 20894`-mrtm' 20895`-mtbm' 20896`-mmpx' 20897`-mmwaitx' 20898 These switches enable the use of instructions in the MMX, SSE, 20899 SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, 20900 AVX512CD, SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, 20901 FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT, RTM, 20902 MPX, MWAITX or 3DNow! extended instruction sets. Each has a 20903 corresponding `-mno-' option to disable use of these instructions. 20904 20905 These extensions are also available as built-in functions: see 20906 *Note x86 Built-in Functions::, for details of the functions 20907 enabled and disabled by these switches. 20908 20909 To generate SSE/SSE2 instructions automatically from floating-point 20910 code (as opposed to 387 instructions), see `-mfpmath=sse'. 20911 20912 GCC depresses SSEx instructions when `-mavx' is used. Instead, it 20913 generates new AVX instructions or AVX equivalence for all SSEx 20914 instructions when needed. 20915 20916 These options enable GCC to use these extended instructions in 20917 generated code, even without `-mfpmath=sse'. Applications that 20918 perform run-time CPU detection must compile separate files for each 20919 supported architecture, using the appropriate flags. In 20920 particular, the file containing the CPU detection code should be 20921 compiled without these options. 20922 20923`-mdump-tune-features' 20924 This option instructs GCC to dump the names of the x86 performance 20925 tuning features and default settings. The names can be used in 20926 `-mtune-ctrl=FEATURE-LIST'. 20927 20928`-mtune-ctrl=FEATURE-LIST' 20929 This option is used to do fine grain control of x86 code 20930 generation features. FEATURE-LIST is a comma separated list of 20931 FEATURE names. See also `-mdump-tune-features'. When specified, 20932 the FEATURE is turned on if it is not preceded with `^', 20933 otherwise, it is turned off. `-mtune-ctrl=FEATURE-LIST' is 20934 intended to be used by GCC developers. Using it may lead to code 20935 paths not covered by testing and can potentially result in 20936 compiler ICEs or runtime errors. 20937 20938`-mno-default' 20939 This option instructs GCC to turn off all tunable features. See 20940 also `-mtune-ctrl=FEATURE-LIST' and `-mdump-tune-features'. 20941 20942`-mcld' 20943 This option instructs GCC to emit a `cld' instruction in the 20944 prologue of functions that use string instructions. String 20945 instructions depend on the DF flag to select between autoincrement 20946 or autodecrement mode. While the ABI specifies the DF flag to be 20947 cleared on function entry, some operating systems violate this 20948 specification by not clearing the DF flag in their exception 20949 dispatchers. The exception handler can be invoked with the DF flag 20950 set, which leads to wrong direction mode when string instructions 20951 are used. This option can be enabled by default on 32-bit x86 20952 targets by configuring GCC with the `--enable-cld' configure 20953 option. Generation of `cld' instructions can be suppressed with 20954 the `-mno-cld' compiler option in this case. 20955 20956`-mvzeroupper' 20957 This option instructs GCC to emit a `vzeroupper' instruction 20958 before a transfer of control flow out of the function to minimize 20959 the AVX to SSE transition penalty as well as remove unnecessary 20960 `zeroupper' intrinsics. 20961 20962`-mprefer-avx128' 20963 This option instructs GCC to use 128-bit AVX instructions instead 20964 of 256-bit AVX instructions in the auto-vectorizer. 20965 20966`-mcx16' 20967 This option enables GCC to generate `CMPXCHG16B' instructions. 20968 `CMPXCHG16B' allows for atomic operations on 128-bit double 20969 quadword (or oword) data types. This is useful for 20970 high-resolution counters that can be updated by multiple 20971 processors (or cores). This instruction is generated as part of 20972 atomic built-in functions: see *Note __sync Builtins:: or *Note 20973 __atomic Builtins:: for details. 20974 20975`-msahf' 20976 This option enables generation of `SAHF' instructions in 64-bit 20977 code. Early Intel Pentium 4 CPUs with Intel 64 support, prior to 20978 the introduction of Pentium 4 G1 step in December 2005, lacked the 20979 `LAHF' and `SAHF' instructions which are supported by AMD64. 20980 These are load and store instructions, respectively, for certain 20981 status flags. In 64-bit mode, the `SAHF' instruction is used to 20982 optimize `fmod', `drem', and `remainder' built-in functions; see 20983 *Note Other Builtins:: for details. 20984 20985`-mmovbe' 20986 This option enables use of the `movbe' instruction to implement 20987 `__builtin_bswap32' and `__builtin_bswap64'. 20988 20989`-mcrc32' 20990 This option enables built-in functions `__builtin_ia32_crc32qi', 20991 `__builtin_ia32_crc32hi', `__builtin_ia32_crc32si' and 20992 `__builtin_ia32_crc32di' to generate the `crc32' machine 20993 instruction. 20994 20995`-mrecip' 20996 This option enables use of `RCPSS' and `RSQRTSS' instructions (and 20997 their vectorized variants `RCPPS' and `RSQRTPS') with an 20998 additional Newton-Raphson step to increase precision instead of 20999 `DIVSS' and `SQRTSS' (and their vectorized variants) for 21000 single-precision floating-point arguments. These instructions are 21001 generated only when `-funsafe-math-optimizations' is enabled 21002 together with `-finite-math-only' and `-fno-trapping-math'. Note 21003 that while the throughput of the sequence is higher than the 21004 throughput of the non-reciprocal instruction, the precision of the 21005 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 21006 equals 0.99999994). 21007 21008 Note that GCC implements `1.0f/sqrtf(X)' in terms of `RSQRTSS' (or 21009 `RSQRTPS') already with `-ffast-math' (or the above option 21010 combination), and doesn't need `-mrecip'. 21011 21012 Also note that GCC emits the above sequence with additional 21013 Newton-Raphson step for vectorized single-float division and 21014 vectorized `sqrtf(X)' already with `-ffast-math' (or the above 21015 option combination), and doesn't need `-mrecip'. 21016 21017`-mrecip=OPT' 21018 This option controls which reciprocal estimate instructions may be 21019 used. OPT is a comma-separated list of options, which may be 21020 preceded by a `!' to invert the option: 21021 21022 `all' 21023 Enable all estimate instructions. 21024 21025 `default' 21026 Enable the default instructions, equivalent to `-mrecip'. 21027 21028 `none' 21029 Disable all estimate instructions, equivalent to `-mno-recip'. 21030 21031 `div' 21032 Enable the approximation for scalar division. 21033 21034 `vec-div' 21035 Enable the approximation for vectorized division. 21036 21037 `sqrt' 21038 Enable the approximation for scalar square root. 21039 21040 `vec-sqrt' 21041 Enable the approximation for vectorized square root. 21042 21043 So, for example, `-mrecip=all,!sqrt' enables all of the reciprocal 21044 approximations, except for square root. 21045 21046`-mveclibabi=TYPE' 21047 Specifies the ABI type to use for vectorizing intrinsics using an 21048 external library. Supported values for TYPE are `svml' for the 21049 Intel short vector math library and `acml' for the AMD math core 21050 library. To use this option, both `-ftree-vectorize' and 21051 `-funsafe-math-optimizations' have to be enabled, and an SVML or 21052 ACML ABI-compatible library must be specified at link time. 21053 21054 GCC currently emits calls to `vmldExp2', `vmldLn2', `vmldLog102', 21055 `vmldLog102', `vmldPow2', `vmldTanh2', `vmldTan2', `vmldAtan2', 21056 `vmldAtanh2', `vmldCbrt2', `vmldSinh2', `vmldSin2', `vmldAsinh2', 21057 `vmldAsin2', `vmldCosh2', `vmldCos2', `vmldAcosh2', `vmldAcos2', 21058 `vmlsExp4', `vmlsLn4', `vmlsLog104', `vmlsLog104', `vmlsPow4', 21059 `vmlsTanh4', `vmlsTan4', `vmlsAtan4', `vmlsAtanh4', `vmlsCbrt4', 21060 `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', `vmlsAsin4', `vmlsCosh4', 21061 `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' for corresponding 21062 function type when `-mveclibabi=svml' is used, and `__vrd2_sin', 21063 `__vrd2_cos', `__vrd2_exp', `__vrd2_log', `__vrd2_log2', 21064 `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', `__vrs4_expf', 21065 `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and `__vrs4_powf' 21066 for the corresponding function type when `-mveclibabi=acml' is 21067 used. 21068 21069`-mabi=NAME' 21070 Generate code for the specified calling convention. Permissible 21071 values are `sysv' for the ABI used on GNU/Linux and other systems, 21072 and `ms' for the Microsoft ABI. The default is to use the 21073 Microsoft ABI when targeting Microsoft Windows and the SysV ABI on 21074 all other systems. You can control this behavior for specific 21075 functions by using the function attributes `ms_abi' and `sysv_abi'. 21076 *Note Function Attributes::. 21077 21078`-mtls-dialect=TYPE' 21079 Generate code to access thread-local storage using the `gnu' or 21080 `gnu2' conventions. `gnu' is the conservative default; `gnu2' is 21081 more efficient, but it may add compile- and run-time requirements 21082 that cannot be satisfied on all systems. 21083 21084`-mpush-args' 21085`-mno-push-args' 21086 Use PUSH operations to store outgoing parameters. This method is 21087 shorter and usually equally fast as method using SUB/MOV 21088 operations and is enabled by default. In some cases disabling it 21089 may improve performance because of improved scheduling and reduced 21090 dependencies. 21091 21092`-maccumulate-outgoing-args' 21093 If enabled, the maximum amount of space required for outgoing 21094 arguments is computed in the function prologue. This is faster on 21095 most modern CPUs because of reduced dependencies, improved 21096 scheduling and reduced stack usage when the preferred stack 21097 boundary is not equal to 2. The drawback is a notable increase in 21098 code size. This switch implies `-mno-push-args'. 21099 21100`-mthreads' 21101 Support thread-safe exception handling on MinGW. Programs that 21102 rely on thread-safe exception handling must compile and link all 21103 code with the `-mthreads' option. When compiling, `-mthreads' 21104 defines `-D_MT'; when linking, it links in a special thread helper 21105 library `-lmingwthrd' which cleans up per-thread 21106 exception-handling data. 21107 21108`-mno-align-stringops' 21109 Do not align the destination of inlined string operations. This 21110 switch reduces code size and improves performance in case the 21111 destination is already aligned, but GCC doesn't know about it. 21112 21113`-minline-all-stringops' 21114 By default GCC inlines string operations only when the destination 21115 is known to be aligned to least a 4-byte boundary. This enables 21116 more inlining and increases code size, but may improve performance 21117 of code that depends on fast `memcpy', `strlen', and `memset' for 21118 short lengths. 21119 21120`-minline-stringops-dynamically' 21121 For string operations of unknown size, use run-time checks with 21122 inline code for small blocks and a library call for large blocks. 21123 21124`-mstringop-strategy=ALG' 21125 Override the internal decision heuristic for the particular 21126 algorithm to use for inlining string operations. The allowed 21127 values for ALG are: 21128 21129 `rep_byte' 21130 `rep_4byte' 21131 `rep_8byte' 21132 Expand using i386 `rep' prefix of the specified size. 21133 21134 `byte_loop' 21135 `loop' 21136 `unrolled_loop' 21137 Expand into an inline loop. 21138 21139 `libcall' 21140 Always use a library call. 21141 21142`-mmemcpy-strategy=STRATEGY' 21143 Override the internal decision heuristic to decide if 21144 `__builtin_memcpy' should be inlined and what inline algorithm to 21145 use when the expected size of the copy operation is known. STRATEGY 21146 is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN triplets. 21147 ALG is specified in `-mstringop-strategy', MAX_SIZE specifies the 21148 max byte size with which inline algorithm ALG is allowed. For the 21149 last triplet, the MAX_SIZE must be `-1'. The MAX_SIZE of the 21150 triplets in the list must be specified in increasing order. The 21151 minimal byte size for ALG is `0' for the first triplet and 21152 `MAX_SIZE + 1' of the preceding range. 21153 21154`-mmemset-strategy=STRATEGY' 21155 The option is similar to `-mmemcpy-strategy=' except that it is to 21156 control `__builtin_memset' expansion. 21157 21158`-momit-leaf-frame-pointer' 21159 Don't keep the frame pointer in a register for leaf functions. 21160 This avoids the instructions to save, set up, and restore frame 21161 pointers and makes an extra register available in leaf functions. 21162 The option `-fomit-leaf-frame-pointer' removes the frame pointer 21163 for leaf functions, which might make debugging harder. 21164 21165`-mtls-direct-seg-refs' 21166`-mno-tls-direct-seg-refs' 21167 Controls whether TLS variables may be accessed with offsets from 21168 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 21169 whether the thread base pointer must be added. Whether or not this 21170 is valid depends on the operating system, and whether it maps the 21171 segment to cover the entire TLS area. 21172 21173 For systems that use the GNU C Library, the default is on. 21174 21175`-msse2avx' 21176`-mno-sse2avx' 21177 Specify that the assembler should encode SSE instructions with VEX 21178 prefix. The option `-mavx' turns this on by default. 21179 21180`-mfentry' 21181`-mno-fentry' 21182 If profiling is active (`-pg'), put the profiling counter call 21183 before the prologue. Note: On x86 architectures the attribute 21184 `ms_hook_prologue' isn't possible at the moment for `-mfentry' and 21185 `-pg'. 21186 21187`-mrecord-mcount' 21188`-mno-record-mcount' 21189 If profiling is active (`-pg'), generate a __mcount_loc section 21190 that contains pointers to each profiling call. This is useful for 21191 automatically patching and out calls. 21192 21193`-mnop-mcount' 21194`-mno-nop-mcount' 21195 If profiling is active (`-pg'), generate the calls to the 21196 profiling functions as nops. This is useful when they should be 21197 patched in later dynamically. This is likely only useful together 21198 with `-mrecord-mcount'. 21199 21200`-mskip-rax-setup' 21201`-mno-skip-rax-setup' 21202 When generating code for the x86-64 architecture with SSE 21203 extensions disabled, `-mskip-rax-setup' can be used to skip 21204 setting up RAX register when there are no variable arguments 21205 passed in vector registers. 21206 21207 *Warning:* Since RAX register is used to avoid unnecessarily 21208 saving vector registers on stack when passing variable arguments, 21209 the impacts of this option are callees may waste some stack space, 21210 misbehave or jump to a random location. GCC 4.4 or newer don't 21211 have those issues, regardless the RAX register value. 21212 21213`-m8bit-idiv' 21214`-mno-8bit-idiv' 21215 On some processors, like Intel Atom, 8-bit unsigned integer divide 21216 is much faster than 32-bit/64-bit integer divide. This option 21217 generates a run-time check. If both dividend and divisor are 21218 within range of 0 to 255, 8-bit unsigned integer divide is used 21219 instead of 32-bit/64-bit integer divide. 21220 21221`-mavx256-split-unaligned-load' 21222`-mavx256-split-unaligned-store' 21223 Split 32-byte AVX unaligned load and store. 21224 21225`-mstack-protector-guard=GUARD' 21226 Generate stack protection code using canary at GUARD. Supported 21227 locations are `global' for global canary or `tls' for per-thread 21228 canary in the TLS block (the default). This option has effect 21229 only when `-fstack-protector' or `-fstack-protector-all' is 21230 specified. 21231 21232 21233 These `-m' switches are supported in addition to the above on x86-64 21234processors in 64-bit environments. 21235 21236`-m32' 21237`-m64' 21238`-mx32' 21239`-m16' 21240 Generate code for a 16-bit, 32-bit or 64-bit environment. The 21241 `-m32' option sets `int', `long', and pointer types to 32 bits, and 21242 generates code that runs on any i386 system. 21243 21244 The `-m64' option sets `int' to 32 bits and `long' and pointer 21245 types to 64 bits, and generates code for the x86-64 architecture. 21246 For Darwin only the `-m64' option also turns off the `-fno-pic' 21247 and `-mdynamic-no-pic' options. 21248 21249 The `-mx32' option sets `int', `long', and pointer types to 32 21250 bits, and generates code for the x86-64 architecture. 21251 21252 The `-m16' option is the same as `-m32', except for that it 21253 outputs the `.code16gcc' assembly directive at the beginning of 21254 the assembly output so that the binary can run in 16-bit mode. 21255 21256`-mno-red-zone' 21257 Do not use a so-called "red zone" for x86-64 code. The red zone 21258 is mandated by the x86-64 ABI; it is a 128-byte area beyond the 21259 location of the stack pointer that is not modified by signal or 21260 interrupt handlers and therefore can be used for temporary data 21261 without adjusting the stack pointer. The flag `-mno-red-zone' 21262 disables this red zone. 21263 21264`-mcmodel=small' 21265 Generate code for the small code model: the program and its 21266 symbols must be linked in the lower 2 GB of the address space. 21267 Pointers are 64 bits. Programs can be statically or dynamically 21268 linked. This is the default code model. 21269 21270`-mcmodel=kernel' 21271 Generate code for the kernel code model. The kernel runs in the 21272 negative 2 GB of the address space. This model has to be used for 21273 Linux kernel code. 21274 21275`-mcmodel=medium' 21276 Generate code for the medium model: the program is linked in the 21277 lower 2 GB of the address space. Small symbols are also placed 21278 there. Symbols with sizes larger than `-mlarge-data-threshold' 21279 are put into large data or BSS sections and can be located above 21280 2GB. Programs can be statically or dynamically linked. 21281 21282`-mcmodel=large' 21283 Generate code for the large model. This model makes no assumptions 21284 about addresses and sizes of sections. 21285 21286`-maddress-mode=long' 21287 Generate code for long address mode. This is only supported for 21288 64-bit and x32 environments. It is the default address mode for 21289 64-bit environments. 21290 21291`-maddress-mode=short' 21292 Generate code for short address mode. This is only supported for 21293 32-bit and x32 environments. It is the default address mode for 21294 32-bit and x32 environments. 21295 21296 21297File: gcc.info, Node: x86 Windows Options, Next: Xstormy16 Options, Prev: x86 Options, Up: Submodel Options 21298 212993.17.54 x86 Windows Options 21300--------------------------- 21301 21302These additional options are available for Microsoft Windows targets: 21303 21304`-mconsole' 21305 This option specifies that a console application is to be 21306 generated, by instructing the linker to set the PE header 21307 subsystem type required for console applications. This option is 21308 available for Cygwin and MinGW targets and is enabled by default 21309 on those targets. 21310 21311`-mdll' 21312 This option is available for Cygwin and MinGW targets. It 21313 specifies that a DLL--a dynamic link library--is to be generated, 21314 enabling the selection of the required runtime startup object and 21315 entry point. 21316 21317`-mnop-fun-dllimport' 21318 This option is available for Cygwin and MinGW targets. It 21319 specifies that the `dllimport' attribute should be ignored. 21320 21321`-mthread' 21322 This option is available for MinGW targets. It specifies that 21323 MinGW-specific thread support is to be used. 21324 21325`-municode' 21326 This option is available for MinGW-w64 targets. It causes the 21327 `UNICODE' preprocessor macro to be predefined, and chooses 21328 Unicode-capable runtime startup code. 21329 21330`-mwin32' 21331 This option is available for Cygwin and MinGW targets. It 21332 specifies that the typical Microsoft Windows predefined macros are 21333 to be set in the pre-processor, but does not influence the choice 21334 of runtime library/startup code. 21335 21336`-mwindows' 21337 This option is available for Cygwin and MinGW targets. It 21338 specifies that a GUI application is to be generated by instructing 21339 the linker to set the PE header subsystem type appropriately. 21340 21341`-fno-set-stack-executable' 21342 This option is available for MinGW targets. It specifies that the 21343 executable flag for the stack used by nested functions isn't set. 21344 This is necessary for binaries running in kernel mode of Microsoft 21345 Windows, as there the User32 API, which is used to set executable 21346 privileges, isn't available. 21347 21348`-fwritable-relocated-rdata' 21349 This option is available for MinGW and Cygwin targets. It 21350 specifies that relocated-data in read-only section is put into 21351 .data section. This is a necessary for older runtimes not 21352 supporting modification of .rdata sections for pseudo-relocation. 21353 21354`-mpe-aligned-commons' 21355 This option is available for Cygwin and MinGW targets. It 21356 specifies that the GNU extension to the PE file format that 21357 permits the correct alignment of COMMON variables should be used 21358 when generating code. It is enabled by default if GCC detects 21359 that the target assembler found during configuration supports the 21360 feature. 21361 21362 See also under *Note x86 Options:: for standard options. 21363 21364 21365File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86 Windows Options, Up: Submodel Options 21366 213673.17.55 Xstormy16 Options 21368------------------------- 21369 21370These options are defined for Xstormy16: 21371 21372`-msim' 21373 Choose startup files and linker script suitable for the simulator. 21374 21375 21376File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 21377 213783.17.56 Xtensa Options 21379---------------------- 21380 21381These options are supported for Xtensa targets: 21382 21383`-mconst16' 21384`-mno-const16' 21385 Enable or disable use of `CONST16' instructions for loading 21386 constant values. The `CONST16' instruction is currently not a 21387 standard option from Tensilica. When enabled, `CONST16' 21388 instructions are always used in place of the standard `L32R' 21389 instructions. The use of `CONST16' is enabled by default only if 21390 the `L32R' instruction is not available. 21391 21392`-mfused-madd' 21393`-mno-fused-madd' 21394 Enable or disable use of fused multiply/add and multiply/subtract 21395 instructions in the floating-point option. This has no effect if 21396 the floating-point option is not also enabled. Disabling fused 21397 multiply/add and multiply/subtract instructions forces the 21398 compiler to use separate instructions for the multiply and 21399 add/subtract operations. This may be desirable in some cases 21400 where strict IEEE 754-compliant results are required: the fused 21401 multiply add/subtract instructions do not round the intermediate 21402 result, thereby producing results with _more_ bits of precision 21403 than specified by the IEEE standard. Disabling fused multiply 21404 add/subtract instructions also ensures that the program output is 21405 not sensitive to the compiler's ability to combine multiply and 21406 add/subtract operations. 21407 21408`-mserialize-volatile' 21409`-mno-serialize-volatile' 21410 When this option is enabled, GCC inserts `MEMW' instructions before 21411 `volatile' memory references to guarantee sequential consistency. 21412 The default is `-mserialize-volatile'. Use 21413 `-mno-serialize-volatile' to omit the `MEMW' instructions. 21414 21415`-mforce-no-pic' 21416 For targets, like GNU/Linux, where all user-mode Xtensa code must 21417 be position-independent code (PIC), this option disables PIC for 21418 compiling kernel code. 21419 21420`-mtext-section-literals' 21421`-mno-text-section-literals' 21422 These options control the treatment of literal pools. The default 21423 is `-mno-text-section-literals', which places literals in a 21424 separate section in the output file. This allows the literal pool 21425 to be placed in a data RAM/ROM, and it also allows the linker to 21426 combine literal pools from separate object files to remove 21427 redundant literals and improve code size. With 21428 `-mtext-section-literals', the literals are interspersed in the 21429 text section in order to keep them as close as possible to their 21430 references. This may be necessary for large assembly files. 21431 21432`-mtarget-align' 21433`-mno-target-align' 21434 When this option is enabled, GCC instructs the assembler to 21435 automatically align instructions to reduce branch penalties at the 21436 expense of some code density. The assembler attempts to widen 21437 density instructions to align branch targets and the instructions 21438 following call instructions. If there are not enough preceding 21439 safe density instructions to align a target, no widening is 21440 performed. The default is `-mtarget-align'. These options do not 21441 affect the treatment of auto-aligned instructions like `LOOP', 21442 which the assembler always aligns, either by widening density 21443 instructions or by inserting NOP instructions. 21444 21445`-mlongcalls' 21446`-mno-longcalls' 21447 When this option is enabled, GCC instructs the assembler to 21448 translate direct calls to indirect calls unless it can determine 21449 that the target of a direct call is in the range allowed by the 21450 call instruction. This translation typically occurs for calls to 21451 functions in other source files. Specifically, the assembler 21452 translates a direct `CALL' instruction into an `L32R' followed by 21453 a `CALLX' instruction. The default is `-mno-longcalls'. This 21454 option should be used in programs where the call target can 21455 potentially be out of range. This option is implemented in the 21456 assembler, not the compiler, so the assembly code generated by GCC 21457 still shows direct call instructions--look at the disassembled 21458 object code to see the actual instructions. Note that the 21459 assembler uses an indirect call for every cross-file call, not 21460 just those that really are out of range. 21461 21462 21463File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 21464 214653.17.57 zSeries Options 21466----------------------- 21467 21468These are listed under *Note S/390 and zSeries Options::. 21469 21470 21471File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 21472 214733.18 Options for Code Generation Conventions 21474============================================ 21475 21476These machine-independent options control the interface conventions 21477used in code generation. 21478 21479 Most of them have both positive and negative forms; the negative form 21480of `-ffoo' is `-fno-foo'. In the table below, only one of the forms is 21481listed--the one that is not the default. You can figure out the other 21482form by either removing `no-' or adding it. 21483 21484`-fbounds-check' 21485 For front ends that support it, generate additional code to check 21486 that indices used to access arrays are within the declared range. 21487 This is currently only supported by the Java and Fortran front 21488 ends, where this option defaults to true and false respectively. 21489 21490`-fstack-reuse=REUSE-LEVEL' 21491 This option controls stack space reuse for user declared 21492 local/auto variables and compiler generated temporaries. 21493 REUSE_LEVEL can be `all', `named_vars', or `none'. `all' enables 21494 stack reuse for all local variables and temporaries, `named_vars' 21495 enables the reuse only for user defined local variables with 21496 names, and `none' disables stack reuse completely. The default 21497 value is `all'. The option is needed when the program extends the 21498 lifetime of a scoped local variable or a compiler generated 21499 temporary beyond the end point defined by the language. When a 21500 lifetime of a variable ends, and if the variable lives in memory, 21501 the optimizing compiler has the freedom to reuse its stack space 21502 with other temporaries or scoped local variables whose live range 21503 does not overlap with it. Legacy code extending local lifetime is 21504 likely to break with the stack reuse optimization. 21505 21506 For example, 21507 21508 int *p; 21509 { 21510 int local1; 21511 21512 p = &local1; 21513 local1 = 10; 21514 .... 21515 } 21516 { 21517 int local2; 21518 local2 = 20; 21519 ... 21520 } 21521 21522 if (*p == 10) // out of scope use of local1 21523 { 21524 21525 } 21526 21527 Another example: 21528 21529 struct A 21530 { 21531 A(int k) : i(k), j(k) { } 21532 int i; 21533 int j; 21534 }; 21535 21536 A *ap; 21537 21538 void foo(const A& ar) 21539 { 21540 ap = &ar; 21541 } 21542 21543 void bar() 21544 { 21545 foo(A(10)); // temp object's lifetime ends when foo returns 21546 21547 { 21548 A a(20); 21549 .... 21550 } 21551 ap->i+= 10; // ap references out of scope temp whose space 21552 // is reused with a. What is the value of ap->i? 21553 } 21554 21555 The lifetime of a compiler generated temporary is well defined by 21556 the C++ standard. When a lifetime of a temporary ends, and if the 21557 temporary lives in memory, the optimizing compiler has the freedom 21558 to reuse its stack space with other temporaries or scoped local 21559 variables whose live range does not overlap with it. However some 21560 of the legacy code relies on the behavior of older compilers in 21561 which temporaries' stack space is not reused, the aggressive stack 21562 reuse can lead to runtime errors. This option is used to control 21563 the temporary stack reuse optimization. 21564 21565`-ftrapv' 21566 This option generates traps for signed overflow on addition, 21567 subtraction, multiplication operations. 21568 21569`-fwrapv' 21570 This option instructs the compiler to assume that signed arithmetic 21571 overflow of addition, subtraction and multiplication wraps around 21572 using twos-complement representation. This flag enables some 21573 optimizations and disables others. This option is enabled by 21574 default for the Java front end, as required by the Java language 21575 specification. 21576 21577`-fexceptions' 21578 Enable exception handling. Generates extra code needed to 21579 propagate exceptions. For some targets, this implies GCC 21580 generates frame unwind information for all functions, which can 21581 produce significant data size overhead, although it does not 21582 affect execution. If you do not specify this option, GCC enables 21583 it by default for languages like C++ that normally require 21584 exception handling, and disables it for languages like C that do 21585 not normally require it. However, you may need to enable this 21586 option when compiling C code that needs to interoperate properly 21587 with exception handlers written in C++. You may also wish to 21588 disable this option if you are compiling older C++ programs that 21589 don't use exception handling. 21590 21591`-fnon-call-exceptions' 21592 Generate code that allows trapping instructions to throw 21593 exceptions. Note that this requires platform-specific runtime 21594 support that does not exist everywhere. Moreover, it only allows 21595 _trapping_ instructions to throw exceptions, i.e. memory 21596 references or floating-point instructions. It does not allow 21597 exceptions to be thrown from arbitrary signal handlers such as 21598 `SIGALRM'. 21599 21600`-fdelete-dead-exceptions' 21601 Consider that instructions that may throw exceptions but don't 21602 otherwise contribute to the execution of the program can be 21603 optimized away. This option is enabled by default for the Ada 21604 front end, as permitted by the Ada language specification. 21605 Optimization passes that cause dead exceptions to be removed are 21606 enabled independently at different optimization levels. 21607 21608`-funwind-tables' 21609 Similar to `-fexceptions', except that it just generates any needed 21610 static data, but does not affect the generated code in any other 21611 way. You normally do not need to enable this option; instead, a 21612 language processor that needs this handling enables it on your 21613 behalf. 21614 21615`-fasynchronous-unwind-tables' 21616 Generate unwind table in DWARF 2 format, if supported by target 21617 machine. The table is exact at each instruction boundary, so it 21618 can be used for stack unwinding from asynchronous events (such as 21619 debugger or garbage collector). 21620 21621`-fno-gnu-unique' 21622 On systems with recent GNU assembler and C library, the C++ 21623 compiler uses the `STB_GNU_UNIQUE' binding to make sure that 21624 definitions of template static data members and static local 21625 variables in inline functions are unique even in the presence of 21626 `RTLD_LOCAL'; this is necessary to avoid problems with a library 21627 used by two different `RTLD_LOCAL' plugins depending on a 21628 definition in one of them and therefore disagreeing with the other 21629 one about the binding of the symbol. But this causes `dlclose' to 21630 be ignored for affected DSOs; if your program relies on 21631 reinitialization of a DSO via `dlclose' and `dlopen', you can use 21632 `-fno-gnu-unique'. 21633 21634`-fpcc-struct-return' 21635 Return "short" `struct' and `union' values in memory like longer 21636 ones, rather than in registers. This convention is less 21637 efficient, but it has the advantage of allowing intercallability 21638 between GCC-compiled files and files compiled with other 21639 compilers, particularly the Portable C Compiler (pcc). 21640 21641 The precise convention for returning structures in memory depends 21642 on the target configuration macros. 21643 21644 Short structures and unions are those whose size and alignment 21645 match that of some integer type. 21646 21647 *Warning:* code compiled with the `-fpcc-struct-return' switch is 21648 not binary compatible with code compiled with the 21649 `-freg-struct-return' switch. Use it to conform to a non-default 21650 application binary interface. 21651 21652`-freg-struct-return' 21653 Return `struct' and `union' values in registers when possible. 21654 This is more efficient for small structures than 21655 `-fpcc-struct-return'. 21656 21657 If you specify neither `-fpcc-struct-return' nor 21658 `-freg-struct-return', GCC defaults to whichever convention is 21659 standard for the target. If there is no standard convention, GCC 21660 defaults to `-fpcc-struct-return', except on targets where GCC is 21661 the principal compiler. In those cases, we can choose the 21662 standard, and we chose the more efficient register return 21663 alternative. 21664 21665 *Warning:* code compiled with the `-freg-struct-return' switch is 21666 not binary compatible with code compiled with the 21667 `-fpcc-struct-return' switch. Use it to conform to a non-default 21668 application binary interface. 21669 21670`-fshort-enums' 21671 Allocate to an `enum' type only as many bytes as it needs for the 21672 declared range of possible values. Specifically, the `enum' type 21673 is equivalent to the smallest integer type that has enough room. 21674 21675 *Warning:* the `-fshort-enums' switch causes GCC to generate code 21676 that is not binary compatible with code generated without that 21677 switch. Use it to conform to a non-default application binary 21678 interface. 21679 21680`-fshort-double' 21681 Use the same size for `double' as for `float'. 21682 21683 *Warning:* the `-fshort-double' switch causes GCC to generate code 21684 that is not binary compatible with code generated without that 21685 switch. Use it to conform to a non-default application binary 21686 interface. 21687 21688`-fshort-wchar' 21689 Override the underlying type for `wchar_t' to be `short unsigned 21690 int' instead of the default for the target. This option is useful 21691 for building programs to run under WINE. 21692 21693 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 21694 that is not binary compatible with code generated without that 21695 switch. Use it to conform to a non-default application binary 21696 interface. 21697 21698`-fno-common' 21699 In C code, controls the placement of uninitialized global 21700 variables. Unix C compilers have traditionally permitted multiple 21701 definitions of such variables in different compilation units by 21702 placing the variables in a common block. This is the behavior 21703 specified by `-fcommon', and is the default for GCC on most 21704 targets. On the other hand, this behavior is not required by ISO 21705 C, and on some targets may carry a speed or code size penalty on 21706 variable references. The `-fno-common' option specifies that the 21707 compiler should place uninitialized global variables in the data 21708 section of the object file, rather than generating them as common 21709 blocks. This has the effect that if the same variable is declared 21710 (without `extern') in two different compilations, you get a 21711 multiple-definition error when you link them. In this case, you 21712 must compile with `-fcommon' instead. Compiling with 21713 `-fno-common' is useful on targets for which it provides better 21714 performance, or if you wish to verify that the program will work 21715 on other systems that always treat uninitialized variable 21716 declarations this way. 21717 21718`-fno-ident' 21719 Ignore the `#ident' directive. 21720 21721`-finhibit-size-directive' 21722 Don't output a `.size' assembler directive, or anything else that 21723 would cause trouble if the function is split in the middle, and the 21724 two halves are placed at locations far apart in memory. This 21725 option is used when compiling `crtstuff.c'; you should not need to 21726 use it for anything else. 21727 21728`-fverbose-asm' 21729 Put extra commentary information in the generated assembly code to 21730 make it more readable. This option is generally only of use to 21731 those who actually need to read the generated assembly code 21732 (perhaps while debugging the compiler itself). 21733 21734 `-fno-verbose-asm', the default, causes the extra information to 21735 be omitted and is useful when comparing two assembler files. 21736 21737`-frecord-gcc-switches' 21738 This switch causes the command line used to invoke the compiler to 21739 be recorded into the object file that is being created. This 21740 switch is only implemented on some targets and the exact format of 21741 the recording is target and binary file format dependent, but it 21742 usually takes the form of a section containing ASCII text. This 21743 switch is related to the `-fverbose-asm' switch, but that switch 21744 only records information in the assembler output file as comments, 21745 so it never reaches the object file. See also 21746 `-grecord-gcc-switches' for another way of storing compiler 21747 options into the object file. 21748 21749`-fpic' 21750 Generate position-independent code (PIC) suitable for use in a 21751 shared library, if supported for the target machine. Such code 21752 accesses all constant addresses through a global offset table 21753 (GOT). The dynamic loader resolves the GOT entries when the 21754 program starts (the dynamic loader is not part of GCC; it is part 21755 of the operating system). If the GOT size for the linked 21756 executable exceeds a machine-specific maximum size, you get an 21757 error message from the linker indicating that `-fpic' does not 21758 work; in that case, recompile with `-fPIC' instead. (These 21759 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 21760 x86 has no such limit.) 21761 21762 Position-independent code requires special support, and therefore 21763 works only on certain machines. For the x86, GCC supports PIC for 21764 System V but not for the Sun 386i. Code generated for the IBM 21765 RS/6000 is always position-independent. 21766 21767 When this flag is set, the macros `__pic__' and `__PIC__' are 21768 defined to 1. 21769 21770`-fPIC' 21771 If supported for the target machine, emit position-independent 21772 code, suitable for dynamic linking and avoiding any limit on the 21773 size of the global offset table. This option makes a difference 21774 on the m68k, PowerPC and SPARC. 21775 21776 Position-independent code requires special support, and therefore 21777 works only on certain machines. 21778 21779 When this flag is set, the macros `__pic__' and `__PIC__' are 21780 defined to 2. 21781 21782`-fpie' 21783`-fPIE' 21784 These options are similar to `-fpic' and `-fPIC', but generated 21785 position independent code can be only linked into executables. 21786 Usually these options are used when `-pie' GCC option is used 21787 during linking. 21788 21789 `-fpie' and `-fPIE' both define the macros `__pie__' and 21790 `__PIE__'. The macros have the value 1 for `-fpie' and 2 for 21791 `-fPIE'. 21792 21793`-fno-jump-tables' 21794 Do not use jump tables for switch statements even where it would be 21795 more efficient than other code generation strategies. This option 21796 is of use in conjunction with `-fpic' or `-fPIC' for building code 21797 that forms part of a dynamic linker and cannot reference the 21798 address of a jump table. On some targets, jump tables do not 21799 require a GOT and this option is not needed. 21800 21801`-ffixed-REG' 21802 Treat the register named REG as a fixed register; generated code 21803 should never refer to it (except perhaps as a stack pointer, frame 21804 pointer or in some other fixed role). 21805 21806 REG must be the name of a register. The register names accepted 21807 are machine-specific and are defined in the `REGISTER_NAMES' macro 21808 in the machine description macro file. 21809 21810 This flag does not have a negative form, because it specifies a 21811 three-way choice. 21812 21813`-fcall-used-REG' 21814 Treat the register named REG as an allocable register that is 21815 clobbered by function calls. It may be allocated for temporaries 21816 or variables that do not live across a call. Functions compiled 21817 this way do not save and restore the register REG. 21818 21819 It is an error to use this flag with the frame pointer or stack 21820 pointer. Use of this flag for other registers that have fixed 21821 pervasive roles in the machine's execution model produces 21822 disastrous results. 21823 21824 This flag does not have a negative form, because it specifies a 21825 three-way choice. 21826 21827`-fcall-saved-REG' 21828 Treat the register named REG as an allocable register saved by 21829 functions. It may be allocated even for temporaries or variables 21830 that live across a call. Functions compiled this way save and 21831 restore the register REG if they use it. 21832 21833 It is an error to use this flag with the frame pointer or stack 21834 pointer. Use of this flag for other registers that have fixed 21835 pervasive roles in the machine's execution model produces 21836 disastrous results. 21837 21838 A different sort of disaster results from the use of this flag for 21839 a register in which function values may be returned. 21840 21841 This flag does not have a negative form, because it specifies a 21842 three-way choice. 21843 21844`-fpack-struct[=N]' 21845 Without a value specified, pack all structure members together 21846 without holes. When a value is specified (which must be a small 21847 power of two), pack structure members according to this value, 21848 representing the maximum alignment (that is, objects with default 21849 alignment requirements larger than this are output potentially 21850 unaligned at the next fitting location. 21851 21852 *Warning:* the `-fpack-struct' switch causes GCC to generate code 21853 that is not binary compatible with code generated without that 21854 switch. Additionally, it makes the code suboptimal. Use it to 21855 conform to a non-default application binary interface. 21856 21857`-finstrument-functions' 21858 Generate instrumentation calls for entry and exit to functions. 21859 Just after function entry and just before function exit, the 21860 following profiling functions are called with the address of the 21861 current function and its call site. (On some platforms, 21862 `__builtin_return_address' does not work beyond the current 21863 function, so the call site information may not be available to the 21864 profiling functions otherwise.) 21865 21866 void __cyg_profile_func_enter (void *this_fn, 21867 void *call_site); 21868 void __cyg_profile_func_exit (void *this_fn, 21869 void *call_site); 21870 21871 The first argument is the address of the start of the current 21872 function, which may be looked up exactly in the symbol table. 21873 21874 This instrumentation is also done for functions expanded inline in 21875 other functions. The profiling calls indicate where, 21876 conceptually, the inline function is entered and exited. This 21877 means that addressable versions of such functions must be 21878 available. If all your uses of a function are expanded inline, 21879 this may mean an additional expansion of code size. If you use 21880 `extern inline' in your C code, an addressable version of such 21881 functions must be provided. (This is normally the case anyway, 21882 but if you get lucky and the optimizer always expands the 21883 functions inline, you might have gotten away without providing 21884 static copies.) 21885 21886 A function may be given the attribute `no_instrument_function', in 21887 which case this instrumentation is not done. This can be used, for 21888 example, for the profiling functions listed above, high-priority 21889 interrupt routines, and any functions from which the profiling 21890 functions cannot safely be called (perhaps signal handlers, if the 21891 profiling routines generate output or allocate memory). 21892 21893`-finstrument-functions-exclude-file-list=FILE,FILE,...' 21894 Set the list of functions that are excluded from instrumentation 21895 (see the description of `-finstrument-functions'). If the file 21896 that contains a function definition matches with one of FILE, then 21897 that function is not instrumented. The match is done on 21898 substrings: if the FILE parameter is a substring of the file name, 21899 it is considered to be a match. 21900 21901 For example: 21902 21903 -finstrument-functions-exclude-file-list=/bits/stl,include/sys 21904 21905 excludes any inline function defined in files whose pathnames 21906 contain `/bits/stl' or `include/sys'. 21907 21908 If, for some reason, you want to include letter `,' in one of SYM, 21909 write `\,'. For example, 21910 `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the 21911 single quote surrounding the option). 21912 21913`-finstrument-functions-exclude-function-list=SYM,SYM,...' 21914 This is similar to `-finstrument-functions-exclude-file-list', but 21915 this option sets the list of function names to be excluded from 21916 instrumentation. The function name to be matched is its 21917 user-visible name, such as `vector<int> blah(const vector<int> 21918 &)', not the internal mangled name (e.g., 21919 `_Z4blahRSt6vectorIiSaIiEE'). The match is done on substrings: if 21920 the SYM parameter is a substring of the function name, it is 21921 considered to be a match. For C99 and C++ extended identifiers, 21922 the function name must be given in UTF-8, not using universal 21923 character names. 21924 21925`-fstack-check' 21926 Generate code to verify that you do not go beyond the boundary of 21927 the stack. You should specify this flag if you are running in an 21928 environment with multiple threads, but you only rarely need to 21929 specify it in a single-threaded environment since stack overflow 21930 is automatically detected on nearly all systems if there is only 21931 one stack. 21932 21933 Note that this switch does not actually cause checking to be done; 21934 the operating system or the language runtime must do that. The 21935 switch causes generation of code to ensure that they see the stack 21936 being extended. 21937 21938 You can additionally specify a string parameter: `no' means no 21939 checking, `generic' means force the use of old-style checking, 21940 `specific' means use the best checking method and is equivalent to 21941 bare `-fstack-check'. 21942 21943 Old-style checking is a generic mechanism that requires no specific 21944 target support in the compiler but comes with the following 21945 drawbacks: 21946 21947 1. Modified allocation strategy for large objects: they are 21948 always allocated dynamically if their size exceeds a fixed 21949 threshold. 21950 21951 2. Fixed limit on the size of the static frame of functions: 21952 when it is topped by a particular function, stack checking is 21953 not reliable and a warning is issued by the compiler. 21954 21955 3. Inefficiency: because of both the modified allocation 21956 strategy and the generic implementation, code performance is 21957 hampered. 21958 21959 Note that old-style stack checking is also the fallback method for 21960 `specific' if no target support has been added in the compiler. 21961 21962`-fstack-limit-register=REG' 21963`-fstack-limit-symbol=SYM' 21964`-fno-stack-limit' 21965 Generate code to ensure that the stack does not grow beyond a 21966 certain value, either the value of a register or the address of a 21967 symbol. If a larger stack is required, a signal is raised at run 21968 time. For most targets, the signal is raised before the stack 21969 overruns the boundary, so it is possible to catch the signal 21970 without taking special precautions. 21971 21972 For instance, if the stack starts at absolute address `0x80000000' 21973 and grows downwards, you can use the flags 21974 `-fstack-limit-symbol=__stack_limit' and 21975 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 21976 of 128KB. Note that this may only work with the GNU linker. 21977 21978`-fsplit-stack' 21979 Generate code to automatically split the stack before it overflows. 21980 The resulting program has a discontiguous stack which can only 21981 overflow if the program is unable to allocate any more memory. 21982 This is most useful when running threaded programs, as it is no 21983 longer necessary to calculate a good stack size to use for each 21984 thread. This is currently only implemented for the x86 targets 21985 running GNU/Linux. 21986 21987 When code compiled with `-fsplit-stack' calls code compiled 21988 without `-fsplit-stack', there may not be much stack space 21989 available for the latter code to run. If compiling all code, 21990 including library code, with `-fsplit-stack' is not an option, 21991 then the linker can fix up these calls so that the code compiled 21992 without `-fsplit-stack' always has a large stack. Support for 21993 this is implemented in the gold linker in GNU binutils release 2.21 21994 and later. 21995 21996`-fleading-underscore' 21997 This option and its counterpart, `-fno-leading-underscore', 21998 forcibly change the way C symbols are represented in the object 21999 file. One use is to help link with legacy assembly code. 22000 22001 *Warning:* the `-fleading-underscore' switch causes GCC to 22002 generate code that is not binary compatible with code generated 22003 without that switch. Use it to conform to a non-default 22004 application binary interface. Not all targets provide complete 22005 support for this switch. 22006 22007`-ftls-model=MODEL' 22008 Alter the thread-local storage model to be used (*note 22009 Thread-Local::). The MODEL argument should be one of 22010 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 22011 Note that the choice is subject to optimization: the compiler may 22012 use a more efficient model for symbols not visible outside of the 22013 translation unit, or if `-fpic' is not given on the command line. 22014 22015 The default without `-fpic' is `initial-exec'; with `-fpic' the 22016 default is `global-dynamic'. 22017 22018`-fvisibility=[default|internal|hidden|protected]' 22019 Set the default ELF image symbol visibility to the specified 22020 option--all symbols are marked with this unless overridden within 22021 the code. Using this feature can very substantially improve 22022 linking and load times of shared object libraries, produce more 22023 optimized code, provide near-perfect API export and prevent symbol 22024 clashes. It is *strongly* recommended that you use this in any 22025 shared objects you distribute. 22026 22027 Despite the nomenclature, `default' always means public; i.e., 22028 available to be linked against from outside the shared object. 22029 `protected' and `internal' are pretty useless in real-world usage 22030 so the only other commonly used option is `hidden'. The default 22031 if `-fvisibility' isn't specified is `default', i.e., make every 22032 symbol public. 22033 22034 A good explanation of the benefits offered by ensuring ELF symbols 22035 have the correct visibility is given by "How To Write Shared 22036 Libraries" by Ulrich Drepper (which can be found at 22037 `http://www.akkadia.org/drepper/')--however a superior solution 22038 made possible by this option to marking things hidden when the 22039 default is public is to make the default hidden and mark things 22040 public. This is the norm with DLLs on Windows and with 22041 `-fvisibility=hidden' and `__attribute__ 22042 ((visibility("default")))' instead of `__declspec(dllexport)' you 22043 get almost identical semantics with identical syntax. This is a 22044 great boon to those working with cross-platform projects. 22045 22046 For those adding visibility support to existing code, you may find 22047 `#pragma GCC visibility' of use. This works by you enclosing the 22048 declarations you wish to set visibility for with (for example) 22049 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility 22050 pop'. Bear in mind that symbol visibility should be viewed *as 22051 part of the API interface contract* and thus all new code should 22052 always specify visibility when it is not the default; i.e., 22053 declarations only for use within the local DSO should *always* be 22054 marked explicitly as hidden as so to avoid PLT indirection 22055 overheads--making this abundantly clear also aids readability and 22056 self-documentation of the code. Note that due to ISO C++ 22057 specification requirements, `operator new' and `operator delete' 22058 must always be of default visibility. 22059 22060 Be aware that headers from outside your project, in particular 22061 system headers and headers from any other library you use, may not 22062 be expecting to be compiled with visibility other than the 22063 default. You may need to explicitly say `#pragma GCC visibility 22064 push(default)' before including any such headers. 22065 22066 `extern' declarations are not affected by `-fvisibility', so a lot 22067 of code can be recompiled with `-fvisibility=hidden' with no 22068 modifications. However, this means that calls to `extern' 22069 functions with no explicit visibility use the PLT, so it is more 22070 effective to use `__attribute ((visibility))' and/or `#pragma GCC 22071 visibility' to tell the compiler which `extern' declarations 22072 should be treated as hidden. 22073 22074 Note that `-fvisibility' does affect C++ vague linkage entities. 22075 This means that, for instance, an exception class that is be 22076 thrown between DSOs must be explicitly marked with default 22077 visibility so that the `type_info' nodes are unified between the 22078 DSOs. 22079 22080 An overview of these techniques, their benefits and how to use them 22081 is at `http://gcc.gnu.org/wiki/Visibility'. 22082 22083`-fstrict-volatile-bitfields' 22084 This option should be used if accesses to volatile bit-fields (or 22085 other structure fields, although the compiler usually honors those 22086 types anyway) should use a single access of the width of the 22087 field's type, aligned to a natural alignment if possible. For 22088 example, targets with memory-mapped peripheral registers might 22089 require all such accesses to be 16 bits wide; with this flag you 22090 can declare all peripheral bit-fields as `unsigned short' 22091 (assuming short is 16 bits on these targets) to force GCC to use 22092 16-bit accesses instead of, perhaps, a more efficient 32-bit 22093 access. 22094 22095 If this option is disabled, the compiler uses the most efficient 22096 instruction. In the previous example, that might be a 32-bit load 22097 instruction, even though that accesses bytes that do not contain 22098 any portion of the bit-field, or memory-mapped registers unrelated 22099 to the one being updated. 22100 22101 In some cases, such as when the `packed' attribute is applied to a 22102 structure field, it may not be possible to access the field with a 22103 single read or write that is correctly aligned for the target 22104 machine. In this case GCC falls back to generating multiple 22105 accesses rather than code that will fault or truncate the result 22106 at run time. 22107 22108 Note: Due to restrictions of the C/C++11 memory model, write 22109 accesses are not allowed to touch non bit-field members. It is 22110 therefore recommended to define all bits of the field's type as 22111 bit-field members. 22112 22113 The default value of this option is determined by the application 22114 binary interface for the target processor. 22115 22116`-fsync-libcalls' 22117 This option controls whether any out-of-line instance of the 22118 `__sync' family of functions may be used to implement the C++11 22119 `__atomic' family of functions. 22120 22121 The default value of this option is enabled, thus the only useful 22122 form of the option is `-fno-sync-libcalls'. This option is used in 22123 the implementation of the `libatomic' runtime library. 22124 22125 22126 22127File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 22128 221293.19 Environment Variables Affecting GCC 22130======================================== 22131 22132This section describes several environment variables that affect how GCC 22133operates. Some of them work by specifying directories or prefixes to 22134use when searching for various kinds of files. Some are used to 22135specify other aspects of the compilation environment. 22136 22137 Note that you can also specify places to search using options such as 22138`-B', `-I' and `-L' (*note Directory Options::). These take precedence 22139over places specified using environment variables, which in turn take 22140precedence over those specified by the configuration of GCC. *Note 22141Controlling the Compilation Driver `gcc': (gccint)Driver. 22142 22143`LANG' 22144`LC_CTYPE' 22145`LC_MESSAGES' 22146`LC_ALL' 22147 These environment variables control the way that GCC uses 22148 localization information which allows GCC to work with different 22149 national conventions. GCC inspects the locale categories 22150 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 22151 These locale categories can be set to any value supported by your 22152 installation. A typical value is `en_GB.UTF-8' for English in the 22153 United Kingdom encoded in UTF-8. 22154 22155 The `LC_CTYPE' environment variable specifies character 22156 classification. GCC uses it to determine the character boundaries 22157 in a string; this is needed for some multibyte encodings that 22158 contain quote and escape characters that are otherwise interpreted 22159 as a string end or escape. 22160 22161 The `LC_MESSAGES' environment variable specifies the language to 22162 use in diagnostic messages. 22163 22164 If the `LC_ALL' environment variable is set, it overrides the value 22165 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 22166 `LC_MESSAGES' default to the value of the `LANG' environment 22167 variable. If none of these variables are set, GCC defaults to 22168 traditional C English behavior. 22169 22170`TMPDIR' 22171 If `TMPDIR' is set, it specifies the directory to use for temporary 22172 files. GCC uses temporary files to hold the output of one stage of 22173 compilation which is to be used as input to the next stage: for 22174 example, the output of the preprocessor, which is the input to the 22175 compiler proper. 22176 22177`GCC_COMPARE_DEBUG' 22178 Setting `GCC_COMPARE_DEBUG' is nearly equivalent to passing 22179 `-fcompare-debug' to the compiler driver. See the documentation 22180 of this option for more details. 22181 22182`GCC_EXEC_PREFIX' 22183 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 22184 names of the subprograms executed by the compiler. No slash is 22185 added when this prefix is combined with the name of a subprogram, 22186 but you can specify a prefix that ends with a slash if you wish. 22187 22188 If `GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an 22189 appropriate prefix to use based on the pathname it is invoked with. 22190 22191 If GCC cannot find the subprogram using the specified prefix, it 22192 tries looking in the usual places for the subprogram. 22193 22194 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 22195 PREFIX is the prefix to the installed compiler. In many cases 22196 PREFIX is the value of `prefix' when you ran the `configure' 22197 script. 22198 22199 Other prefixes specified with `-B' take precedence over this 22200 prefix. 22201 22202 This prefix is also used for finding files such as `crt0.o' that 22203 are used for linking. 22204 22205 In addition, the prefix is used in an unusual way in finding the 22206 directories to search for header files. For each of the standard 22207 directories whose name normally begins with `/usr/local/lib/gcc' 22208 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 22209 replacing that beginning with the specified prefix to produce an 22210 alternate directory name. Thus, with `-Bfoo/', GCC searches 22211 `foo/bar' just before it searches the standard directory 22212 `/usr/local/lib/bar'. If a standard directory begins with the 22213 configured PREFIX then the value of PREFIX is replaced by 22214 `GCC_EXEC_PREFIX' when looking for header files. 22215 22216`COMPILER_PATH' 22217 The value of `COMPILER_PATH' is a colon-separated list of 22218 directories, much like `PATH'. GCC tries the directories thus 22219 specified when searching for subprograms, if it can't find the 22220 subprograms using `GCC_EXEC_PREFIX'. 22221 22222`LIBRARY_PATH' 22223 The value of `LIBRARY_PATH' is a colon-separated list of 22224 directories, much like `PATH'. When configured as a native 22225 compiler, GCC tries the directories thus specified when searching 22226 for special linker files, if it can't find them using 22227 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 22228 when searching for ordinary libraries for the `-l' option (but 22229 directories specified with `-L' come first). 22230 22231`LANG' 22232 This variable is used to pass locale information to the compiler. 22233 One way in which this information is used is to determine the 22234 character set to be used when character literals, string literals 22235 and comments are parsed in C and C++. When the compiler is 22236 configured to allow multibyte characters, the following values for 22237 `LANG' are recognized: 22238 22239 `C-JIS' 22240 Recognize JIS characters. 22241 22242 `C-SJIS' 22243 Recognize SJIS characters. 22244 22245 `C-EUCJP' 22246 Recognize EUCJP characters. 22247 22248 If `LANG' is not defined, or if it has some other value, then the 22249 compiler uses `mblen' and `mbtowc' as defined by the default 22250 locale to recognize and translate multibyte characters. 22251 22252Some additional environment variables affect the behavior of the 22253preprocessor. 22254 22255`CPATH' 22256`C_INCLUDE_PATH' 22257`CPLUS_INCLUDE_PATH' 22258`OBJC_INCLUDE_PATH' 22259 Each variable's value is a list of directories separated by a 22260 special character, much like `PATH', in which to look for header 22261 files. The special character, `PATH_SEPARATOR', is 22262 target-dependent and determined at GCC build time. For Microsoft 22263 Windows-based targets it is a semicolon, and for almost all other 22264 targets it is a colon. 22265 22266 `CPATH' specifies a list of directories to be searched as if 22267 specified with `-I', but after any paths given with `-I' options 22268 on the command line. This environment variable is used regardless 22269 of which language is being preprocessed. 22270 22271 The remaining environment variables apply only when preprocessing 22272 the particular language indicated. Each specifies a list of 22273 directories to be searched as if specified with `-isystem', but 22274 after any paths given with `-isystem' options on the command line. 22275 22276 In all these variables, an empty element instructs the compiler to 22277 search its current working directory. Empty elements can appear 22278 at the beginning or end of a path. For instance, if the value of 22279 `CPATH' is `:/special/include', that has the same effect as 22280 `-I. -I/special/include'. 22281 22282`DEPENDENCIES_OUTPUT' 22283 If this variable is set, its value specifies how to output 22284 dependencies for Make based on the non-system header files 22285 processed by the compiler. System header files are ignored in the 22286 dependency output. 22287 22288 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 22289 which case the Make rules are written to that file, guessing the 22290 target name from the source file name. Or the value can have the 22291 form `FILE TARGET', in which case the rules are written to file 22292 FILE using TARGET as the target name. 22293 22294 In other words, this environment variable is equivalent to 22295 combining the options `-MM' and `-MF' (*note Preprocessor 22296 Options::), with an optional `-MT' switch too. 22297 22298`SUNPRO_DEPENDENCIES' 22299 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 22300 except that system header files are not ignored, so it implies 22301 `-M' rather than `-MM'. However, the dependence on the main input 22302 file is omitted. *Note Preprocessor Options::. 22303 22304`CPP_RESTRICTED' 22305 If this variable is defined, cpp will skip any include file which 22306 is not a regular file, and will continue searching for the 22307 requested name (this is always done if the found file is a 22308 directory). *Note Preprocessor Options::. 22309 22310 22311 22312File: gcc.info, Node: Precompiled Headers, Prev: Environment Variables, Up: Invoking GCC 22313 223143.20 Using Precompiled Headers 22315============================== 22316 22317Often large projects have many header files that are included in every 22318source file. The time the compiler takes to process these header files 22319over and over again can account for nearly all of the time required to 22320build the project. To make builds faster, GCC allows you to 22321"precompile" a header file. 22322 22323 To create a precompiled header file, simply compile it as you would any 22324other file, if necessary using the `-x' option to make the driver treat 22325it as a C or C++ header file. You may want to use a tool like `make' 22326to keep the precompiled header up-to-date when the headers it contains 22327change. 22328 22329 A precompiled header file is searched for when `#include' is seen in 22330the compilation. As it searches for the included file (*note Search 22331Path: (cpp)Search Path.) the compiler looks for a precompiled header in 22332each directory just before it looks for the include file in that 22333directory. The name searched for is the name specified in the 22334`#include' with `.gch' appended. If the precompiled header file can't 22335be used, it is ignored. 22336 22337 For instance, if you have `#include "all.h"', and you have `all.h.gch' 22338in the same directory as `all.h', then the precompiled header file is 22339used if possible, and the original header is used otherwise. 22340 22341 Alternatively, you might decide to put the precompiled header file in a 22342directory and use `-I' to ensure that directory is searched before (or 22343instead of) the directory containing the original header. Then, if you 22344want to check that the precompiled header file is always used, you can 22345put a file of the same name as the original header in this directory 22346containing an `#error' command. 22347 22348 This also works with `-include'. So yet another way to use 22349precompiled headers, good for projects not designed with precompiled 22350header files in mind, is to simply take most of the header files used by 22351a project, include them from another header file, precompile that header 22352file, and `-include' the precompiled header. If the header files have 22353guards against multiple inclusion, they are skipped because they've 22354already been included (in the precompiled header). 22355 22356 If you need to precompile the same header file for different 22357languages, targets, or compiler options, you can instead make a 22358_directory_ named like `all.h.gch', and put each precompiled header in 22359the directory, perhaps using `-o'. It doesn't matter what you call the 22360files in the directory; every precompiled header in the directory is 22361considered. The first precompiled header encountered in the directory 22362that is valid for this compilation is used; they're searched in no 22363particular order. 22364 22365 There are many other possibilities, limited only by your imagination, 22366good sense, and the constraints of your build system. 22367 22368 A precompiled header file can be used only when these conditions apply: 22369 22370 * Only one precompiled header can be used in a particular 22371 compilation. 22372 22373 * A precompiled header can't be used once the first C token is seen. 22374 You can have preprocessor directives before a precompiled header; 22375 you cannot include a precompiled header from inside another header. 22376 22377 * The precompiled header file must be produced for the same language 22378 as the current compilation. You can't use a C precompiled header 22379 for a C++ compilation. 22380 22381 * The precompiled header file must have been produced by the same 22382 compiler binary as the current compilation is using. 22383 22384 * Any macros defined before the precompiled header is included must 22385 either be defined in the same way as when the precompiled header 22386 was generated, or must not affect the precompiled header, which 22387 usually means that they don't appear in the precompiled header at 22388 all. 22389 22390 The `-D' option is one way to define a macro before a precompiled 22391 header is included; using a `#define' can also do it. There are 22392 also some options that define macros implicitly, like `-O' and 22393 `-Wdeprecated'; the same rule applies to macros defined this way. 22394 22395 * If debugging information is output when using the precompiled 22396 header, using `-g' or similar, the same kind of debugging 22397 information must have been output when building the precompiled 22398 header. However, a precompiled header built using `-g' can be 22399 used in a compilation when no debugging information is being 22400 output. 22401 22402 * The same `-m' options must generally be used when building and 22403 using the precompiled header. *Note Submodel Options::, for any 22404 cases where this rule is relaxed. 22405 22406 * Each of the following options must be the same when building and 22407 using the precompiled header: 22408 22409 -fexceptions 22410 22411 * Some other command-line options starting with `-f', `-p', or `-O' 22412 must be defined in the same way as when the precompiled header was 22413 generated. At present, it's not clear which options are safe to 22414 change and which are not; the safest choice is to use exactly the 22415 same options when generating and using the precompiled header. 22416 The following are known to be safe: 22417 22418 -fmessage-length= -fpreprocessed -fsched-interblock 22419 -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 22420 -fsched-verbose=NUMBER -fschedule-insns -fvisibility= 22421 -pedantic-errors 22422 22423 22424 For all of these except the last, the compiler automatically ignores 22425the precompiled header if the conditions aren't met. If you find an 22426option combination that doesn't work and doesn't cause the precompiled 22427header to be ignored, please consider filing a bug report, see *Note 22428Bugs::. 22429 22430 If you do use differing options when generating and using the 22431precompiled header, the actual behavior is a mixture of the behavior 22432for the options. For instance, if you use `-g' to generate the 22433precompiled header but not when using it, you may or may not get 22434debugging information for routines in the precompiled header. 22435 22436 22437File: gcc.info, Node: C Implementation, Next: C++ Implementation, Prev: Invoking GCC, Up: Top 22438 224394 C Implementation-Defined Behavior 22440*********************************** 22441 22442A conforming implementation of ISO C is required to document its choice 22443of behavior in each of the areas that are designated "implementation 22444defined". The following lists all such areas, along with the section 22445numbers from the ISO/IEC 9899:1990, ISO/IEC 9899:1999 and ISO/IEC 224469899:2011 standards. Some areas are only implementation-defined in one 22447version of the standard. 22448 22449 Some choices depend on the externally determined ABI for the platform 22450(including standard character encodings) which GCC follows; these are 22451listed as "determined by ABI" below. *Note Binary Compatibility: 22452Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 22453are documented in the preprocessor manual. *Note 22454Implementation-defined behavior: (cpp)Implementation-defined behavior. 22455Some choices are made by the library and operating system (or other 22456environment when compiling for a freestanding environment); refer to 22457their documentation for details. 22458 22459* Menu: 22460 22461* Translation implementation:: 22462* Environment implementation:: 22463* Identifiers implementation:: 22464* Characters implementation:: 22465* Integers implementation:: 22466* Floating point implementation:: 22467* Arrays and pointers implementation:: 22468* Hints implementation:: 22469* Structures unions enumerations and bit-fields implementation:: 22470* Qualifiers implementation:: 22471* Declarators implementation:: 22472* Statements implementation:: 22473* Preprocessing directives implementation:: 22474* Library functions implementation:: 22475* Architecture implementation:: 22476* Locale-specific behavior implementation:: 22477 22478 22479File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 22480 224814.1 Translation 22482=============== 22483 22484 * `How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90, 22485 C99 and C11 5.1.1.3).' 22486 22487 Diagnostics consist of all the output sent to stderr by GCC. 22488 22489 * `Whether each nonempty sequence of white-space characters other 22490 than new-line is retained or replaced by one space character in 22491 translation phase 3 (C90, C99 and C11 5.1.1.2).' 22492 22493 *Note Implementation-defined behavior: (cpp)Implementation-defined 22494 behavior. 22495 22496 22497 22498File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 22499 225004.2 Environment 22501=============== 22502 22503The behavior of most of these points are dependent on the implementation 22504of the C library, and are not defined by GCC itself. 22505 22506 * `The mapping between physical source file multibyte characters and 22507 the source character set in translation phase 1 (C90, C99 and C11 22508 5.1.1.2).' 22509 22510 *Note Implementation-defined behavior: (cpp)Implementation-defined 22511 behavior. 22512 22513 22514 22515File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 22516 225174.3 Identifiers 22518=============== 22519 22520 * `Which additional multibyte characters may appear in identifiers 22521 and their correspondence to universal character names (C99 and C11 22522 6.4.2).' 22523 22524 *Note Implementation-defined behavior: (cpp)Implementation-defined 22525 behavior. 22526 22527 * `The number of significant initial characters in an identifier 22528 (C90 6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).' 22529 22530 For internal names, all characters are significant. For external 22531 names, the number of significant characters are defined by the 22532 linker; for almost all targets, all characters are significant. 22533 22534 * `Whether case distinctions are significant in an identifier with 22535 external linkage (C90 6.1.2).' 22536 22537 This is a property of the linker. C99 and C11 require that case 22538 distinctions are always significant in identifiers with external 22539 linkage and systems without this property are not supported by GCC. 22540 22541 22542 22543File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 22544 225454.4 Characters 22546============== 22547 22548 * `The number of bits in a byte (C90 3.4, C99 and C11 3.6).' 22549 22550 Determined by ABI. 22551 22552 * `The values of the members of the execution character set (C90, 22553 C99 and C11 5.2.1).' 22554 22555 Determined by ABI. 22556 22557 * `The unique value of the member of the execution character set 22558 produced for each of the standard alphabetic escape sequences 22559 (C90, C99 and C11 5.2.2).' 22560 22561 Determined by ABI. 22562 22563 * `The value of a `char' object into which has been stored any 22564 character other than a member of the basic execution character set 22565 (C90 6.1.2.5, C99 and C11 6.2.5).' 22566 22567 Determined by ABI. 22568 22569 * `Which of `signed char' or `unsigned char' has the same range, 22570 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90 22571 6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).' 22572 22573 Determined by ABI. The options `-funsigned-char' and 22574 `-fsigned-char' change the default. *Note Options Controlling C 22575 Dialect: C Dialect Options. 22576 22577 * `The mapping of members of the source character set (in character 22578 constants and string literals) to members of the execution 22579 character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11 22580 5.1.1.2).' 22581 22582 Determined by ABI. 22583 22584 * `The value of an integer character constant containing more than 22585 one character or containing a character or escape sequence that 22586 does not map to a single-byte execution character (C90 6.1.3.4, 22587 C99 and C11 6.4.4.4).' 22588 22589 *Note Implementation-defined behavior: (cpp)Implementation-defined 22590 behavior. 22591 22592 * `The value of a wide character constant containing more than one 22593 multibyte character or a single multibyte character that maps to 22594 multiple members of the extended execution character set, or 22595 containing a multibyte character or escape sequence not 22596 represented in the extended execution character set (C90 6.1.3.4, 22597 C99 and C11 6.4.4.4).' 22598 22599 *Note Implementation-defined behavior: (cpp)Implementation-defined 22600 behavior. 22601 22602 * `The current locale used to convert a wide character constant 22603 consisting of a single multibyte character that maps to a member 22604 of the extended execution character set into a corresponding wide 22605 character code (C90 6.1.3.4, C99 and C11 6.4.4.4).' 22606 22607 *Note Implementation-defined behavior: (cpp)Implementation-defined 22608 behavior. 22609 22610 * `Whether differently-prefixed wide string literal tokens can be 22611 concatenated and, if so, the treatment of the resulting multibyte 22612 character sequence (C11 6.4.5).' 22613 22614 Such tokens may not be concatenated. 22615 22616 * `The current locale used to convert a wide string literal into 22617 corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).' 22618 22619 *Note Implementation-defined behavior: (cpp)Implementation-defined 22620 behavior. 22621 22622 * `The value of a string literal containing a multibyte character or 22623 escape sequence not represented in the execution character set 22624 (C90 6.1.4, C99 and C11 6.4.5).' 22625 22626 *Note Implementation-defined behavior: (cpp)Implementation-defined 22627 behavior. 22628 22629 * `The encoding of any of `wchar_t', `char16_t', and `char32_t' 22630 where the corresponding standard encoding macro 22631 (`__STDC_ISO_10646__', `__STDC_UTF_16__', or `__STDC_UTF_32__') is 22632 not defined (C11 6.10.8.2).' 22633 22634 *Note Implementation-defined behavior: (cpp)Implementation-defined 22635 behavior. `char16_t' and `char32_t' literals are always encoded 22636 in UTF-16 and UTF-32 respectively. 22637 22638 22639 22640File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 22641 226424.5 Integers 22643============ 22644 22645 * `Any extended integer types that exist in the implementation (C99 22646 and C11 6.2.5).' 22647 22648 GCC does not support any extended integer types. 22649 22650 * `Whether signed integer types are represented using sign and 22651 magnitude, two's complement, or one's complement, and whether the 22652 extraordinary value is a trap representation or an ordinary value 22653 (C99 and C11 6.2.6.2).' 22654 22655 GCC supports only two's complement integer types, and all bit 22656 patterns are ordinary values. 22657 22658 * `The rank of any extended integer type relative to another extended 22659 integer type with the same precision (C99 and C11 6.3.1.1).' 22660 22661 GCC does not support any extended integer types. 22662 22663 * `The result of, or the signal raised by, converting an integer to a 22664 signed integer type when the value cannot be represented in an 22665 object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).' 22666 22667 For conversion to a type of width N, the value is reduced modulo 22668 2^N to be within range of the type; no signal is raised. 22669 22670 * `The results of some bitwise operations on signed integers (C90 22671 6.3, C99 and C11 6.5).' 22672 22673 Bitwise operators act on the representation of the value including 22674 both the sign and value bits, where the sign bit is considered 22675 immediately above the highest-value value bit. Signed `>>' acts 22676 on negative numbers by sign extension. 22677 22678 GCC does not use the latitude given in C99 and C11 only to treat 22679 certain aspects of signed `<<' as undefined, but this is subject to 22680 change. 22681 22682 * `The sign of the remainder on integer division (C90 6.3.5).' 22683 22684 GCC always follows the C99 and C11 requirement that the result of 22685 division is truncated towards zero. 22686 22687 22688 22689File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 22690 226914.6 Floating Point 22692================== 22693 22694 * `The accuracy of the floating-point operations and of the library 22695 functions in `<math.h>' and `<complex.h>' that return 22696 floating-point results (C90, C99 and C11 5.2.4.2.2).' 22697 22698 The accuracy is unknown. 22699 22700 * `The rounding behaviors characterized by non-standard values of 22701 `FLT_ROUNDS' (C90, C99 and C11 5.2.4.2.2).' 22702 22703 GCC does not use such values. 22704 22705 * `The evaluation methods characterized by non-standard negative 22706 values of `FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).' 22707 22708 GCC does not use such values. 22709 22710 * `The direction of rounding when an integer is converted to a 22711 floating-point number that cannot exactly represent the original 22712 value (C90 6.2.1.3, C99 and C11 6.3.1.4).' 22713 22714 C99 Annex F is followed. 22715 22716 * `The direction of rounding when a floating-point number is 22717 converted to a narrower floating-point number (C90 6.2.1.4, C99 22718 and C11 6.3.1.5).' 22719 22720 C99 Annex F is followed. 22721 22722 * `How the nearest representable value or the larger or smaller 22723 representable value immediately adjacent to the nearest 22724 representable value is chosen for certain floating constants (C90 22725 6.1.3.1, C99 and C11 6.4.4.2).' 22726 22727 C99 Annex F is followed. 22728 22729 * `Whether and how floating expressions are contracted when not 22730 disallowed by the `FP_CONTRACT' pragma (C99 and C11 6.5).' 22731 22732 Expressions are currently only contracted if `-ffp-contract=fast', 22733 `-funsafe-math-optimizations' or `-ffast-math' are used. This is 22734 subject to change. 22735 22736 * `The default state for the `FENV_ACCESS' pragma (C99 and C11 22737 7.6.1).' 22738 22739 This pragma is not implemented, but the default is to "off" unless 22740 `-frounding-math' is used in which case it is "on". 22741 22742 * `Additional floating-point exceptions, rounding modes, 22743 environments, and classifications, and their macro names (C99 and 22744 C11 7.6, C99 and C11 7.12).' 22745 22746 This is dependent on the implementation of the C library, and is 22747 not defined by GCC itself. 22748 22749 * `The default state for the `FP_CONTRACT' pragma (C99 and C11 22750 7.12.2).' 22751 22752 This pragma is not implemented. Expressions are currently only 22753 contracted if `-ffp-contract=fast', `-funsafe-math-optimizations' 22754 or `-ffast-math' are used. This is subject to change. 22755 22756 * `Whether the "inexact" floating-point exception can be raised when 22757 the rounded result actually does equal the mathematical result in 22758 an IEC 60559 conformant implementation (C99 F.9).' 22759 22760 This is dependent on the implementation of the C library, and is 22761 not defined by GCC itself. 22762 22763 * `Whether the "underflow" (and "inexact") floating-point exception 22764 can be raised when a result is tiny but not inexact in an IEC 22765 60559 conformant implementation (C99 F.9).' 22766 22767 This is dependent on the implementation of the C library, and is 22768 not defined by GCC itself. 22769 22770 22771 22772File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 22773 227744.7 Arrays and Pointers 22775======================= 22776 22777 * `The result of converting a pointer to an integer or vice versa 22778 (C90 6.3.4, C99 and C11 6.3.2.3).' 22779 22780 A cast from pointer to integer discards most-significant bits if 22781 the pointer representation is larger than the integer type, 22782 sign-extends(1) if the pointer representation is smaller than the 22783 integer type, otherwise the bits are unchanged. 22784 22785 A cast from integer to pointer discards most-significant bits if 22786 the pointer representation is smaller than the integer type, 22787 extends according to the signedness of the integer type if the 22788 pointer representation is larger than the integer type, otherwise 22789 the bits are unchanged. 22790 22791 When casting from pointer to integer and back again, the resulting 22792 pointer must reference the same object as the original pointer, 22793 otherwise the behavior is undefined. That is, one may not use 22794 integer arithmetic to avoid the undefined behavior of pointer 22795 arithmetic as proscribed in C99 and C11 6.5.6/8. 22796 22797 * `The size of the result of subtracting two pointers to elements of 22798 the same array (C90 6.3.6, C99 and C11 6.5.6).' 22799 22800 The value is as specified in the standard and the type is 22801 determined by the ABI. 22802 22803 22804 ---------- Footnotes ---------- 22805 22806 (1) Future versions of GCC may zero-extend, or use a target-defined 22807`ptr_extend' pattern. Do not rely on sign extension. 22808 22809 22810File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 22811 228124.8 Hints 22813========= 22814 22815 * `The extent to which suggestions made by using the `register' 22816 storage-class specifier are effective (C90 6.5.1, C99 and C11 22817 6.7.1).' 22818 22819 The `register' specifier affects code generation only in these 22820 ways: 22821 22822 * When used as part of the register variable extension, see 22823 *Note Explicit Reg Vars::. 22824 22825 * When `-O0' is in use, the compiler allocates distinct stack 22826 memory for all variables that do not have the `register' 22827 storage-class specifier; if `register' is specified, the 22828 variable may have a shorter lifespan than the code would 22829 indicate and may never be placed in memory. 22830 22831 * On some rare x86 targets, `setjmp' doesn't save the registers 22832 in all circumstances. In those cases, GCC doesn't allocate 22833 any variables in registers unless they are marked `register'. 22834 22835 22836 * `The extent to which suggestions made by using the inline function 22837 specifier are effective (C99 and C11 6.7.4).' 22838 22839 GCC will not inline any functions if the `-fno-inline' option is 22840 used or if `-O0' is used. Otherwise, GCC may still be unable to 22841 inline a function for many reasons; the `-Winline' option may be 22842 used to determine if a function has not been inlined and why not. 22843 22844 22845 22846File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 22847 228484.9 Structures, Unions, Enumerations, and Bit-Fields 22849==================================================== 22850 22851 * `A member of a union object is accessed using a member of a 22852 different type (C90 6.3.2.3).' 22853 22854 The relevant bytes of the representation of the object are treated 22855 as an object of the type used for the access. *Note 22856 Type-punning::. This may be a trap representation. 22857 22858 * `Whether a "plain" `int' bit-field is treated as a `signed int' 22859 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90 22860 6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).' 22861 22862 By default it is treated as `signed int' but this may be changed 22863 by the `-funsigned-bitfields' option. 22864 22865 * `Allowable bit-field types other than `_Bool', `signed int', and 22866 `unsigned int' (C99 and C11 6.7.2.1).' 22867 22868 Other integer types, such as `long int', and enumerated types are 22869 permitted even in strictly conforming mode. 22870 22871 * `Whether atomic types are permitted for bit-fields (C11 6.7.2.1).' 22872 22873 Atomic types are not permitted for bit-fields. 22874 22875 * `Whether a bit-field can straddle a storage-unit boundary (C90 22876 6.5.2.1, C99 and C11 6.7.2.1).' 22877 22878 Determined by ABI. 22879 22880 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1, 22881 C99 and C11 6.7.2.1).' 22882 22883 Determined by ABI. 22884 22885 * `The alignment of non-bit-field members of structures (C90 22886 6.5.2.1, C99 and C11 6.7.2.1).' 22887 22888 Determined by ABI. 22889 22890 * `The integer type compatible with each enumerated type (C90 22891 6.5.2.2, C99 and C11 6.7.2.2).' 22892 22893 Normally, the type is `unsigned int' if there are no negative 22894 values in the enumeration, otherwise `int'. If `-fshort-enums' is 22895 specified, then if there are negative values it is the first of 22896 `signed char', `short' and `int' that can represent all the 22897 values, otherwise it is the first of `unsigned char', `unsigned 22898 short' and `unsigned int' that can represent all the values. 22899 22900 On some targets, `-fshort-enums' is the default; this is 22901 determined by the ABI. 22902 22903 22904 22905File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 22906 229074.10 Qualifiers 22908=============== 22909 22910 * `What constitutes an access to an object that has 22911 volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).' 22912 22913 Such an object is normally accessed by pointers and used for 22914 accessing hardware. In most expressions, it is intuitively 22915 obvious what is a read and what is a write. For example 22916 22917 volatile int *dst = SOMEVALUE; 22918 volatile int *src = SOMEOTHERVALUE; 22919 *dst = *src; 22920 22921 will cause a read of the volatile object pointed to by SRC and 22922 store the value into the volatile object pointed to by DST. There 22923 is no guarantee that these reads and writes are atomic, especially 22924 for objects larger than `int'. 22925 22926 However, if the volatile storage is not being modified, and the 22927 value of the volatile storage is not used, then the situation is 22928 less obvious. For example 22929 22930 volatile int *src = SOMEVALUE; 22931 *src; 22932 22933 According to the C standard, such an expression is an rvalue whose 22934 type is the unqualified version of its original type, i.e. `int'. 22935 Whether GCC interprets this as a read of the volatile object being 22936 pointed to or only as a request to evaluate the expression for its 22937 side-effects depends on this type. 22938 22939 If it is a scalar type, or on most targets an aggregate type whose 22940 only member object is of a scalar type, or a union type whose 22941 member objects are of scalar types, the expression is interpreted 22942 by GCC as a read of the volatile object; in the other cases, the 22943 expression is only evaluated for its side-effects. 22944 22945 22946 22947File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 22948 229494.11 Declarators 22950================ 22951 22952 * `The maximum number of declarators that may modify an arithmetic, 22953 structure or union type (C90 6.5.4).' 22954 22955 GCC is only limited by available memory. 22956 22957 22958 22959File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 22960 229614.12 Statements 22962=============== 22963 22964 * `The maximum number of `case' values in a `switch' statement (C90 22965 6.6.4.2).' 22966 22967 GCC is only limited by available memory. 22968 22969 22970 22971File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 22972 229734.13 Preprocessing Directives 22974============================= 22975 22976*Note Implementation-defined behavior: (cpp)Implementation-defined 22977behavior, for details of these aspects of implementation-defined 22978behavior. 22979 22980 * `The locations within `#pragma' directives where header name 22981 preprocessing tokens are recognized (C11 6.4, C11 6.4.7).' 22982 22983 * `How sequences in both forms of header names are mapped to headers 22984 or external source file names (C90 6.1.7, C99 and C11 6.4.7).' 22985 22986 * `Whether the value of a character constant in a constant expression 22987 that controls conditional inclusion matches the value of the same 22988 character constant in the execution character set (C90 6.8.1, C99 22989 and C11 6.10.1).' 22990 22991 * `Whether the value of a single-character character constant in a 22992 constant expression that controls conditional inclusion may have a 22993 negative value (C90 6.8.1, C99 and C11 6.10.1).' 22994 22995 * `The places that are searched for an included `<>' delimited 22996 header, and how the places are specified or the header is 22997 identified (C90 6.8.2, C99 and C11 6.10.2).' 22998 22999 * `How the named source file is searched for in an included `""' 23000 delimited header (C90 6.8.2, C99 and C11 6.10.2).' 23001 23002 * `The method by which preprocessing tokens (possibly resulting from 23003 macro expansion) in a `#include' directive are combined into a 23004 header name (C90 6.8.2, C99 and C11 6.10.2).' 23005 23006 * `The nesting limit for `#include' processing (C90 6.8.2, C99 and 23007 C11 6.10.2).' 23008 23009 * `Whether the `#' operator inserts a `\' character before the `\' 23010 character that begins a universal character name in a character 23011 constant or string literal (C99 and C11 6.10.3.2).' 23012 23013 * `The behavior on each recognized non-`STDC #pragma' directive (C90 23014 6.8.6, C99 and C11 6.10.6).' 23015 23016 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by 23017 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 23018 details of target-specific pragmas. 23019 23020 * `The definitions for `__DATE__' and `__TIME__' when respectively, 23021 the date and time of translation are not available (C90 6.8.8, C99 23022 6.10.8, C11 6.10.8.1).' 23023 23024 23025 23026File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 23027 230284.14 Library Functions 23029====================== 23030 23031The behavior of most of these points are dependent on the implementation 23032of the C library, and are not defined by GCC itself. 23033 23034 * `The null pointer constant to which the macro `NULL' expands (C90 23035 7.1.6, C99 7.17, C11 7.19).' 23036 23037 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not 23038 provide the other headers which define `NULL' and some library 23039 implementations may use other definitions in those headers. 23040 23041 23042 23043File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 23044 230454.15 Architecture 23046================= 23047 23048 * `The values or expressions assigned to the macros specified in the 23049 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90, C99 and 23050 C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).' 23051 23052 Determined by ABI. 23053 23054 * `The result of attempting to indirectly access an object with 23055 automatic or thread storage duration from a thread other than the 23056 one with which it is associated (C11 6.2.4).' 23057 23058 Such accesses are supported, subject to the same requirements for 23059 synchronization for concurrent accesses as for concurrent accesses 23060 to any object. 23061 23062 * `The number, order, and encoding of bytes in any object (when not 23063 explicitly specified in this International Standard) (C99 and C11 23064 6.2.6.1).' 23065 23066 Determined by ABI. 23067 23068 * `Whether any extended alignments are supported and the contexts in 23069 which they are supported (C11 6.2.8).' 23070 23071 Extended alignments up to 2^28 (bytes) are supported for objects 23072 of automatic storage duration. Alignments supported for objects 23073 of static and thread storage duration are determined by the ABI. 23074 23075 * `Valid alignment values other than those returned by an _Alignof 23076 expression for fundamental types, if any (C11 6.2.8).' 23077 23078 Valid alignments are powers of 2 up to and including 2^28. 23079 23080 * `The value of the result of the `sizeof' and `_Alignof' operators 23081 (C90 6.3.3.4, C99 and C11 6.5.3.4).' 23082 23083 Determined by ABI. 23084 23085 23086 23087File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 23088 230894.16 Locale-Specific Behavior 23090============================= 23091 23092The behavior of these points are dependent on the implementation of the 23093C library, and are not defined by GCC itself. 23094 23095 23096File: gcc.info, Node: C++ Implementation, Next: C Extensions, Prev: C Implementation, Up: Top 23097 230985 C++ Implementation-Defined Behavior 23099************************************* 23100 23101A conforming implementation of ISO C++ is required to document its 23102choice of behavior in each of the areas that are designated 23103"implementation defined". The following lists all such areas, along 23104with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC 2310514882:2003 standards. Some areas are only implementation-defined in 23106one version of the standard. 23107 23108 Some choices depend on the externally determined ABI for the platform 23109(including standard character encodings) which GCC follows; these are 23110listed as "determined by ABI" below. *Note Binary Compatibility: 23111Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 23112are documented in the preprocessor manual. *Note 23113Implementation-defined behavior: (cpp)Implementation-defined behavior. 23114Some choices are documented in the corresponding document for the C 23115language. *Note C Implementation::. Some choices are made by the 23116library and operating system (or other environment when compiling for a 23117freestanding environment); refer to their documentation for details. 23118 23119* Menu: 23120 23121* Conditionally-supported behavior:: 23122* Exception handling:: 23123 23124 23125File: gcc.info, Node: Conditionally-supported behavior, Next: Exception handling, Up: C++ Implementation 23126 231275.1 Conditionally-Supported Behavior 23128==================================== 23129 23130`Each implementation shall include documentation that identifies all 23131conditionally-supported constructs that it does not support (C++0x 231321.4).' 23133 23134 * `Whether an argument of class type with a non-trivial copy 23135 constructor or destructor can be passed to ... (C++0x 5.2.2).' 23136 23137 Such argument passing is supported, using the same 23138 pass-by-invisible-reference approach used for normal function 23139 arguments of such types. 23140 23141 23142 23143File: gcc.info, Node: Exception handling, Prev: Conditionally-supported behavior, Up: C++ Implementation 23144 231455.2 Exception Handling 23146====================== 23147 23148 * `In the situation where no matching handler is found, it is 23149 implementation-defined whether or not the stack is unwound before 23150 std::terminate() is called (C++98 15.5.1).' 23151 23152 The stack is not unwound before std::terminate is called. 23153 23154 23155 23156File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C++ Implementation, Up: Top 23157 231586 Extensions to the C Language Family 23159************************************* 23160 23161GNU C provides several language features not found in ISO standard C. 23162(The `-pedantic' option directs GCC to print a warning message if any 23163of these features is used.) To test for the availability of these 23164features in conditional compilation, check for a predefined macro 23165`__GNUC__', which is always defined under GCC. 23166 23167 These extensions are available in C and Objective-C. Most of them are 23168also available in C++. *Note Extensions to the C++ Language: C++ 23169Extensions, for extensions that apply _only_ to C++. 23170 23171 Some features that are in ISO C99 but not C90 or C++ are also, as 23172extensions, accepted by GCC in C90 mode and in C++. 23173 23174* Menu: 23175 23176* Statement Exprs:: Putting statements and declarations inside expressions. 23177* Local Labels:: Labels local to a block. 23178* Labels as Values:: Getting pointers to labels, and computed gotos. 23179* Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 23180* Constructing Calls:: Dispatching a call to another function. 23181* Typeof:: `typeof': referring to the type of an expression. 23182* Conditionals:: Omitting the middle operand of a `?:' expression. 23183* __int128:: 128-bit integers---`__int128'. 23184* Long Long:: Double-word integers---`long long int'. 23185* Complex:: Data types for complex numbers. 23186* Floating Types:: Additional Floating Types. 23187* Half-Precision:: Half-Precision Floating Point. 23188* Decimal Float:: Decimal Floating Types. 23189* Hex Floats:: Hexadecimal floating-point constants. 23190* Fixed-Point:: Fixed-Point Types. 23191* Named Address Spaces::Named address spaces. 23192* Zero Length:: Zero-length arrays. 23193* Empty Structures:: Structures with no members. 23194* Variable Length:: Arrays whose length is computed at run time. 23195* Variadic Macros:: Macros with a variable number of arguments. 23196* Escaped Newlines:: Slightly looser rules for escaped newlines. 23197* Subscripting:: Any array can be subscripted, even if not an lvalue. 23198* Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 23199* Pointers to Arrays:: Pointers to arrays with qualifiers work as expected. 23200* Initializers:: Non-constant initializers. 23201* Compound Literals:: Compound literals give structures, unions 23202 or arrays as values. 23203* Designated Inits:: Labeling elements of initializers. 23204* Case Ranges:: `case 1 ... 9' and such. 23205* Cast to Union:: Casting to union type from any member of the union. 23206* Mixed Declarations:: Mixing declarations and code. 23207* Function Attributes:: Declaring that functions have no side effects, 23208 or that they can never return. 23209* Label Attributes:: Specifying attributes on labels. 23210* Attribute Syntax:: Formal syntax for attributes. 23211* Function Prototypes:: Prototype declarations and old-style definitions. 23212* C++ Comments:: C++ comments are recognized. 23213* Dollar Signs:: Dollar sign is allowed in identifiers. 23214* Character Escapes:: `\e' stands for the character <ESC>. 23215* Variable Attributes:: Specifying attributes of variables. 23216* Type Attributes:: Specifying attributes of types. 23217* Alignment:: Inquiring about the alignment of a type or variable. 23218* Inline:: Defining inline functions (as fast as macros). 23219* Volatiles:: What constitutes an access to a volatile object. 23220* Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler. 23221* Alternate Keywords:: `__const__', `__asm__', etc., for header files. 23222* Incomplete Enums:: `enum foo;', with details to follow. 23223* Function Names:: Printable strings which are the name of the current 23224 function. 23225* Return Address:: Getting the return or frame address of a function. 23226* Vector Extensions:: Using vector instructions through built-in functions. 23227* Offsetof:: Special syntax for implementing `offsetof'. 23228* __sync Builtins:: Legacy built-in functions for atomic memory access. 23229* __atomic Builtins:: Atomic built-in functions with memory model. 23230* Integer Overflow Builtins:: Built-in functions to perform arithmetics and 23231 arithmetic overflow checking. 23232* x86 specific memory model extensions for transactional memory:: x86 memory models. 23233* Object Size Checking:: Built-in functions for limited buffer overflow 23234 checking. 23235* Pointer Bounds Checker builtins:: Built-in functions for Pointer Bounds Checker. 23236* Cilk Plus Builtins:: Built-in functions for the Cilk Plus language extension. 23237* Other Builtins:: Other built-in functions. 23238* Target Builtins:: Built-in functions specific to particular targets. 23239* Target Format Checks:: Format checks specific to particular targets. 23240* Pragmas:: Pragmas accepted by GCC. 23241* Unnamed Fields:: Unnamed struct/union fields within structs/unions. 23242* Thread-Local:: Per-thread variables. 23243* Binary constants:: Binary constants using the `0b' prefix. 23244 23245 23246File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 23247 232486.1 Statements and Declarations in Expressions 23249============================================== 23250 23251A compound statement enclosed in parentheses may appear as an expression 23252in GNU C. This allows you to use loops, switches, and local variables 23253within an expression. 23254 23255 Recall that a compound statement is a sequence of statements surrounded 23256by braces; in this construct, parentheses go around the braces. For 23257example: 23258 23259 ({ int y = foo (); int z; 23260 if (y > 0) z = y; 23261 else z = - y; 23262 z; }) 23263 23264is a valid (though slightly more complex than necessary) expression for 23265the absolute value of `foo ()'. 23266 23267 The last thing in the compound statement should be an expression 23268followed by a semicolon; the value of this subexpression serves as the 23269value of the entire construct. (If you use some other kind of statement 23270last within the braces, the construct has type `void', and thus 23271effectively no value.) 23272 23273 This feature is especially useful in making macro definitions "safe" 23274(so that they evaluate each operand exactly once). For example, the 23275"maximum" function is commonly defined as a macro in standard C as 23276follows: 23277 23278 #define max(a,b) ((a) > (b) ? (a) : (b)) 23279 23280But this definition computes either A or B twice, with bad results if 23281the operand has side effects. In GNU C, if you know the type of the 23282operands (here taken as `int'), you can define the macro safely as 23283follows: 23284 23285 #define maxint(a,b) \ 23286 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 23287 23288 Embedded statements are not allowed in constant expressions, such as 23289the value of an enumeration constant, the width of a bit-field, or the 23290initial value of a static variable. 23291 23292 If you don't know the type of the operand, you can still do this, but 23293you must use `typeof' or `__auto_type' (*note Typeof::). 23294 23295 In G++, the result value of a statement expression undergoes array and 23296function pointer decay, and is returned by value to the enclosing 23297expression. For instance, if `A' is a class, then 23298 23299 A a; 23300 23301 ({a;}).Foo () 23302 23303constructs a temporary `A' object to hold the result of the statement 23304expression, and that is used to invoke `Foo'. Therefore the `this' 23305pointer observed by `Foo' is not the address of `a'. 23306 23307 In a statement expression, any temporaries created within a statement 23308are destroyed at that statement's end. This makes statement 23309expressions inside macros slightly different from function calls. In 23310the latter case temporaries introduced during argument evaluation are 23311destroyed at the end of the statement that includes the function call. 23312In the statement expression case they are destroyed during the 23313statement expression. For instance, 23314 23315 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 23316 template<typename T> T function(T a) { T b = a; return b + 3; } 23317 23318 void foo () 23319 { 23320 macro (X ()); 23321 function (X ()); 23322 } 23323 23324has different places where temporaries are destroyed. For the `macro' 23325case, the temporary `X' is destroyed just after the initialization of 23326`b'. In the `function' case that temporary is destroyed when the 23327function returns. 23328 23329 These considerations mean that it is probably a bad idea to use 23330statement expressions of this form in header files that are designed to 23331work with C++. (Note that some versions of the GNU C Library contained 23332header files using statement expressions that lead to precisely this 23333bug.) 23334 23335 Jumping into a statement expression with `goto' or using a `switch' 23336statement outside the statement expression with a `case' or `default' 23337label inside the statement expression is not permitted. Jumping into a 23338statement expression with a computed `goto' (*note Labels as Values::) 23339has undefined behavior. Jumping out of a statement expression is 23340permitted, but if the statement expression is part of a larger 23341expression then it is unspecified which other subexpressions of that 23342expression have been evaluated except where the language definition 23343requires certain subexpressions to be evaluated before or after the 23344statement expression. In any case, as with a function call, the 23345evaluation of a statement expression is not interleaved with the 23346evaluation of other parts of the containing expression. For example, 23347 23348 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 23349 23350calls `foo' and `bar1' and does not call `baz' but may or may not call 23351`bar2'. If `bar2' is called, it is called after `foo' and before 23352`bar1'. 23353 23354 23355File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 23356 233576.2 Locally Declared Labels 23358=========================== 23359 23360GCC allows you to declare "local labels" in any nested block scope. A 23361local label is just like an ordinary label, but you can only reference 23362it (with a `goto' statement, or by taking its address) within the block 23363in which it is declared. 23364 23365 A local label declaration looks like this: 23366 23367 __label__ LABEL; 23368 23369or 23370 23371 __label__ LABEL1, LABEL2, /* ... */; 23372 23373 Local label declarations must come at the beginning of the block, 23374before any ordinary declarations or statements. 23375 23376 The label declaration defines the label _name_, but does not define 23377the label itself. You must do this in the usual way, with `LABEL:', 23378within the statements of the statement expression. 23379 23380 The local label feature is useful for complex macros. If a macro 23381contains nested loops, a `goto' can be useful for breaking out of them. 23382However, an ordinary label whose scope is the whole function cannot be 23383used: if the macro can be expanded several times in one function, the 23384label is multiply defined in that function. A local label avoids this 23385problem. For example: 23386 23387 #define SEARCH(value, array, target) \ 23388 do { \ 23389 __label__ found; \ 23390 typeof (target) _SEARCH_target = (target); \ 23391 typeof (*(array)) *_SEARCH_array = (array); \ 23392 int i, j; \ 23393 int value; \ 23394 for (i = 0; i < max; i++) \ 23395 for (j = 0; j < max; j++) \ 23396 if (_SEARCH_array[i][j] == _SEARCH_target) \ 23397 { (value) = i; goto found; } \ 23398 (value) = -1; \ 23399 found:; \ 23400 } while (0) 23401 23402 This could also be written using a statement expression: 23403 23404 #define SEARCH(array, target) \ 23405 ({ \ 23406 __label__ found; \ 23407 typeof (target) _SEARCH_target = (target); \ 23408 typeof (*(array)) *_SEARCH_array = (array); \ 23409 int i, j; \ 23410 int value; \ 23411 for (i = 0; i < max; i++) \ 23412 for (j = 0; j < max; j++) \ 23413 if (_SEARCH_array[i][j] == _SEARCH_target) \ 23414 { value = i; goto found; } \ 23415 value = -1; \ 23416 found: \ 23417 value; \ 23418 }) 23419 23420 Local label declarations also make the labels they declare visible to 23421nested functions, if there are any. *Note Nested Functions::, for 23422details. 23423 23424 23425File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 23426 234276.3 Labels as Values 23428==================== 23429 23430You can get the address of a label defined in the current function (or 23431a containing function) with the unary operator `&&'. The value has 23432type `void *'. This value is a constant and can be used wherever a 23433constant of that type is valid. For example: 23434 23435 void *ptr; 23436 /* ... */ 23437 ptr = &&foo; 23438 23439 To use these values, you need to be able to jump to one. This is done 23440with the computed goto statement(1), `goto *EXP;'. For example, 23441 23442 goto *ptr; 23443 23444Any expression of type `void *' is allowed. 23445 23446 One way of using these constants is in initializing a static array that 23447serves as a jump table: 23448 23449 static void *array[] = { &&foo, &&bar, &&hack }; 23450 23451Then you can select a label with indexing, like this: 23452 23453 goto *array[i]; 23454 23455Note that this does not check whether the subscript is in bounds--array 23456indexing in C never does that. 23457 23458 Such an array of label values serves a purpose much like that of the 23459`switch' statement. The `switch' statement is cleaner, so use that 23460rather than an array unless the problem does not fit a `switch' 23461statement very well. 23462 23463 Another use of label values is in an interpreter for threaded code. 23464The labels within the interpreter function can be stored in the 23465threaded code for super-fast dispatching. 23466 23467 You may not use this mechanism to jump to code in a different function. 23468If you do that, totally unpredictable things happen. The best way to 23469avoid this is to store the label address only in automatic variables and 23470never pass it as an argument. 23471 23472 An alternate way to write the above example is 23473 23474 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 23475 &&hack - &&foo }; 23476 goto *(&&foo + array[i]); 23477 23478This is more friendly to code living in shared libraries, as it reduces 23479the number of dynamic relocations that are needed, and by consequence, 23480allows the data to be read-only. This alternative with label 23481differences is not supported for the AVR target, please use the first 23482approach for AVR programs. 23483 23484 The `&&foo' expressions for the same label might have different values 23485if the containing function is inlined or cloned. If a program relies 23486on them being always the same, 23487`__attribute__((__noinline__,__noclone__))' should be used to prevent 23488inlining and cloning. If `&&foo' is used in a static variable 23489initializer, inlining and cloning is forbidden. 23490 23491 ---------- Footnotes ---------- 23492 23493 (1) The analogous feature in Fortran is called an assigned goto, but 23494that name seems inappropriate in C, where one can do more than simply 23495store label addresses in label variables. 23496 23497 23498File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 23499 235006.4 Nested Functions 23501==================== 23502 23503A "nested function" is a function defined inside another function. 23504Nested functions are supported as an extension in GNU C, but are not 23505supported by GNU C++. 23506 23507 The nested function's name is local to the block where it is defined. 23508For example, here we define a nested function named `square', and call 23509it twice: 23510 23511 foo (double a, double b) 23512 { 23513 double square (double z) { return z * z; } 23514 23515 return square (a) + square (b); 23516 } 23517 23518 The nested function can access all the variables of the containing 23519function that are visible at the point of its definition. This is 23520called "lexical scoping". For example, here we show a nested function 23521which uses an inherited variable named `offset': 23522 23523 bar (int *array, int offset, int size) 23524 { 23525 int access (int *array, int index) 23526 { return array[index + offset]; } 23527 int i; 23528 /* ... */ 23529 for (i = 0; i < size; i++) 23530 /* ... */ access (array, i) /* ... */ 23531 } 23532 23533 Nested function definitions are permitted within functions in the 23534places where variable definitions are allowed; that is, in any block, 23535mixed with the other declarations and statements in the block. 23536 23537 It is possible to call the nested function from outside the scope of 23538its name by storing its address or passing the address to another 23539function: 23540 23541 hack (int *array, int size) 23542 { 23543 void store (int index, int value) 23544 { array[index] = value; } 23545 23546 intermediate (store, size); 23547 } 23548 23549 Here, the function `intermediate' receives the address of `store' as 23550an argument. If `intermediate' calls `store', the arguments given to 23551`store' are used to store into `array'. But this technique works only 23552so long as the containing function (`hack', in this example) does not 23553exit. 23554 23555 If you try to call the nested function through its address after the 23556containing function exits, all hell breaks loose. If you try to call 23557it after a containing scope level exits, and if it refers to some of 23558the variables that are no longer in scope, you may be lucky, but it's 23559not wise to take the risk. If, however, the nested function does not 23560refer to anything that has gone out of scope, you should be safe. 23561 23562 GCC implements taking the address of a nested function using a 23563technique called "trampolines". This technique was described in 23564`Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference 23565Proceedings, October 17-21, 1988). 23566 23567 A nested function can jump to a label inherited from a containing 23568function, provided the label is explicitly declared in the containing 23569function (*note Local Labels::). Such a jump returns instantly to the 23570containing function, exiting the nested function that did the `goto' 23571and any intermediate functions as well. Here is an example: 23572 23573 bar (int *array, int offset, int size) 23574 { 23575 __label__ failure; 23576 int access (int *array, int index) 23577 { 23578 if (index > size) 23579 goto failure; 23580 return array[index + offset]; 23581 } 23582 int i; 23583 /* ... */ 23584 for (i = 0; i < size; i++) 23585 /* ... */ access (array, i) /* ... */ 23586 /* ... */ 23587 return 0; 23588 23589 /* Control comes here from `access' 23590 if it detects an error. */ 23591 failure: 23592 return -1; 23593 } 23594 23595 A nested function always has no linkage. Declaring one with `extern' 23596or `static' is erroneous. If you need to declare the nested function 23597before its definition, use `auto' (which is otherwise meaningless for 23598function declarations). 23599 23600 bar (int *array, int offset, int size) 23601 { 23602 __label__ failure; 23603 auto int access (int *, int); 23604 /* ... */ 23605 int access (int *array, int index) 23606 { 23607 if (index > size) 23608 goto failure; 23609 return array[index + offset]; 23610 } 23611 /* ... */ 23612 } 23613 23614 23615File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 23616 236176.5 Constructing Function Calls 23618=============================== 23619 23620Using the built-in functions described below, you can record the 23621arguments a function received, and call another function with the same 23622arguments, without knowing the number or types of the arguments. 23623 23624 You can also record the return value of that function call, and later 23625return that value, without knowing what data type the function tried to 23626return (as long as your caller expects that data type). 23627 23628 However, these built-in functions may interact badly with some 23629sophisticated features or other extensions of the language. It is, 23630therefore, not recommended to use them outside very simple functions 23631acting as mere forwarders for their arguments. 23632 23633 -- Built-in Function: void * __builtin_apply_args () 23634 This built-in function returns a pointer to data describing how to 23635 perform a call with the same arguments as are passed to the 23636 current function. 23637 23638 The function saves the arg pointer register, structure value 23639 address, and all registers that might be used to pass arguments to 23640 a function into a block of memory allocated on the stack. Then it 23641 returns the address of that block. 23642 23643 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 23644 *ARGUMENTS, size_t SIZE) 23645 This built-in function invokes FUNCTION with a copy of the 23646 parameters described by ARGUMENTS and SIZE. 23647 23648 The value of ARGUMENTS should be the value returned by 23649 `__builtin_apply_args'. The argument SIZE specifies the size of 23650 the stack argument data, in bytes. 23651 23652 This function returns a pointer to data describing how to return 23653 whatever value is returned by FUNCTION. The data is saved in a 23654 block of memory allocated on the stack. 23655 23656 It is not always simple to compute the proper value for SIZE. The 23657 value is used by `__builtin_apply' to compute the amount of data 23658 that should be pushed on the stack and copied from the incoming 23659 argument area. 23660 23661 -- Built-in Function: void __builtin_return (void *RESULT) 23662 This built-in function returns the value described by RESULT from 23663 the containing function. You should specify, for RESULT, a value 23664 returned by `__builtin_apply'. 23665 23666 -- Built-in Function: __builtin_va_arg_pack () 23667 This built-in function represents all anonymous arguments of an 23668 inline function. It can be used only in inline functions that are 23669 always inlined, never compiled as a separate function, such as 23670 those using `__attribute__ ((__always_inline__))' or 23671 `__attribute__ ((__gnu_inline__))' extern inline functions. It 23672 must be only passed as last argument to some other function with 23673 variable arguments. This is useful for writing small wrapper 23674 inlines for variable argument functions, when using preprocessor 23675 macros is undesirable. For example: 23676 extern int myprintf (FILE *f, const char *format, ...); 23677 extern inline __attribute__ ((__gnu_inline__)) int 23678 myprintf (FILE *f, const char *format, ...) 23679 { 23680 int r = fprintf (f, "myprintf: "); 23681 if (r < 0) 23682 return r; 23683 int s = fprintf (f, format, __builtin_va_arg_pack ()); 23684 if (s < 0) 23685 return s; 23686 return r + s; 23687 } 23688 23689 -- Built-in Function: size_t __builtin_va_arg_pack_len () 23690 This built-in function returns the number of anonymous arguments of 23691 an inline function. It can be used only in inline functions that 23692 are always inlined, never compiled as a separate function, such as 23693 those using `__attribute__ ((__always_inline__))' or 23694 `__attribute__ ((__gnu_inline__))' extern inline functions. For 23695 example following does link- or run-time checking of open 23696 arguments for optimized code: 23697 #ifdef __OPTIMIZE__ 23698 extern inline __attribute__((__gnu_inline__)) int 23699 myopen (const char *path, int oflag, ...) 23700 { 23701 if (__builtin_va_arg_pack_len () > 1) 23702 warn_open_too_many_arguments (); 23703 23704 if (__builtin_constant_p (oflag)) 23705 { 23706 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1) 23707 { 23708 warn_open_missing_mode (); 23709 return __open_2 (path, oflag); 23710 } 23711 return open (path, oflag, __builtin_va_arg_pack ()); 23712 } 23713 23714 if (__builtin_va_arg_pack_len () < 1) 23715 return __open_2 (path, oflag); 23716 23717 return open (path, oflag, __builtin_va_arg_pack ()); 23718 } 23719 #endif 23720 23721 23722File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 23723 237246.6 Referring to a Type with `typeof' 23725===================================== 23726 23727Another way to refer to the type of an expression is with `typeof'. 23728The syntax of using of this keyword looks like `sizeof', but the 23729construct acts semantically like a type name defined with `typedef'. 23730 23731 There are two ways of writing the argument to `typeof': with an 23732expression or with a type. Here is an example with an expression: 23733 23734 typeof (x[0](1)) 23735 23736This assumes that `x' is an array of pointers to functions; the type 23737described is that of the values of the functions. 23738 23739 Here is an example with a typename as the argument: 23740 23741 typeof (int *) 23742 23743Here the type described is that of pointers to `int'. 23744 23745 If you are writing a header file that must work when included in ISO C 23746programs, write `__typeof__' instead of `typeof'. *Note Alternate 23747Keywords::. 23748 23749 A `typeof' construct can be used anywhere a typedef name can be used. 23750For example, you can use it in a declaration, in a cast, or inside of 23751`sizeof' or `typeof'. 23752 23753 The operand of `typeof' is evaluated for its side effects if and only 23754if it is an expression of variably modified type or the name of such a 23755type. 23756 23757 `typeof' is often useful in conjunction with statement expressions 23758(*note Statement Exprs::). Here is how the two together can be used to 23759define a safe "maximum" macro which operates on any arithmetic type and 23760evaluates each of its arguments exactly once: 23761 23762 #define max(a,b) \ 23763 ({ typeof (a) _a = (a); \ 23764 typeof (b) _b = (b); \ 23765 _a > _b ? _a : _b; }) 23766 23767 The reason for using names that start with underscores for the local 23768variables is to avoid conflicts with variable names that occur within 23769the expressions that are substituted for `a' and `b'. Eventually we 23770hope to design a new form of declaration syntax that allows you to 23771declare variables whose scopes start only after their initializers; 23772this will be a more reliable way to prevent such conflicts. 23773 23774Some more examples of the use of `typeof': 23775 23776 * This declares `y' with the type of what `x' points to. 23777 23778 typeof (*x) y; 23779 23780 * This declares `y' as an array of such values. 23781 23782 typeof (*x) y[4]; 23783 23784 * This declares `y' as an array of pointers to characters: 23785 23786 typeof (typeof (char *)[4]) y; 23787 23788 It is equivalent to the following traditional C declaration: 23789 23790 char *y[4]; 23791 23792 To see the meaning of the declaration using `typeof', and why it 23793 might be a useful way to write, rewrite it with these macros: 23794 23795 #define pointer(T) typeof(T *) 23796 #define array(T, N) typeof(T [N]) 23797 23798 Now the declaration can be rewritten this way: 23799 23800 array (pointer (char), 4) y; 23801 23802 Thus, `array (pointer (char), 4)' is the type of arrays of 4 23803 pointers to `char'. 23804 23805 In GNU C, but not GNU C++, you may also declare the type of a variable 23806as `__auto_type'. In that case, the declaration must declare only one 23807variable, whose declarator must just be an identifier, the declaration 23808must be initialized, and the type of the variable is determined by the 23809initializer; the name of the variable is not in scope until after the 23810initializer. (In C++, you should use C++11 `auto' for this purpose.) 23811Using `__auto_type', the "maximum" macro above could be written as: 23812 23813 #define max(a,b) \ 23814 ({ __auto_type _a = (a); \ 23815 __auto_type _b = (b); \ 23816 _a > _b ? _a : _b; }) 23817 23818 Using `__auto_type' instead of `typeof' has two advantages: 23819 23820 * Each argument to the macro appears only once in the expansion of 23821 the macro. This prevents the size of the macro expansion growing 23822 exponentially when calls to such macros are nested inside 23823 arguments of such macros. 23824 23825 * If the argument to the macro has variably modified type, it is 23826 evaluated only once when using `__auto_type', but twice if 23827 `typeof' is used. 23828 23829 23830File: gcc.info, Node: Conditionals, Next: __int128, Prev: Typeof, Up: C Extensions 23831 238326.7 Conditionals with Omitted Operands 23833====================================== 23834 23835The middle operand in a conditional expression may be omitted. Then if 23836the first operand is nonzero, its value is the value of the conditional 23837expression. 23838 23839 Therefore, the expression 23840 23841 x ? : y 23842 23843has the value of `x' if that is nonzero; otherwise, the value of `y'. 23844 23845 This example is perfectly equivalent to 23846 23847 x ? x : y 23848 23849In this simple case, the ability to omit the middle operand is not 23850especially useful. When it becomes useful is when the first operand 23851does, or may (if it is a macro argument), contain a side effect. Then 23852repeating the operand in the middle would perform the side effect 23853twice. Omitting the middle operand uses the value already computed 23854without the undesirable effects of recomputing it. 23855 23856 23857File: gcc.info, Node: __int128, Next: Long Long, Prev: Conditionals, Up: C Extensions 23858 238596.8 128-bit Integers 23860==================== 23861 23862As an extension the integer scalar type `__int128' is supported for 23863targets which have an integer mode wide enough to hold 128 bits. 23864Simply write `__int128' for a signed 128-bit integer, or `unsigned 23865__int128' for an unsigned 128-bit integer. There is no support in GCC 23866for expressing an integer constant of type `__int128' for targets with 23867`long long' integer less than 128 bits wide. 23868 23869 23870File: gcc.info, Node: Long Long, Next: Complex, Prev: __int128, Up: C Extensions 23871 238726.9 Double-Word Integers 23873======================== 23874 23875ISO C99 supports data types for integers that are at least 64 bits wide, 23876and as an extension GCC supports them in C90 mode and in C++. Simply 23877write `long long int' for a signed integer, or `unsigned long long int' 23878for an unsigned integer. To make an integer constant of type `long 23879long int', add the suffix `LL' to the integer. To make an integer 23880constant of type `unsigned long long int', add the suffix `ULL' to the 23881integer. 23882 23883 You can use these types in arithmetic like any other integer types. 23884Addition, subtraction, and bitwise boolean operations on these types 23885are open-coded on all types of machines. Multiplication is open-coded 23886if the machine supports a fullword-to-doubleword widening multiply 23887instruction. Division and shifts are open-coded only on machines that 23888provide special support. The operations that are not open-coded use 23889special library routines that come with GCC. 23890 23891 There may be pitfalls when you use `long long' types for function 23892arguments without function prototypes. If a function expects type 23893`int' for its argument, and you pass a value of type `long long int', 23894confusion results because the caller and the subroutine disagree about 23895the number of bytes for the argument. Likewise, if the function 23896expects `long long int' and you pass `int'. The best way to avoid such 23897problems is to use prototypes. 23898 23899 23900File: gcc.info, Node: Complex, Next: Floating Types, Prev: Long Long, Up: C Extensions 23901 239026.10 Complex Numbers 23903==================== 23904 23905ISO C99 supports complex floating data types, and as an extension GCC 23906supports them in C90 mode and in C++. GCC also supports complex 23907integer data types which are not part of ISO C99. You can declare 23908complex types using the keyword `_Complex'. As an extension, the older 23909GNU keyword `__complex__' is also supported. 23910 23911 For example, `_Complex double x;' declares `x' as a variable whose 23912real part and imaginary part are both of type `double'. `_Complex 23913short int y;' declares `y' to have real and imaginary parts of type 23914`short int'; this is not likely to be useful, but it shows that the set 23915of complex types is complete. 23916 23917 To write a constant with a complex data type, use the suffix `i' or 23918`j' (either one; they are equivalent). For example, `2.5fi' has type 23919`_Complex float' and `3i' has type `_Complex int'. Such a constant 23920always has a pure imaginary value, but you can form any complex value 23921you like by adding one to a real constant. This is a GNU extension; if 23922you have an ISO C99 conforming C library (such as the GNU C Library), 23923and want to construct complex constants of floating type, you should 23924include `<complex.h>' and use the macros `I' or `_Complex_I' instead. 23925 23926 To extract the real part of a complex-valued expression EXP, write 23927`__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 23928part. This is a GNU extension; for values of floating type, you should 23929use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 23930`cimag' and `cimagl', declared in `<complex.h>' and also provided as 23931built-in functions by GCC. 23932 23933 The operator `~' performs complex conjugation when used on a value 23934with a complex type. This is a GNU extension; for values of floating 23935type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 23936declared in `<complex.h>' and also provided as built-in functions by 23937GCC. 23938 23939 GCC can allocate complex automatic variables in a noncontiguous 23940fashion; it's even possible for the real part to be in a register while 23941the imaginary part is on the stack (or vice versa). Only the DWARF 2 23942debug info format can represent this, so use of DWARF 2 is recommended. 23943If you are using the stabs debug info format, GCC describes a 23944noncontiguous complex variable as if it were two separate variables of 23945noncomplex type. If the variable's actual name is `foo', the two 23946fictitious variables are named `foo$real' and `foo$imag'. You can 23947examine and set these two fictitious variables with your debugger. 23948 23949 23950File: gcc.info, Node: Floating Types, Next: Half-Precision, Prev: Complex, Up: C Extensions 23951 239526.11 Additional Floating Types 23953============================== 23954 23955As an extension, GNU C supports additional floating types, `__float80' 23956and `__float128' to support 80-bit (`XFmode') and 128-bit (`TFmode') 23957floating types. Support for additional types includes the arithmetic 23958operators: add, subtract, multiply, divide; unary arithmetic operators; 23959relational operators; equality operators; and conversions to and from 23960integer and other floating types. Use a suffix `w' or `W' in a literal 23961constant of type `__float80' and `q' or `Q' for `_float128'. You can 23962declare complex types using the corresponding internal complex type, 23963`XCmode' for `__float80' type and `TCmode' for `__float128' type: 23964 23965 typedef _Complex float __attribute__((mode(TC))) _Complex128; 23966 typedef _Complex float __attribute__((mode(XC))) _Complex80; 23967 23968 Not all targets support additional floating-point types. `__float80' 23969and `__float128' types are supported on x86 and IA-64 targets. The 23970`__float128' type is supported on hppa HP-UX targets. 23971 23972 23973File: gcc.info, Node: Half-Precision, Next: Decimal Float, Prev: Floating Types, Up: C Extensions 23974 239756.12 Half-Precision Floating Point 23976================================== 23977 23978On ARM targets, GCC supports half-precision (16-bit) floating point via 23979the `__fp16' type. You must enable this type explicitly with the 23980`-mfp16-format' command-line option in order to use it. 23981 23982 ARM supports two incompatible representations for half-precision 23983floating-point values. You must choose one of the representations and 23984use it consistently in your program. 23985 23986 Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format. 23987This format can represent normalized values in the range of 2^-14 to 2398865504. There are 11 bits of significand precision, approximately 3 23989decimal digits. 23990 23991 Specifying `-mfp16-format=alternative' selects the ARM alternative 23992format. This representation is similar to the IEEE format, but does 23993not support infinities or NaNs. Instead, the range of exponents is 23994extended, so that this format can represent normalized values in the 23995range of 2^-14 to 131008. 23996 23997 The `__fp16' type is a storage format only. For purposes of 23998arithmetic and other operations, `__fp16' values in C or C++ 23999expressions are automatically promoted to `float'. In addition, you 24000cannot declare a function with a return value or parameters of type 24001`__fp16'. 24002 24003 Note that conversions from `double' to `__fp16' involve an 24004intermediate conversion to `float'. Because of rounding, this can 24005sometimes produce a different result than a direct conversion. 24006 24007 ARM provides hardware support for conversions between `__fp16' and 24008`float' values as an extension to VFP and NEON (Advanced SIMD). GCC 24009generates code using these hardware instructions if you compile with 24010options to select an FPU that provides them; for example, 24011`-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the 24012`-mfp16-format' option to select a half-precision format. 24013 24014 Language-level support for the `__fp16' data type is independent of 24015whether GCC generates code using hardware floating-point instructions. 24016In cases where hardware support is not specified, GCC implements 24017conversions between `__fp16' and `float' values as library calls. 24018 24019 24020File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Half-Precision, Up: C Extensions 24021 240226.13 Decimal Floating Types 24023=========================== 24024 24025As an extension, GNU C supports decimal floating types as defined in 24026the N1312 draft of ISO/IEC WDTR24732. Support for decimal floating 24027types in GCC will evolve as the draft technical report changes. 24028Calling conventions for any target might also change. Not all targets 24029support decimal floating types. 24030 24031 The decimal floating types are `_Decimal32', `_Decimal64', and 24032`_Decimal128'. They use a radix of ten, unlike the floating types 24033`float', `double', and `long double' whose radix is not specified by 24034the C standard but is usually two. 24035 24036 Support for decimal floating types includes the arithmetic operators 24037add, subtract, multiply, divide; unary arithmetic operators; relational 24038operators; equality operators; and conversions to and from integer and 24039other floating types. Use a suffix `df' or `DF' in a literal constant 24040of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL' 24041for `_Decimal128'. 24042 24043 GCC support of decimal float as specified by the draft technical report 24044is incomplete: 24045 24046 * When the value of a decimal floating type cannot be represented in 24047 the integer type to which it is being converted, the result is 24048 undefined rather than the result value specified by the draft 24049 technical report. 24050 24051 * GCC does not provide the C library functionality associated with 24052 `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which 24053 must come from a separate C library implementation. Because of 24054 this the GNU C compiler does not define macro `__STDC_DEC_FP__' to 24055 indicate that the implementation conforms to the technical report. 24056 24057 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by 24058the DWARF 2 debug information format. 24059 24060 24061File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions 24062 240636.14 Hex Floats 24064=============== 24065 24066ISO C99 supports floating-point numbers written not only in the usual 24067decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 24068written in hexadecimal format. As a GNU extension, GCC supports this 24069in C90 mode (except in some cases when strictly conforming) and in C++. 24070In that format the `0x' hex introducer and the `p' or `P' exponent 24071field are mandatory. The exponent is a decimal number that indicates 24072the power of 2 by which the significant part is multiplied. Thus 24073`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 24074is the same as `1.55e1'. 24075 24076 Unlike for floating-point numbers in the decimal notation the exponent 24077is always required in the hexadecimal notation. Otherwise the compiler 24078would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 24079could mean `1.0f' or `1.9375' since `f' is also the extension for 24080floating-point constants of type `float'. 24081 24082 24083File: gcc.info, Node: Fixed-Point, Next: Named Address Spaces, Prev: Hex Floats, Up: C Extensions 24084 240856.15 Fixed-Point Types 24086====================== 24087 24088As an extension, GNU C supports fixed-point types as defined in the 24089N1169 draft of ISO/IEC DTR 18037. Support for fixed-point types in GCC 24090will evolve as the draft technical report changes. Calling conventions 24091for any target might also change. Not all targets support fixed-point 24092types. 24093 24094 The fixed-point types are `short _Fract', `_Fract', `long _Fract', 24095`long long _Fract', `unsigned short _Fract', `unsigned _Fract', 24096`unsigned long _Fract', `unsigned long long _Fract', `_Sat short 24097_Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract', 24098`_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned 24099long _Fract', `_Sat unsigned long long _Fract', `short _Accum', 24100`_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum', 24101`unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum', 24102`_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long 24103_Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat 24104unsigned long _Accum', `_Sat unsigned long long _Accum'. 24105 24106 Fixed-point data values contain fractional and optional integral parts. 24107The format of fixed-point data varies and depends on the target machine. 24108 24109 Support for fixed-point types includes: 24110 * prefix and postfix increment and decrement operators (`++', `--') 24111 24112 * unary arithmetic operators (`+', `-', `!') 24113 24114 * binary arithmetic operators (`+', `-', `*', `/') 24115 24116 * binary shift operators (`<<', `>>') 24117 24118 * relational operators (`<', `<=', `>=', `>') 24119 24120 * equality operators (`==', `!=') 24121 24122 * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=') 24123 24124 * conversions to and from integer, floating-point, or fixed-point 24125 types 24126 24127 Use a suffix in a fixed-point literal constant: 24128 * `hr' or `HR' for `short _Fract' and `_Sat short _Fract' 24129 24130 * `r' or `R' for `_Fract' and `_Sat _Fract' 24131 24132 * `lr' or `LR' for `long _Fract' and `_Sat long _Fract' 24133 24134 * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract' 24135 24136 * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned 24137 short _Fract' 24138 24139 * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract' 24140 24141 * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long 24142 _Fract' 24143 24144 * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat 24145 unsigned long long _Fract' 24146 24147 * `hk' or `HK' for `short _Accum' and `_Sat short _Accum' 24148 24149 * `k' or `K' for `_Accum' and `_Sat _Accum' 24150 24151 * `lk' or `LK' for `long _Accum' and `_Sat long _Accum' 24152 24153 * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum' 24154 24155 * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned 24156 short _Accum' 24157 24158 * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum' 24159 24160 * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long 24161 _Accum' 24162 24163 * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat 24164 unsigned long long _Accum' 24165 24166 GCC support of fixed-point types as specified by the draft technical 24167report is incomplete: 24168 24169 * Pragmas to control overflow and rounding behaviors are not 24170 implemented. 24171 24172 Fixed-point types are supported by the DWARF 2 debug information 24173format. 24174 24175 24176File: gcc.info, Node: Named Address Spaces, Next: Zero Length, Prev: Fixed-Point, Up: C Extensions 24177 241786.16 Named Address Spaces 24179========================= 24180 24181As an extension, GNU C supports named address spaces as defined in the 24182N1275 draft of ISO/IEC DTR 18037. Support for named address spaces in 24183GCC will evolve as the draft technical report changes. Calling 24184conventions for any target might also change. At present, only the 24185AVR, SPU, M32C, and RL78 targets support address spaces other than the 24186generic address space. 24187 24188 Address space identifiers may be used exactly like any other C type 24189qualifier (e.g., `const' or `volatile'). See the N1275 document for 24190more details. 24191 241926.16.1 AVR Named Address Spaces 24193------------------------------- 24194 24195On the AVR target, there are several address spaces that can be used in 24196order to put read-only data into the flash memory and access that data 24197by means of the special instructions `LPM' or `ELPM' needed to read 24198from flash. 24199 24200 Per default, any data including read-only data is located in RAM (the 24201generic address space) so that non-generic address spaces are needed to 24202locate read-only data in flash memory _and_ to generate the right 24203instructions to access this data without using (inline) assembler code. 24204 24205`__flash' 24206 The `__flash' qualifier locates data in the `.progmem.data' 24207 section. Data is read using the `LPM' instruction. Pointers to 24208 this address space are 16 bits wide. 24209 24210`__flash1' 24211`__flash2' 24212`__flash3' 24213`__flash4' 24214`__flash5' 24215 These are 16-bit address spaces locating data in section 24216 `.progmemN.data' where N refers to address space `__flashN'. The 24217 compiler sets the `RAMPZ' segment register appropriately before 24218 reading data by means of the `ELPM' instruction. 24219 24220`__memx' 24221 This is a 24-bit address space that linearizes flash and RAM: If 24222 the high bit of the address is set, data is read from RAM using 24223 the lower two bytes as RAM address. If the high bit of the 24224 address is clear, data is read from flash with `RAMPZ' set 24225 according to the high byte of the address. *Note 24226 `__builtin_avr_flash_segment': AVR Built-in Functions. 24227 24228 Objects in this address space are located in `.progmemx.data'. 24229 24230 Example 24231 24232 char my_read (const __flash char ** p) 24233 { 24234 /* p is a pointer to RAM that points to a pointer to flash. 24235 The first indirection of p reads that flash pointer 24236 from RAM and the second indirection reads a char from this 24237 flash address. */ 24238 24239 return **p; 24240 } 24241 24242 /* Locate array[] in flash memory */ 24243 const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 }; 24244 24245 int i = 1; 24246 24247 int main (void) 24248 { 24249 /* Return 17 by reading from flash memory */ 24250 return array[array[i]]; 24251 } 24252 24253For each named address space supported by avr-gcc there is an equally 24254named but uppercase built-in macro defined. The purpose is to 24255facilitate testing if respective address space support is available or 24256not: 24257 24258 #ifdef __FLASH 24259 const __flash int var = 1; 24260 24261 int read_var (void) 24262 { 24263 return var; 24264 } 24265 #else 24266 #include <avr/pgmspace.h> /* From AVR-LibC */ 24267 24268 const int var PROGMEM = 1; 24269 24270 int read_var (void) 24271 { 24272 return (int) pgm_read_word (&var); 24273 } 24274 #endif /* __FLASH */ 24275 24276Notice that attribute *Note `progmem': AVR Variable Attributes. 24277locates data in flash but accesses to these data read from generic 24278address space, i.e. from RAM, so that you need special accessors like 24279`pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) 24280together with attribute `progmem'. 24281 24282Limitations and caveats 24283 24284 * Reading across the 64 KiB section boundary of the `__flash' or 24285 `__flashN' address spaces shows undefined behavior. The only 24286 address space that supports reading across the 64 KiB flash 24287 segment boundaries is `__memx'. 24288 24289 * If you use one of the `__flashN' address spaces you must arrange 24290 your linker script to locate the `.progmemN.data' sections 24291 according to your needs. 24292 24293 * Any data or pointers to the non-generic address spaces must be 24294 qualified as `const', i.e. as read-only data. This still applies 24295 if the data in one of these address spaces like software version 24296 number or calibration lookup table are intended to be changed 24297 after load time by, say, a boot loader. In this case the right 24298 qualification is `const' `volatile' so that the compiler must not 24299 optimize away known values or insert them as immediates into 24300 operands of instructions. 24301 24302 * The following code initializes a variable `pfoo' located in static 24303 storage with a 24-bit address: 24304 extern const __memx char foo; 24305 const __memx void *pfoo = &foo; 24306 24307 Such code requires at least binutils 2.23, see 24308 PR13503 (http://sourceware.org/PR13503). 24309 24310 243116.16.2 M32C Named Address Spaces 24312-------------------------------- 24313 24314On the M32C target, with the R8C and M16C CPU variants, variables 24315qualified with `__far' are accessed using 32-bit addresses in order to 24316access memory beyond the first 64 Ki bytes. If `__far' is used with 24317the M32CM or M32C CPU variants, it has no effect. 24318 243196.16.3 RL78 Named Address Spaces 24320-------------------------------- 24321 24322On the RL78 target, variables qualified with `__far' are accessed with 2432332-bit pointers (20-bit addresses) rather than the default 16-bit 24324addresses. Non-far variables are assumed to appear in the topmost 2432564 KiB of the address space. 24326 243276.16.4 SPU Named Address Spaces 24328------------------------------- 24329 24330On the SPU target variables may be declared as belonging to another 24331address space by qualifying the type with the `__ea' address space 24332identifier: 24333 24334 extern int __ea i; 24335 24336The compiler generates special code to access the variable `i'. It may 24337use runtime library support, or generate special machine instructions 24338to access that address space. 24339 24340 24341File: gcc.info, Node: Zero Length, Next: Empty Structures, Prev: Named Address Spaces, Up: C Extensions 24342 243436.17 Arrays of Length Zero 24344========================== 24345 24346Zero-length arrays are allowed in GNU C. They are very useful as the 24347last element of a structure that is really a header for a 24348variable-length object: 24349 24350 struct line { 24351 int length; 24352 char contents[0]; 24353 }; 24354 24355 struct line *thisline = (struct line *) 24356 malloc (sizeof (struct line) + this_length); 24357 thisline->length = this_length; 24358 24359 In ISO C90, you would have to give `contents' a length of 1, which 24360means either you waste space or complicate the argument to `malloc'. 24361 24362 In ISO C99, you would use a "flexible array member", which is slightly 24363different in syntax and semantics: 24364 24365 * Flexible array members are written as `contents[]' without the `0'. 24366 24367 * Flexible array members have incomplete type, and so the `sizeof' 24368 operator may not be applied. As a quirk of the original 24369 implementation of zero-length arrays, `sizeof' evaluates to zero. 24370 24371 * Flexible array members may only appear as the last member of a 24372 `struct' that is otherwise non-empty. 24373 24374 * A structure containing a flexible array member, or a union 24375 containing such a structure (possibly recursively), may not be a 24376 member of a structure or an element of an array. (However, these 24377 uses are permitted by GCC as extensions.) 24378 24379 Non-empty initialization of zero-length arrays is treated like any 24380case where there are more initializer elements than the array holds, in 24381that a suitable warning about "excess elements in array" is given, and 24382the excess elements (all of them, in this case) are ignored. 24383 24384 GCC allows static initialization of flexible array members. This is 24385equivalent to defining a new structure containing the original 24386structure followed by an array of sufficient size to contain the data. 24387E.g. in the following, `f1' is constructed as if it were declared like 24388`f2'. 24389 24390 struct f1 { 24391 int x; int y[]; 24392 } f1 = { 1, { 2, 3, 4 } }; 24393 24394 struct f2 { 24395 struct f1 f1; int data[3]; 24396 } f2 = { { 1 }, { 2, 3, 4 } }; 24397 24398The convenience of this extension is that `f1' has the desired type, 24399eliminating the need to consistently refer to `f2.f1'. 24400 24401 This has symmetry with normal static arrays, in that an array of 24402unknown size is also written with `[]'. 24403 24404 Of course, this extension only makes sense if the extra data comes at 24405the end of a top-level object, as otherwise we would be overwriting 24406data at subsequent offsets. To avoid undue complication and confusion 24407with initialization of deeply nested arrays, we simply disallow any 24408non-empty initialization except when the structure is the top-level 24409object. For example: 24410 24411 struct foo { int x; int y[]; }; 24412 struct bar { struct foo z; }; 24413 24414 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 24415 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 24416 struct bar c = { { 1, { } } }; // Valid. 24417 struct foo d[1] = { { 1, { 2, 3, 4 } } }; // Invalid. 24418 24419 24420File: gcc.info, Node: Empty Structures, Next: Variable Length, Prev: Zero Length, Up: C Extensions 24421 244226.18 Structures with No Members 24423=============================== 24424 24425GCC permits a C structure to have no members: 24426 24427 struct empty { 24428 }; 24429 24430 The structure has size zero. In C++, empty structures are part of the 24431language. G++ treats empty structures as if they had a single member 24432of type `char'. 24433 24434 24435File: gcc.info, Node: Variable Length, Next: Variadic Macros, Prev: Empty Structures, Up: C Extensions 24436 244376.19 Arrays of Variable Length 24438============================== 24439 24440Variable-length automatic arrays are allowed in ISO C99, and as an 24441extension GCC accepts them in C90 mode and in C++. These arrays are 24442declared like any other automatic arrays, but with a length that is not 24443a constant expression. The storage is allocated at the point of 24444declaration and deallocated when the block scope containing the 24445declaration exits. For example: 24446 24447 FILE * 24448 concat_fopen (char *s1, char *s2, char *mode) 24449 { 24450 char str[strlen (s1) + strlen (s2) + 1]; 24451 strcpy (str, s1); 24452 strcat (str, s2); 24453 return fopen (str, mode); 24454 } 24455 24456 Jumping or breaking out of the scope of the array name deallocates the 24457storage. Jumping into the scope is not allowed; you get an error 24458message for it. 24459 24460 As an extension, GCC accepts variable-length arrays as a member of a 24461structure or a union. For example: 24462 24463 void 24464 foo (int n) 24465 { 24466 struct S { int x[n]; }; 24467 } 24468 24469 You can use the function `alloca' to get an effect much like 24470variable-length arrays. The function `alloca' is available in many 24471other C implementations (but not in all). On the other hand, 24472variable-length arrays are more elegant. 24473 24474 There are other differences between these two methods. Space allocated 24475with `alloca' exists until the containing _function_ returns. The 24476space for a variable-length array is deallocated as soon as the array 24477name's scope ends. (If you use both variable-length arrays and 24478`alloca' in the same function, deallocation of a variable-length array 24479also deallocates anything more recently allocated with `alloca'.) 24480 24481 You can also use variable-length arrays as arguments to functions: 24482 24483 struct entry 24484 tester (int len, char data[len][len]) 24485 { 24486 /* ... */ 24487 } 24488 24489 The length of an array is computed once when the storage is allocated 24490and is remembered for the scope of the array in case you access it with 24491`sizeof'. 24492 24493 If you want to pass the array first and the length afterward, you can 24494use a forward declaration in the parameter list--another GNU extension. 24495 24496 struct entry 24497 tester (int len; char data[len][len], int len) 24498 { 24499 /* ... */ 24500 } 24501 24502 The `int len' before the semicolon is a "parameter forward 24503declaration", and it serves the purpose of making the name `len' known 24504when the declaration of `data' is parsed. 24505 24506 You can write any number of such parameter forward declarations in the 24507parameter list. They can be separated by commas or semicolons, but the 24508last one must end with a semicolon, which is followed by the "real" 24509parameter declarations. Each forward declaration must match a "real" 24510declaration in parameter name and data type. ISO C99 does not support 24511parameter forward declarations. 24512 24513 24514File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Variable Length, Up: C Extensions 24515 245166.20 Macros with a Variable Number of Arguments. 24517================================================ 24518 24519In the ISO C standard of 1999, a macro can be declared to accept a 24520variable number of arguments much as a function can. The syntax for 24521defining the macro is similar to that of a function. Here is an 24522example: 24523 24524 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 24525 24526Here `...' is a "variable argument". In the invocation of such a 24527macro, it represents the zero or more tokens until the closing 24528parenthesis that ends the invocation, including any commas. This set of 24529tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 24530it appears. See the CPP manual for more information. 24531 24532 GCC has long supported variadic macros, and used a different syntax 24533that allowed you to give a name to the variable arguments just like any 24534other argument. Here is an example: 24535 24536 #define debug(format, args...) fprintf (stderr, format, args) 24537 24538This is in all ways equivalent to the ISO C example above, but arguably 24539more readable and descriptive. 24540 24541 GNU CPP has two further variadic macro extensions, and permits them to 24542be used with either of the above forms of macro definition. 24543 24544 In standard C, you are not allowed to leave the variable argument out 24545entirely; but you are allowed to pass an empty argument. For example, 24546this invocation is invalid in ISO C, because there is no comma after 24547the string: 24548 24549 debug ("A message") 24550 24551 GNU CPP permits you to completely omit the variable arguments in this 24552way. In the above examples, the compiler would complain, though since 24553the expansion of the macro still has the extra comma after the format 24554string. 24555 24556 To help solve this problem, CPP behaves specially for variable 24557arguments used with the token paste operator, `##'. If instead you 24558write 24559 24560 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 24561 24562and if the variable arguments are omitted or empty, the `##' operator 24563causes the preprocessor to remove the comma before it. If you do 24564provide some variable arguments in your macro invocation, GNU CPP does 24565not complain about the paste operation and instead places the variable 24566arguments after the comma. Just like any other pasted macro argument, 24567these arguments are not macro expanded. 24568 24569 24570File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 24571 245726.21 Slightly Looser Rules for Escaped Newlines 24573=============================================== 24574 24575The preprocessor treatment of escaped newlines is more relaxed than 24576that specified by the C90 standard, which requires the newline to 24577immediately follow a backslash. GCC's implementation allows whitespace 24578in the form of spaces, horizontal and vertical tabs, and form feeds 24579between the backslash and the subsequent newline. The preprocessor 24580issues a warning, but treats it as a valid escaped newline and combines 24581the two lines to form a single logical line. This works within 24582comments and tokens, as well as between tokens. Comments are _not_ 24583treated as whitespace for the purposes of this relaxation, since they 24584have not yet been replaced with spaces. 24585 24586 24587File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 24588 245896.22 Non-Lvalue Arrays May Have Subscripts 24590========================================== 24591 24592In ISO C99, arrays that are not lvalues still decay to pointers, and 24593may be subscripted, although they may not be modified or used after the 24594next sequence point and the unary `&' operator may not be applied to 24595them. As an extension, GNU C allows such arrays to be subscripted in 24596C90 mode, though otherwise they do not decay to pointers outside C99 24597mode. For example, this is valid in GNU C though not valid in C90: 24598 24599 struct foo {int a[4];}; 24600 24601 struct foo f(); 24602 24603 bar (int index) 24604 { 24605 return f().a[index]; 24606 } 24607 24608 24609File: gcc.info, Node: Pointer Arith, Next: Pointers to Arrays, Prev: Subscripting, Up: C Extensions 24610 246116.23 Arithmetic on `void'- and Function-Pointers 24612================================================ 24613 24614In GNU C, addition and subtraction operations are supported on pointers 24615to `void' and on pointers to functions. This is done by treating the 24616size of a `void' or of a function as 1. 24617 24618 A consequence of this is that `sizeof' is also allowed on `void' and 24619on function types, and returns 1. 24620 24621 The option `-Wpointer-arith' requests a warning if these extensions 24622are used. 24623 24624 24625File: gcc.info, Node: Pointers to Arrays, Next: Initializers, Prev: Pointer Arith, Up: C Extensions 24626 246276.24 Pointers to Arrays with Qualifiers Work as Expected 24628======================================================== 24629 24630In GNU C, pointers to arrays with qualifiers work similar to pointers 24631to other qualified types. For example, a value of type `int (*)[5]' can 24632be used to initialize a variable of type `const int (*)[5]'. These 24633types are incompatible in ISO C because the `const' qualifier is 24634formally attached to the element type of the array and not the array 24635itself. 24636 24637 extern void 24638 transpose (int N, int M, double out[M][N], const double in[N][M]); 24639 double x[3][2]; 24640 double y[2][3]; 24641 ... 24642 transpose(3, 2, y, x); 24643 24644 24645File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointers to Arrays, Up: C Extensions 24646 246476.25 Non-Constant Initializers 24648============================== 24649 24650As in standard C++ and ISO C99, the elements of an aggregate 24651initializer for an automatic variable are not required to be constant 24652expressions in GNU C. Here is an example of an initializer with 24653run-time varying elements: 24654 24655 foo (float f, float g) 24656 { 24657 float beat_freqs[2] = { f-g, f+g }; 24658 /* ... */ 24659 } 24660 24661 24662File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 24663 246646.26 Compound Literals 24665====================== 24666 24667ISO C99 supports compound literals. A compound literal looks like a 24668cast containing an initializer. Its value is an object of the type 24669specified in the cast, containing the elements specified in the 24670initializer; it is an lvalue. As an extension, GCC supports compound 24671literals in C90 mode and in C++, though the semantics are somewhat 24672different in C++. 24673 24674 Usually, the specified type is a structure. Assume that `struct foo' 24675and `structure' are declared as shown: 24676 24677 struct foo {int a; char b[2];} structure; 24678 24679Here is an example of constructing a `struct foo' with a compound 24680literal: 24681 24682 structure = ((struct foo) {x + y, 'a', 0}); 24683 24684This is equivalent to writing the following: 24685 24686 { 24687 struct foo temp = {x + y, 'a', 0}; 24688 structure = temp; 24689 } 24690 24691 You can also construct an array, though this is dangerous in C++, as 24692explained below. If all the elements of the compound literal are (made 24693up of) simple constant expressions, suitable for use in initializers of 24694objects of static storage duration, then the compound literal can be 24695coerced to a pointer to its first element and used in such an 24696initializer, as shown here: 24697 24698 char **foo = (char *[]) { "x", "y", "z" }; 24699 24700 Compound literals for scalar types and union types are also allowed, 24701but then the compound literal is equivalent to a cast. 24702 24703 As a GNU extension, GCC allows initialization of objects with static 24704storage duration by compound literals (which is not possible in ISO 24705C99, because the initializer is not a constant). It is handled as if 24706the object is initialized only with the bracket enclosed list if the 24707types of the compound literal and the object match. The initializer 24708list of the compound literal must be constant. If the object being 24709initialized has array type of unknown size, the size is determined by 24710compound literal size. 24711 24712 static struct foo x = (struct foo) {1, 'a', 'b'}; 24713 static int y[] = (int []) {1, 2, 3}; 24714 static int z[] = (int [3]) {1}; 24715 24716The above lines are equivalent to the following: 24717 static struct foo x = {1, 'a', 'b'}; 24718 static int y[] = {1, 2, 3}; 24719 static int z[] = {1, 0, 0}; 24720 24721 In C, a compound literal designates an unnamed object with static or 24722automatic storage duration. In C++, a compound literal designates a 24723temporary object, which only lives until the end of its 24724full-expression. As a result, well-defined C code that takes the 24725address of a subobject of a compound literal can be undefined in C++, 24726so the C++ compiler rejects the conversion of a temporary array to a 24727pointer. For instance, if the array compound literal example above 24728appeared inside a function, any subsequent use of `foo' in C++ has 24729undefined behavior because the lifetime of the array ends after the 24730declaration of `foo'. 24731 24732 As an optimization, the C++ compiler sometimes gives array compound 24733literals longer lifetimes: when the array either appears outside a 24734function or has const-qualified type. If `foo' and its initializer had 24735elements of `char *const' type rather than `char *', or if `foo' were a 24736global variable, the array would have static storage duration. But it 24737is probably safest just to avoid the use of array compound literals in 24738code compiled as C++. 24739 24740 24741File: gcc.info, Node: Designated Inits, Next: Case Ranges, Prev: Compound Literals, Up: C Extensions 24742 247436.27 Designated Initializers 24744============================ 24745 24746Standard C90 requires the elements of an initializer to appear in a 24747fixed order, the same as the order of the elements in the array or 24748structure being initialized. 24749 24750 In ISO C99 you can give the elements in any order, specifying the array 24751indices or structure field names they apply to, and GNU C allows this as 24752an extension in C90 mode as well. This extension is not implemented in 24753GNU C++. 24754 24755 To specify an array index, write `[INDEX] =' before the element value. 24756For example, 24757 24758 int a[6] = { [4] = 29, [2] = 15 }; 24759 24760is equivalent to 24761 24762 int a[6] = { 0, 0, 15, 0, 29, 0 }; 24763 24764The index values must be constant expressions, even if the array being 24765initialized is automatic. 24766 24767 An alternative syntax for this that has been obsolete since GCC 2.5 but 24768GCC still accepts is to write `[INDEX]' before the element value, with 24769no `='. 24770 24771 To initialize a range of elements to the same value, write `[FIRST ... 24772LAST] = VALUE'. This is a GNU extension. For example, 24773 24774 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 24775 24776If the value in it has side-effects, the side-effects happen only once, 24777not for each initialized field by the range initializer. 24778 24779Note that the length of the array is the highest value specified plus 24780one. 24781 24782 In a structure initializer, specify the name of a field to initialize 24783with `.FIELDNAME =' before the element value. For example, given the 24784following structure, 24785 24786 struct point { int x, y; }; 24787 24788the following initialization 24789 24790 struct point p = { .y = yvalue, .x = xvalue }; 24791 24792is equivalent to 24793 24794 struct point p = { xvalue, yvalue }; 24795 24796 Another syntax that has the same meaning, obsolete since GCC 2.5, is 24797`FIELDNAME:', as shown here: 24798 24799 struct point p = { y: yvalue, x: xvalue }; 24800 24801 Omitted field members are implicitly initialized the same as objects 24802that have static storage duration. 24803 24804 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 24805also use a designator (or the obsolete colon syntax) when initializing 24806a union, to specify which element of the union should be used. For 24807example, 24808 24809 union foo { int i; double d; }; 24810 24811 union foo f = { .d = 4 }; 24812 24813converts 4 to a `double' to store it in the union using the second 24814element. By contrast, casting 4 to type `union foo' stores it into the 24815union as the integer `i', since it is an integer. (*Note Cast to 24816Union::.) 24817 24818 You can combine this technique of naming elements with ordinary C 24819initialization of successive elements. Each initializer element that 24820does not have a designator applies to the next consecutive element of 24821the array or structure. For example, 24822 24823 int a[6] = { [1] = v1, v2, [4] = v4 }; 24824 24825is equivalent to 24826 24827 int a[6] = { 0, v1, v2, 0, v4, 0 }; 24828 24829 Labeling the elements of an array initializer is especially useful 24830when the indices are characters or belong to an `enum' type. For 24831example: 24832 24833 int whitespace[256] 24834 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 24835 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 24836 24837 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 24838before an `=' to specify a nested subobject to initialize; the list is 24839taken relative to the subobject corresponding to the closest 24840surrounding brace pair. For example, with the `struct point' 24841declaration above: 24842 24843 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 24844 24845If the same field is initialized multiple times, it has the value from 24846the last initialization. If any such overridden initialization has 24847side-effect, it is unspecified whether the side-effect happens or not. 24848Currently, GCC discards them and issues a warning. 24849 24850 24851File: gcc.info, Node: Case Ranges, Next: Cast to Union, Prev: Designated Inits, Up: C Extensions 24852 248536.28 Case Ranges 24854================ 24855 24856You can specify a range of consecutive values in a single `case' label, 24857like this: 24858 24859 case LOW ... HIGH: 24860 24861This has the same effect as the proper number of individual `case' 24862labels, one for each integer value from LOW to HIGH, inclusive. 24863 24864 This feature is especially useful for ranges of ASCII character codes: 24865 24866 case 'A' ... 'Z': 24867 24868 *Be careful:* Write spaces around the `...', for otherwise it may be 24869parsed wrong when you use it with integer values. For example, write 24870this: 24871 24872 case 1 ... 5: 24873 24874rather than this: 24875 24876 case 1...5: 24877 24878 24879File: gcc.info, Node: Cast to Union, Next: Mixed Declarations, Prev: Case Ranges, Up: C Extensions 24880 248816.29 Cast to a Union Type 24882========================= 24883 24884A cast to union type is similar to other casts, except that the type 24885specified is a union type. You can specify the type either with `union 24886TAG' or with a typedef name. A cast to union is actually a 24887constructor, not a cast, and hence does not yield an lvalue like normal 24888casts. (*Note Compound Literals::.) 24889 24890 The types that may be cast to the union type are those of the members 24891of the union. Thus, given the following union and variables: 24892 24893 union foo { int i; double d; }; 24894 int x; 24895 double y; 24896 24897both `x' and `y' can be cast to type `union foo'. 24898 24899 Using the cast as the right-hand side of an assignment to a variable of 24900union type is equivalent to storing in a member of the union: 24901 24902 union foo u; 24903 /* ... */ 24904 u = (union foo) x == u.i = x 24905 u = (union foo) y == u.d = y 24906 24907 You can also use the union cast as a function argument: 24908 24909 void hack (union foo); 24910 /* ... */ 24911 hack ((union foo) x); 24912 24913 24914File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Cast to Union, Up: C Extensions 24915 249166.30 Mixed Declarations and Code 24917================================ 24918 24919ISO C99 and ISO C++ allow declarations and code to be freely mixed 24920within compound statements. As an extension, GNU C also allows this in 24921C90 mode. For example, you could do: 24922 24923 int i; 24924 /* ... */ 24925 i++; 24926 int j = i + 2; 24927 24928 Each identifier is visible from where it is declared until the end of 24929the enclosing block. 24930 24931 24932File: gcc.info, Node: Function Attributes, Next: Label Attributes, Prev: Mixed Declarations, Up: C Extensions 24933 249346.31 Declaring Attributes of Functions 24935====================================== 24936 24937In GNU C, you declare certain things about functions called in your 24938program which help the compiler optimize function calls and check your 24939code more carefully. 24940 24941 The keyword `__attribute__' allows you to specify special attributes 24942when making a declaration. This keyword is followed by an attribute 24943specification inside double parentheses. The following attributes are 24944currently defined for functions on all targets: `aligned', 24945`alloc_size', `alloc_align', `assume_aligned', `noreturn', 24946`returns_twice', `noinline', `noclone', `no_icf', `always_inline', 24947`flatten', `pure', `const', `nothrow', `sentinel', `format', 24948`format_arg', `no_instrument_function', `no_split_stack', `section', 24949`constructor', `destructor', `used', `unused', `deprecated', `weak', 24950`malloc', `alias', `ifunc', `warn_unused_result', `nonnull', 24951`returns_nonnull', `gnu_inline', `externally_visible', `hot', `cold', 24952`artificial', `no_sanitize_address', `no_address_safety_analysis', 24953`no_sanitize_thread', `no_sanitize_undefined', `no_reorder', 24954`bnd_legacy', `bnd_instrument', `stack_protect', `error' and `warning'. 24955Several other attributes are defined for functions on particular target 24956systems. Other attributes, including `section' are supported for 24957variables declarations (*note Variable Attributes::), labels (*note 24958Label Attributes::) and for types (*note Type Attributes::). 24959 24960 GCC plugins may provide their own attributes. 24961 24962 You may also specify attributes with `__' preceding and following each 24963keyword. This allows you to use them in header files without being 24964concerned about a possible macro of the same name. For example, you 24965may use `__noreturn__' instead of `noreturn'. 24966 24967 *Note Attribute Syntax::, for details of the exact syntax for using 24968attributes. 24969 24970`alias ("TARGET")' 24971 The `alias' attribute causes the declaration to be emitted as an 24972 alias for another symbol, which must be specified. For instance, 24973 24974 void __f () { /* Do something. */; } 24975 void f () __attribute__ ((weak, alias ("__f"))); 24976 24977 defines `f' to be a weak alias for `__f'. In C++, the mangled 24978 name for the target must be used. It is an error if `__f' is not 24979 defined in the same translation unit. 24980 24981 Not all target machines support this attribute. 24982 24983`aligned (ALIGNMENT)' 24984 This attribute specifies a minimum alignment for the function, 24985 measured in bytes. 24986 24987 You cannot use this attribute to decrease the alignment of a 24988 function, only to increase it. However, when you explicitly 24989 specify a function alignment this overrides the effect of the 24990 `-falign-functions' (*note Optimize Options::) option for this 24991 function. 24992 24993 Note that the effectiveness of `aligned' attributes may be limited 24994 by inherent limitations in your linker. On many systems, the 24995 linker is only able to arrange for functions to be aligned up to a 24996 certain maximum alignment. (For some linkers, the maximum 24997 supported alignment may be very very small.) See your linker 24998 documentation for further information. 24999 25000 The `aligned' attribute can also be used for variables and fields 25001 (*note Variable Attributes::.) 25002 25003`alloc_size' 25004 The `alloc_size' attribute is used to tell the compiler that the 25005 function return value points to memory, where the size is given by 25006 one or two of the functions parameters. GCC uses this information 25007 to improve the correctness of `__builtin_object_size'. 25008 25009 The function parameter(s) denoting the allocated size are 25010 specified by one or two integer arguments supplied to the 25011 attribute. The allocated size is either the value of the single 25012 function argument specified or the product of the two function 25013 arguments specified. Argument numbering starts at one. 25014 25015 For instance, 25016 25017 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2))) 25018 void* my_realloc(void*, size_t) __attribute__((alloc_size(2))) 25019 25020 declares that `my_calloc' returns memory of the size given by the 25021 product of parameter 1 and 2 and that `my_realloc' returns memory 25022 of the size given by parameter 2. 25023 25024`alloc_align' 25025 The `alloc_align' attribute is used to tell the compiler that the 25026 function return value points to memory, where the returned pointer 25027 minimum alignment is given by one of the functions parameters. 25028 GCC uses this information to improve pointer alignment analysis. 25029 25030 The function parameter denoting the allocated alignment is 25031 specified by one integer argument, whose number is the argument of 25032 the attribute. Argument numbering starts at one. 25033 25034 For instance, 25035 25036 void* my_memalign(size_t, size_t) __attribute__((alloc_align(1))) 25037 25038 declares that `my_memalign' returns memory with minimum alignment 25039 given by parameter 1. 25040 25041`assume_aligned' 25042 The `assume_aligned' attribute is used to tell the compiler that 25043 the function return value points to memory, where the returned 25044 pointer minimum alignment is given by the first argument. If the 25045 attribute has two arguments, the second argument is misalignment 25046 offset. 25047 25048 For instance 25049 25050 void* my_alloc1(size_t) __attribute__((assume_aligned(16))) 25051 void* my_alloc2(size_t) __attribute__((assume_aligned(32, 8))) 25052 25053 declares that `my_alloc1' returns 16-byte aligned pointer and that 25054 `my_alloc2' returns a pointer whose value modulo 32 is equal to 8. 25055 25056`always_inline' 25057 Generally, functions are not inlined unless optimization is 25058 specified. For functions declared inline, this attribute inlines 25059 the function independent of any restrictions that otherwise apply 25060 to inlining. Failure to inline such a function is diagnosed as an 25061 error. Note that if such a function is called indirectly the 25062 compiler may or may not inline it depending on optimization level 25063 and a failure to inline an indirect call may or may not be 25064 diagnosed. 25065 25066`gnu_inline' 25067 This attribute should be used with a function that is also declared 25068 with the `inline' keyword. It directs GCC to treat the function 25069 as if it were defined in gnu90 mode even when compiling in C99 or 25070 gnu99 mode. 25071 25072 If the function is declared `extern', then this definition of the 25073 function is used only for inlining. In no case is the function 25074 compiled as a standalone function, not even if you take its address 25075 explicitly. Such an address becomes an external reference, as if 25076 you had only declared the function, and had not defined it. This 25077 has almost the effect of a macro. The way to use this is to put a 25078 function definition in a header file with this attribute, and put 25079 another copy of the function, without `extern', in a library file. 25080 The definition in the header file causes most calls to the 25081 function to be inlined. If any uses of the function remain, they 25082 refer to the single copy in the library. Note that the two 25083 definitions of the functions need not be precisely the same, 25084 although if they do not have the same effect your program may 25085 behave oddly. 25086 25087 In C, if the function is neither `extern' nor `static', then the 25088 function is compiled as a standalone function, as well as being 25089 inlined where possible. 25090 25091 This is how GCC traditionally handled functions declared `inline'. 25092 Since ISO C99 specifies a different semantics for `inline', this 25093 function attribute is provided as a transition measure and as a 25094 useful feature in its own right. This attribute is available in 25095 GCC 4.1.3 and later. It is available if either of the 25096 preprocessor macros `__GNUC_GNU_INLINE__' or 25097 `__GNUC_STDC_INLINE__' are defined. *Note An Inline Function is 25098 As Fast As a Macro: Inline. 25099 25100 In C++, this attribute does not depend on `extern' in any way, but 25101 it still requires the `inline' keyword to enable its special 25102 behavior. 25103 25104`artificial' 25105 This attribute is useful for small inline wrappers that if possible 25106 should appear during debugging as a unit. Depending on the debug 25107 info format it either means marking the function as artificial or 25108 using the caller location for all instructions within the inlined 25109 body. 25110 25111`bank_switch' 25112 When added to an interrupt handler with the M32C port, causes the 25113 prologue and epilogue to use bank switching to preserve the 25114 registers rather than saving them on the stack. 25115 25116`flatten' 25117 Generally, inlining into a function is limited. For a function 25118 marked with this attribute, every call inside this function is 25119 inlined, if possible. Whether the function itself is considered 25120 for inlining depends on its size and the current inlining 25121 parameters. 25122 25123`error ("MESSAGE")' 25124 If this attribute is used on a function declaration and a call to 25125 such a function is not eliminated through dead code elimination or 25126 other optimizations, an error that includes MESSAGE is diagnosed. 25127 This is useful for compile-time checking, especially together with 25128 `__builtin_constant_p' and inline functions where checking the 25129 inline function arguments is not possible through `extern char 25130 [(condition) ? 1 : -1];' tricks. While it is possible to leave 25131 the function undefined and thus invoke a link failure, when using 25132 this attribute the problem is diagnosed earlier and with exact 25133 location of the call even in presence of inline functions or when 25134 not emitting debugging information. 25135 25136`warning ("MESSAGE")' 25137 If this attribute is used on a function declaration and a call to 25138 such a function is not eliminated through dead code elimination or 25139 other optimizations, a warning that includes MESSAGE is diagnosed. 25140 This is useful for compile-time checking, especially together 25141 with `__builtin_constant_p' and inline functions. While it is 25142 possible to define the function with a message in `.gnu.warning*' 25143 section, when using this attribute the problem is diagnosed 25144 earlier and with exact location of the call even in presence of 25145 inline functions or when not emitting debugging information. 25146 25147`cdecl' 25148 On the x86-32 targets, the `cdecl' attribute causes the compiler to 25149 assume that the calling function pops off the stack space used to 25150 pass arguments. This is useful to override the effects of the 25151 `-mrtd' switch. 25152 25153`const' 25154 Many functions do not examine any values except their arguments, 25155 and have no effects except the return value. Basically this is 25156 just slightly more strict class than the `pure' attribute below, 25157 since function is not allowed to read global memory. 25158 25159 Note that a function that has pointer arguments and examines the 25160 data pointed to must _not_ be declared `const'. Likewise, a 25161 function that calls a non-`const' function usually must not be 25162 `const'. It does not make sense for a `const' function to return 25163 `void'. 25164 25165`constructor' 25166`destructor' 25167`constructor (PRIORITY)' 25168`destructor (PRIORITY)' 25169 The `constructor' attribute causes the function to be called 25170 automatically before execution enters `main ()'. Similarly, the 25171 `destructor' attribute causes the function to be called 25172 automatically after `main ()' completes or `exit ()' is called. 25173 Functions with these attributes are useful for initializing data 25174 that is used implicitly during the execution of the program. 25175 25176 You may provide an optional integer priority to control the order 25177 in which constructor and destructor functions are run. A 25178 constructor with a smaller priority number runs before a 25179 constructor with a larger priority number; the opposite 25180 relationship holds for destructors. So, if you have a constructor 25181 that allocates a resource and a destructor that deallocates the 25182 same resource, both functions typically have the same priority. 25183 The priorities for constructor and destructor functions are the 25184 same as those specified for namespace-scope C++ objects (*note C++ 25185 Attributes::). 25186 25187 These attributes are not currently implemented for Objective-C. 25188 25189`deprecated' 25190`deprecated (MSG)' 25191 The `deprecated' attribute results in a warning if the function is 25192 used anywhere in the source file. This is useful when identifying 25193 functions that are expected to be removed in a future version of a 25194 program. The warning also includes the location of the declaration 25195 of the deprecated function, to enable users to easily find further 25196 information about why the function is deprecated, or what they 25197 should do instead. Note that the warnings only occurs for uses: 25198 25199 int old_fn () __attribute__ ((deprecated)); 25200 int old_fn (); 25201 int (*fn_ptr)() = old_fn; 25202 25203 results in a warning on line 3 but not line 2. The optional MSG 25204 argument, which must be a string, is printed in the warning if 25205 present. 25206 25207 The `deprecated' attribute can also be used for variables and 25208 types (*note Variable Attributes::, *note Type Attributes::.) 25209 25210`disinterrupt' 25211 On Epiphany and MeP targets, this attribute causes the compiler to 25212 emit instructions to disable interrupts for the duration of the 25213 given function. 25214 25215`dllexport' 25216 On Microsoft Windows targets and Symbian OS targets the 25217 `dllexport' attribute causes the compiler to provide a global 25218 pointer to a pointer in a DLL, so that it can be referenced with 25219 the `dllimport' attribute. On Microsoft Windows targets, the 25220 pointer name is formed by combining `_imp__' and the function or 25221 variable name. 25222 25223 You can use `__declspec(dllexport)' as a synonym for 25224 `__attribute__ ((dllexport))' for compatibility with other 25225 compilers. 25226 25227 On systems that support the `visibility' attribute, this attribute 25228 also implies "default" visibility. It is an error to explicitly 25229 specify any other visibility. 25230 25231 GCC's default behavior is to emit all inline functions with the 25232 `dllexport' attribute. Since this can cause object file-size 25233 bloat, you can use `-fno-keep-inline-dllexport', which tells GCC to 25234 ignore the attribute for inlined functions unless the 25235 `-fkeep-inline-functions' flag is used instead. 25236 25237 The attribute is ignored for undefined symbols. 25238 25239 When applied to C++ classes, the attribute marks defined 25240 non-inlined member functions and static data members as exports. 25241 Static consts initialized in-class are not marked unless they are 25242 also defined out-of-class. 25243 25244 For Microsoft Windows targets there are alternative methods for 25245 including the symbol in the DLL's export table such as using a 25246 `.def' file with an `EXPORTS' section or, with GNU ld, using the 25247 `--export-all' linker flag. 25248 25249`dllimport' 25250 On Microsoft Windows and Symbian OS targets, the `dllimport' 25251 attribute causes the compiler to reference a function or variable 25252 via a global pointer to a pointer that is set up by the DLL 25253 exporting the symbol. The attribute implies `extern'. On 25254 Microsoft Windows targets, the pointer name is formed by combining 25255 `_imp__' and the function or variable name. 25256 25257 You can use `__declspec(dllimport)' as a synonym for 25258 `__attribute__ ((dllimport))' for compatibility with other 25259 compilers. 25260 25261 On systems that support the `visibility' attribute, this attribute 25262 also implies "default" visibility. It is an error to explicitly 25263 specify any other visibility. 25264 25265 Currently, the attribute is ignored for inlined functions. If the 25266 attribute is applied to a symbol _definition_, an error is 25267 reported. If a symbol previously declared `dllimport' is later 25268 defined, the attribute is ignored in subsequent references, and a 25269 warning is emitted. The attribute is also overridden by a 25270 subsequent declaration as `dllexport'. 25271 25272 When applied to C++ classes, the attribute marks non-inlined 25273 member functions and static data members as imports. However, the 25274 attribute is ignored for virtual methods to allow creation of 25275 vtables using thunks. 25276 25277 On the SH Symbian OS target the `dllimport' attribute also has 25278 another affect--it can cause the vtable and run-time type 25279 information for a class to be exported. This happens when the 25280 class has a dllimported constructor or a non-inline, non-pure 25281 virtual function and, for either of those two conditions, the 25282 class also has an inline constructor or destructor and has a key 25283 function that is defined in the current translation unit. 25284 25285 For Microsoft Windows targets the use of the `dllimport' attribute 25286 on functions is not necessary, but provides a small performance 25287 benefit by eliminating a thunk in the DLL. The use of the 25288 `dllimport' attribute on imported variables can be avoided by 25289 passing the `--enable-auto-import' switch to the GNU linker. As 25290 with functions, using the attribute for a variable eliminates a 25291 thunk in the DLL. 25292 25293 One drawback to using this attribute is that a pointer to a 25294 _variable_ marked as `dllimport' cannot be used as a constant 25295 address. However, a pointer to a _function_ with the `dllimport' 25296 attribute can be used as a constant initializer; in this case, the 25297 address of a stub function in the import lib is referenced. On 25298 Microsoft Windows targets, the attribute can be disabled for 25299 functions by setting the `-mnop-fun-dllimport' flag. 25300 25301`exception' 25302 Use this attribute on the NDS32 target to indicate that the 25303 specified function is an exception handler. The compiler will 25304 generate corresponding sections for use in an exception handler. 25305 25306`exception_handler' 25307 Use this attribute on the Blackfin to indicate that the specified 25308 function is an exception handler. The compiler generates function 25309 entry and exit sequences suitable for use in an exception handler 25310 when this attribute is present. 25311 25312`externally_visible' 25313 This attribute, attached to a global variable or function, 25314 nullifies the effect of the `-fwhole-program' command-line option, 25315 so the object remains visible outside the current compilation unit. 25316 25317 If `-fwhole-program' is used together with `-flto' and `gold' is 25318 used as the linker plugin, `externally_visible' attributes are 25319 automatically added to functions (not variable yet due to a 25320 current `gold' issue) that are accessed outside of LTO objects 25321 according to resolution file produced by `gold'. For other 25322 linkers that cannot generate resolution file, explicit 25323 `externally_visible' attributes are still necessary. 25324 25325`far' 25326 On MeP targets this causes the compiler to use a calling convention 25327 that assumes the called function is too far away for the built-in 25328 addressing modes. 25329 25330`fast_interrupt' 25331 Use this attribute on the M32C and RX ports to indicate that the 25332 specified function is a fast interrupt handler. This is just like 25333 the `interrupt' attribute, except that `freit' is used to return 25334 instead of `reit'. 25335 25336`fastcall' 25337 On x86-32 targets, the `fastcall' attribute causes the compiler to 25338 pass the first argument (if of integral type) in the register ECX 25339 and the second argument (if of integral type) in the register EDX. 25340 Subsequent and other typed arguments are passed on the stack. 25341 The called function pops the arguments off the stack. If the 25342 number of arguments is variable all arguments are pushed on the 25343 stack. 25344 25345`thiscall' 25346 On x86-32 targets, the `thiscall' attribute causes the compiler to 25347 pass the first argument (if of integral type) in the register ECX. 25348 Subsequent and other typed arguments are passed on the stack. The 25349 called function pops the arguments off the stack. If the number 25350 of arguments is variable all arguments are pushed on the stack. 25351 The `thiscall' attribute is intended for C++ non-static member 25352 functions. As a GCC extension, this calling convention can be 25353 used for C functions and for static member methods. 25354 25355`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 25356 The `format' attribute specifies that a function takes `printf', 25357 `scanf', `strftime' or `strfmon' style arguments that should be 25358 type-checked against a format string. For example, the 25359 declaration: 25360 25361 extern int 25362 my_printf (void *my_object, const char *my_format, ...) 25363 __attribute__ ((format (printf, 2, 3))); 25364 25365 causes the compiler to check the arguments in calls to `my_printf' 25366 for consistency with the `printf' style format string argument 25367 `my_format'. 25368 25369 The parameter ARCHETYPE determines how the format string is 25370 interpreted, and should be `printf', `scanf', `strftime', 25371 `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'. (You can 25372 also use `__printf__', `__scanf__', `__strftime__' or 25373 `__strfmon__'.) On MinGW targets, `ms_printf', `ms_scanf', and 25374 `ms_strftime' are also present. ARCHETYPE values such as `printf' 25375 refer to the formats accepted by the system's C runtime library, 25376 while values prefixed with `gnu_' always refer to the formats 25377 accepted by the GNU C Library. On Microsoft Windows targets, 25378 values prefixed with `ms_' refer to the formats accepted by the 25379 `msvcrt.dll' library. The parameter STRING-INDEX specifies which 25380 argument is the format string argument (starting from 1), while 25381 FIRST-TO-CHECK is the number of the first argument to check 25382 against the format string. For functions where the arguments are 25383 not available to be checked (such as `vprintf'), specify the third 25384 parameter as zero. In this case the compiler only checks the 25385 format string for consistency. For `strftime' formats, the third 25386 parameter is required to be zero. Since non-static C++ methods 25387 have an implicit `this' argument, the arguments of such methods 25388 should be counted from two, not one, when giving values for 25389 STRING-INDEX and FIRST-TO-CHECK. 25390 25391 In the example above, the format string (`my_format') is the second 25392 argument of the function `my_print', and the arguments to check 25393 start with the third argument, so the correct parameters for the 25394 format attribute are 2 and 3. 25395 25396 The `format' attribute allows you to identify your own functions 25397 that take format strings as arguments, so that GCC can check the 25398 calls to these functions for errors. The compiler always (unless 25399 `-ffreestanding' or `-fno-builtin' is used) checks formats for the 25400 standard library functions `printf', `fprintf', `sprintf', 25401 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and 25402 `vsprintf' whenever such warnings are requested (using 25403 `-Wformat'), so there is no need to modify the header file 25404 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf', 25405 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in 25406 strictly conforming C standard modes, the X/Open function 25407 `strfmon' is also checked as are `printf_unlocked' and 25408 `fprintf_unlocked'. *Note Options Controlling C Dialect: C 25409 Dialect Options. 25410 25411 For Objective-C dialects, `NSString' (or `__NSString__') is 25412 recognized in the same context. Declarations including these 25413 format attributes are parsed for correct syntax, however the 25414 result of checking of such format strings is not yet defined, and 25415 is not carried out by this version of the compiler. 25416 25417 The target may also provide additional types of format checks. 25418 *Note Format Checks Specific to Particular Target Machines: Target 25419 Format Checks. 25420 25421`format_arg (STRING-INDEX)' 25422 The `format_arg' attribute specifies that a function takes a format 25423 string for a `printf', `scanf', `strftime' or `strfmon' style 25424 function and modifies it (for example, to translate it into 25425 another language), so the result can be passed to a `printf', 25426 `scanf', `strftime' or `strfmon' style function (with the 25427 remaining arguments to the format function the same as they would 25428 have been for the unmodified string). For example, the 25429 declaration: 25430 25431 extern char * 25432 my_dgettext (char *my_domain, const char *my_format) 25433 __attribute__ ((format_arg (2))); 25434 25435 causes the compiler to check the arguments in calls to a `printf', 25436 `scanf', `strftime' or `strfmon' type function, whose format 25437 string argument is a call to the `my_dgettext' function, for 25438 consistency with the format string argument `my_format'. If the 25439 `format_arg' attribute had not been specified, all the compiler 25440 could tell in such calls to format functions would be that the 25441 format string argument is not constant; this would generate a 25442 warning when `-Wformat-nonliteral' is used, but the calls could 25443 not be checked without the attribute. 25444 25445 The parameter STRING-INDEX specifies which argument is the format 25446 string argument (starting from one). Since non-static C++ methods 25447 have an implicit `this' argument, the arguments of such methods 25448 should be counted from two. 25449 25450 The `format_arg' attribute allows you to identify your own 25451 functions that modify format strings, so that GCC can check the 25452 calls to `printf', `scanf', `strftime' or `strfmon' type function 25453 whose operands are a call to one of your own function. The 25454 compiler always treats `gettext', `dgettext', and `dcgettext' in 25455 this manner except when strict ISO C support is requested by 25456 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or 25457 `-fno-builtin' is used. *Note Options Controlling C Dialect: C 25458 Dialect Options. 25459 25460 For Objective-C dialects, the `format-arg' attribute may refer to 25461 an `NSString' reference for compatibility with the `format' 25462 attribute above. 25463 25464 The target may also allow additional types in `format-arg' 25465 attributes. *Note Format Checks Specific to Particular Target 25466 Machines: Target Format Checks. 25467 25468`function_vector' 25469 Use this attribute on the H8/300, H8/300H, and H8S to indicate 25470 that the specified function should be called through the function 25471 vector. Calling a function through the function vector reduces 25472 code size, however; the function vector has a limited size 25473 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 25474 and H8S) and shares space with the interrupt vector. 25475 25476 On SH2A targets, this attribute declares a function to be called 25477 using the TBR relative addressing mode. The argument to this 25478 attribute is the entry number of the same function in a vector 25479 table containing all the TBR relative addressable functions. For 25480 correct operation the TBR must be setup accordingly to point to 25481 the start of the vector table before any functions with this 25482 attribute are invoked. Usually a good place to do the 25483 initialization is the startup routine. The TBR relative vector 25484 table can have at max 256 function entries. The jumps to these 25485 functions are generated using a SH2A specific, non delayed branch 25486 instruction JSR/N @(disp8,TBR). You must use GAS and GLD from GNU 25487 binutils version 2.7 or later for this attribute to work correctly. 25488 25489 Please refer the example of M16C target, to see the use of this 25490 attribute while declaring a function, 25491 25492 In an application, for a function being called once, this attribute 25493 saves at least 8 bytes of code; and if other successive calls are 25494 being made to the same function, it saves 2 bytes of code per each 25495 of these calls. 25496 25497 On M16C/M32C targets, the `function_vector' attribute declares a 25498 special page subroutine call function. Use of this attribute 25499 reduces the code size by 2 bytes for each call generated to the 25500 subroutine. The argument to the attribute is the vector number 25501 entry from the special page vector table which contains the 16 25502 low-order bits of the subroutine's entry address. Each vector 25503 table has special page number (18 to 255) that is used in `jsrs' 25504 instructions. Jump addresses of the routines are generated by 25505 adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of 25506 M32C targets), to the 2-byte addresses set in the vector table. 25507 Therefore you need to ensure that all the special page vector 25508 routines should get mapped within the address range 0x0F0000 to 25509 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C). 25510 25511 In the following example 2 bytes are saved for each call to 25512 function `foo'. 25513 25514 void foo (void) __attribute__((function_vector(0x18))); 25515 void foo (void) 25516 { 25517 } 25518 25519 void bar (void) 25520 { 25521 foo(); 25522 } 25523 25524 If functions are defined in one file and are called in another 25525 file, then be sure to write this declaration in both files. 25526 25527 This attribute is ignored for R8C target. 25528 25529`ifunc ("RESOLVER")' 25530 The `ifunc' attribute is used to mark a function as an indirect 25531 function using the STT_GNU_IFUNC symbol type extension to the ELF 25532 standard. This allows the resolution of the symbol value to be 25533 determined dynamically at load time, and an optimized version of 25534 the routine can be selected for the particular processor or other 25535 system characteristics determined then. To use this attribute, 25536 first define the implementation functions available, and a 25537 resolver function that returns a pointer to the selected 25538 implementation function. The implementation functions' 25539 declarations must match the API of the function being implemented, 25540 the resolver's declaration is be a function returning pointer to 25541 void function returning void: 25542 25543 void *my_memcpy (void *dst, const void *src, size_t len) 25544 { 25545 ... 25546 } 25547 25548 static void (*resolve_memcpy (void)) (void) 25549 { 25550 return my_memcpy; // we'll just always select this routine 25551 } 25552 25553 The exported header file declaring the function the user calls 25554 would contain: 25555 25556 extern void *memcpy (void *, const void *, size_t); 25557 25558 allowing the user to call this as a regular function, unaware of 25559 the implementation. Finally, the indirect function needs to be 25560 defined in the same translation unit as the resolver function: 25561 25562 void *memcpy (void *, const void *, size_t) 25563 __attribute__ ((ifunc ("resolve_memcpy"))); 25564 25565 Indirect functions cannot be weak. Binutils version 2.20.1 or 25566 higher and GNU C Library version 2.11.1 are required to use this 25567 feature. 25568 25569`interrupt' 25570 Use this attribute on the ARC, ARM, AVR, CR16, Epiphany, M32C, 25571 M32R/D, m68k, MeP, MIPS, MSP430, NDS32, RL78, RX, Visium and 25572 Xstormy16 ports to indicate that the specified function is an 25573 interrupt handler. The compiler generates function entry and exit 25574 sequences suitable for use in an interrupt handler when this 25575 attribute is present. With Epiphany targets it may also generate 25576 a special section with code to initialize the interrupt vector 25577 table. 25578 25579 Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, 25580 MicroBlaze, and SH processors can be specified via the 25581 `interrupt_handler' attribute. 25582 25583 Note, on the ARC, you must specify the kind of interrupt to be 25584 handled in a parameter to the interrupt attribute like this: 25585 25586 void f () __attribute__ ((interrupt ("ilink1"))); 25587 25588 Permissible values for this parameter are: `ilink1' and `ilink2'. 25589 25590 Note, on the AVR, the hardware globally disables interrupts when an 25591 interrupt is executed. The first instruction of an interrupt 25592 handler declared with this attribute is a `SEI' instruction to 25593 re-enable interrupts. See also the `signal' function attribute 25594 that does not insert a `SEI' instruction. If both `signal' and 25595 `interrupt' are specified for the same function, `signal' is 25596 silently ignored. 25597 25598 Note, for the ARM, you can specify the kind of interrupt to be 25599 handled by adding an optional parameter to the interrupt attribute 25600 like this: 25601 25602 void f () __attribute__ ((interrupt ("IRQ"))); 25603 25604 Permissible values for this parameter are: `IRQ', `FIQ', `SWI', 25605 `ABORT' and `UNDEF'. 25606 25607 On ARMv7-M the interrupt type is ignored, and the attribute means 25608 the function may be called with a word-aligned stack pointer. 25609 25610 Note, for the MSP430 you can provide an argument to the interrupt 25611 attribute which specifies a name or number. If the argument is a 25612 number it indicates the slot in the interrupt vector table (0 - 25613 31) to which this handler should be assigned. If the argument is 25614 a name it is treated as a symbolic name for the vector slot. 25615 These names should match up with appropriate entries in the linker 25616 script. By default the names `watchdog' for vector 26, `nmi' for 25617 vector 30 and `reset' for vector 31 are recognized. 25618 25619 You can also use the following function attributes to modify how 25620 normal functions interact with interrupt functions: 25621 25622 `critical' 25623 Critical functions disable interrupts upon entry and restore 25624 the previous interrupt state upon exit. Critical functions 25625 cannot also have the `naked' or `reentrant' attributes. They 25626 can have the `interrupt' attribute. 25627 25628 `reentrant' 25629 Reentrant functions disable interrupts upon entry and enable 25630 them upon exit. Reentrant functions cannot also have the 25631 `naked' or `critical' attributes. They can have the 25632 `interrupt' attribute. 25633 25634 `wakeup' 25635 This attribute only applies to interrupt functions. It is 25636 silently ignored if applied to a non-interrupt function. A 25637 wakeup interrupt function will rouse the processor from any 25638 low-power state that it might be in when the function exits. 25639 25640 25641 On Epiphany targets one or more optional parameters can be added 25642 like this: 25643 25644 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); 25645 25646 Permissible values for these parameters are: `reset', 25647 `software_exception', `page_miss', `timer0', `timer1', `message', 25648 `dma0', `dma1', `wand' and `swi'. Multiple parameters indicate 25649 that multiple entries in the interrupt vector table should be 25650 initialized for this function, i.e. for each parameter NAME, a 25651 jump to the function is emitted in the section ivt_entry_NAME. 25652 The parameter(s) may be omitted entirely, in which case no 25653 interrupt vector table entry is provided. 25654 25655 Note, on Epiphany targets, interrupts are enabled inside the 25656 function unless the `disinterrupt' attribute is also specified. 25657 25658 On Epiphany targets, you can also use the following attribute to 25659 modify the behavior of an interrupt handler: 25660 `forwarder_section' 25661 The interrupt handler may be in external memory which cannot 25662 be reached by a branch instruction, so generate a local 25663 memory trampoline to transfer control. The single parameter 25664 identifies the section where the trampoline is placed. 25665 25666 The following examples are all valid uses of these attributes on 25667 Epiphany targets: 25668 void __attribute__ ((interrupt)) universal_handler (); 25669 void __attribute__ ((interrupt ("dma1"))) dma1_handler (); 25670 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); 25671 void __attribute__ ((interrupt ("timer0"), disinterrupt)) 25672 fast_timer_handler (); 25673 void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp"))) 25674 external_dma_handler (); 25675 25676 On MIPS targets, you can use the following attributes to modify 25677 the behavior of an interrupt handler: 25678 `use_shadow_register_set' 25679 Assume that the handler uses a shadow register set, instead of 25680 the main general-purpose registers. 25681 25682 `keep_interrupts_masked' 25683 Keep interrupts masked for the whole function. Without this 25684 attribute, GCC tries to reenable interrupts for as much of 25685 the function as it can. 25686 25687 `use_debug_exception_return' 25688 Return using the `deret' instruction. Interrupt handlers 25689 that don't have this attribute return using `eret' instead. 25690 25691 You can use any combination of these attributes, as shown below: 25692 void __attribute__ ((interrupt)) v0 (); 25693 void __attribute__ ((interrupt, use_shadow_register_set)) v1 (); 25694 void __attribute__ ((interrupt, keep_interrupts_masked)) v2 (); 25695 void __attribute__ ((interrupt, use_debug_exception_return)) v3 (); 25696 void __attribute__ ((interrupt, use_shadow_register_set, 25697 keep_interrupts_masked)) v4 (); 25698 void __attribute__ ((interrupt, use_shadow_register_set, 25699 use_debug_exception_return)) v5 (); 25700 void __attribute__ ((interrupt, keep_interrupts_masked, 25701 use_debug_exception_return)) v6 (); 25702 void __attribute__ ((interrupt, use_shadow_register_set, 25703 keep_interrupts_masked, 25704 use_debug_exception_return)) v7 (); 25705 25706 On NDS32 target, this attribute indicates that the specified 25707 function is an interrupt handler. The compiler generates 25708 corresponding sections for use in an interrupt handler. You can 25709 use the following attributes to modify the behavior: 25710 `nested' 25711 This interrupt service routine is interruptible. 25712 25713 `not_nested' 25714 This interrupt service routine is not interruptible. 25715 25716 `nested_ready' 25717 This interrupt service routine is interruptible after 25718 `PSW.GIE' (global interrupt enable) is set. This allows 25719 interrupt service routine to finish some short critical code 25720 before enabling interrupts. 25721 25722 `save_all' 25723 The system will help save all registers into stack before 25724 entering interrupt handler. 25725 25726 `partial_save' 25727 The system will help save caller registers into stack before 25728 entering interrupt handler. 25729 25730 On RL78, use `brk_interrupt' instead of `interrupt' for handlers 25731 intended to be used with the `BRK' opcode (i.e. those that must 25732 end with `RETB' instead of `RETI'). 25733 25734 On RX targets, you may specify one or more vector numbers as 25735 arguments to the attribute, as well as naming an alternate table 25736 name. Parameters are handled sequentially, so one handler can be 25737 assigned to multiple entries in multiple tables. One may also 25738 pass the magic string `"$default"' which causes the function to be 25739 used for any unfilled slots in the current table. 25740 25741 This example shows a simple assignment of a function to one vector 25742 in the default table (note that preprocessor macros may be used for 25743 chip-specific symbolic vector names): 25744 void __attribute__ ((interrupt (5))) txd1_handler (); 25745 25746 This example assigns a function to two slots in the default table 25747 (using preprocessor macros defined elsewhere) and makes it the 25748 default for the `dct' table: 25749 void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default"))) 25750 txd1_handler (); 25751 25752`interrupt_handler' 25753 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, 25754 and SH to indicate that the specified function is an interrupt 25755 handler. The compiler generates function entry and exit sequences 25756 suitable for use in an interrupt handler when this attribute is 25757 present. 25758 25759`interrupt_thread' 25760 Use this attribute on fido, a subarchitecture of the m68k, to 25761 indicate that the specified function is an interrupt handler that 25762 is designed to run as a thread. The compiler omits generate 25763 prologue/epilogue sequences and replaces the return instruction 25764 with a `sleep' instruction. This attribute is available only on 25765 fido. 25766 25767`isr' 25768 Use this attribute on ARM to write Interrupt Service Routines. 25769 This is an alias to the `interrupt' attribute above. 25770 25771`kspisusp' 25772 When used together with `interrupt_handler', `exception_handler' 25773 or `nmi_handler', code is generated to load the stack pointer from 25774 the USP register in the function prologue. 25775 25776`l1_text' 25777 This attribute specifies a function to be placed into L1 25778 Instruction SRAM. The function is put into a specific section 25779 named `.l1.text'. With `-mfdpic', function calls with a such 25780 function as the callee or caller uses inlined PLT. 25781 25782`l2' 25783 On the Blackfin, this attribute specifies a function to be placed 25784 into L2 SRAM. The function is put into a specific section named 25785 `.l1.text'. With `-mfdpic', callers of such functions use an 25786 inlined PLT. 25787 25788`leaf' 25789 Calls to external functions with this attribute must return to the 25790 current compilation unit only by return or by exception handling. 25791 In particular, leaf functions are not allowed to call callback 25792 function passed to it from the current compilation unit or 25793 directly call functions exported by the unit or longjmp into the 25794 unit. Leaf function might still call functions from other 25795 compilation units and thus they are not necessarily leaf in the 25796 sense that they contain no function calls at all. 25797 25798 The attribute is intended for library functions to improve 25799 dataflow analysis. The compiler takes the hint that any data not 25800 escaping the current compilation unit can not be used or modified 25801 by the leaf function. For example, the `sin' function is a leaf 25802 function, but `qsort' is not. 25803 25804 Note that leaf functions might invoke signals and signal handlers 25805 might be defined in the current compilation unit and use static 25806 variables. The only compliant way to write such a signal handler 25807 is to declare such variables `volatile'. 25808 25809 The attribute has no effect on functions defined within the 25810 current compilation unit. This is to allow easy merging of 25811 multiple compilation units into one, for example, by using the 25812 link-time optimization. For this reason the attribute is not 25813 allowed on types to annotate indirect calls. 25814 25815`long_call' 25816`medium_call' 25817`short_call' 25818 These attributes specify how a particular function is called on 25819 ARC, ARM and Epiphany - with `medium_call' being specific to ARC. 25820 These attributes override the `-mlong-calls' (*note ARM Options:: 25821 and *Note ARC Options::) and `-mmedium-calls' (*note ARC Options::) 25822 command-line switches and `#pragma long_calls' settings. For ARM, 25823 the `long_call' attribute indicates that the function might be far 25824 away from the call site and require a different (more expensive) 25825 calling sequence. The `short_call' attribute always places the 25826 offset to the function from the call site into the `BL' 25827 instruction directly. 25828 25829 For ARC, a function marked with the `long_call' attribute is 25830 always called using register-indirect jump-and-link instructions, 25831 thereby enabling the called function to be placed anywhere within 25832 the 32-bit address space. A function marked with the `medium_call' 25833 attribute will always be close enough to be called with an 25834 unconditional branch-and-link instruction, which has a 25-bit 25835 offset from the call site. A function marked with the `short_call' 25836 attribute will always be close enough to be called with a 25837 conditional branch-and-link instruction, which has a 21-bit offset 25838 from the call site. 25839 25840`longcall' 25841`shortcall' 25842 On Blackfin and PowerPC, the `longcall' attribute indicates that 25843 the function might be far away from the call site and require a 25844 different (more expensive) calling sequence. The `shortcall' 25845 attribute indicates that the function is always close enough for 25846 the shorter calling sequence to be used. These attributes 25847 override both the `-mlongcall' switch and, on the RS/6000 and 25848 PowerPC, the `#pragma longcall' setting. 25849 25850 *Note RS/6000 and PowerPC Options::, for more information on 25851 whether long calls are necessary. 25852 25853`long_call' 25854`near' 25855`far' 25856 These attributes specify how a particular function is called on 25857 MIPS. The attributes override the `-mlong-calls' (*note MIPS 25858 Options::) command-line switch. The `long_call' and `far' 25859 attributes are synonyms, and cause the compiler to always call the 25860 function by first loading its address into a register, and then 25861 using the contents of that register. The `near' attribute has the 25862 opposite effect; it specifies that non-PIC calls should be made 25863 using the more efficient `jal' instruction. 25864 25865`malloc' 25866 This tells the compiler that a function is `malloc'-like, i.e., 25867 that the pointer P returned by the function cannot alias any other 25868 pointer valid when the function returns, and moreover no pointers 25869 to valid objects occur in any storage addressed by P. 25870 25871 Using this attribute can improve optimization. Functions like 25872 `malloc' and `calloc' have this property because they return a 25873 pointer to uninitialized or zeroed-out storage. However, functions 25874 like `realloc' do not have this property, as they can return a 25875 pointer to storage containing pointers. 25876 25877`mips16' 25878`nomips16' 25879 On MIPS targets, you can use the `mips16' and `nomips16' function 25880 attributes to locally select or turn off MIPS16 code generation. 25881 A function with the `mips16' attribute is emitted as MIPS16 code, 25882 while MIPS16 code generation is disabled for functions with the 25883 `nomips16' attribute. These attributes override the `-mips16' and 25884 `-mno-mips16' options on the command line (*note MIPS Options::). 25885 25886 When compiling files containing mixed MIPS16 and non-MIPS16 code, 25887 the preprocessor symbol `__mips16' reflects the setting on the 25888 command line, not that within individual functions. Mixed MIPS16 25889 and non-MIPS16 code may interact badly with some GCC extensions 25890 such as `__builtin_apply' (*note Constructing Calls::). 25891 25892`micromips, MIPS' 25893`nomicromips, MIPS' 25894 On MIPS targets, you can use the `micromips' and `nomicromips' 25895 function attributes to locally select or turn off microMIPS code 25896 generation. A function with the `micromips' attribute is emitted 25897 as microMIPS code, while microMIPS code generation is disabled for 25898 functions with the `nomicromips' attribute. These attributes 25899 override the `-mmicromips' and `-mno-micromips' options on the 25900 command line (*note MIPS Options::). 25901 25902 When compiling files containing mixed microMIPS and non-microMIPS 25903 code, the preprocessor symbol `__mips_micromips' reflects the 25904 setting on the command line, not that within individual functions. 25905 Mixed microMIPS and non-microMIPS code may interact badly with 25906 some GCC extensions such as `__builtin_apply' (*note Constructing 25907 Calls::). 25908 25909`model (MODEL-NAME)' 25910 On the M32R/D, use this attribute to set the addressability of an 25911 object, and of the code generated for a function. The identifier 25912 MODEL-NAME is one of `small', `medium', or `large', representing 25913 each of the code models. 25914 25915 Small model objects live in the lower 16MB of memory (so that their 25916 addresses can be loaded with the `ld24' instruction), and are 25917 callable with the `bl' instruction. 25918 25919 Medium model objects may live anywhere in the 32-bit address space 25920 (the compiler generates `seth/add3' instructions to load their 25921 addresses), and are callable with the `bl' instruction. 25922 25923 Large model objects may live anywhere in the 32-bit address space 25924 (the compiler generates `seth/add3' instructions to load their 25925 addresses), and may not be reachable with the `bl' instruction 25926 (the compiler generates the much slower `seth/add3/jl' instruction 25927 sequence). 25928 25929`ms_abi' 25930`sysv_abi' 25931 On 32-bit and 64-bit x86 targets, you can use an ABI attribute to 25932 indicate which calling convention should be used for a function. 25933 The `ms_abi' attribute tells the compiler to use the Microsoft ABI, 25934 while the `sysv_abi' attribute tells the compiler to use the ABI 25935 used on GNU/Linux and other systems. The default is to use the 25936 Microsoft ABI when targeting Windows. On all other systems, the 25937 default is the x86/AMD ABI. 25938 25939 Note, the `ms_abi' attribute for Microsoft Windows 64-bit targets 25940 currently requires the `-maccumulate-outgoing-args' option. 25941 25942`callee_pop_aggregate_return (NUMBER)' 25943 On x86-32 targets, you can use this attribute to control how 25944 aggregates are returned in memory. If the caller is responsible 25945 for popping the hidden pointer together with the rest of the 25946 arguments, specify NUMBER equal to zero. If callee is responsible 25947 for popping the hidden pointer, specify NUMBER equal to one. 25948 25949 The default x86-32 ABI assumes that the callee pops the stack for 25950 hidden pointer. However, on x86-32 Microsoft Windows targets, the 25951 compiler assumes that the caller pops the stack for hidden pointer. 25952 25953`ms_hook_prologue' 25954 On 32-bit and 64-bit x86 targets, you can use this function 25955 attribute to make GCC generate the "hot-patching" function 25956 prologue used in Win32 API functions in Microsoft Windows XP 25957 Service Pack 2 and newer. 25958 25959`hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)' 25960 On S/390 System z targets, you can use this function attribute to 25961 make GCC generate a "hot-patching" function prologue. If the 25962 `-mhotpatch=' command-line option is used at the same time, the 25963 `hotpatch' attribute takes precedence. The first of the two 25964 arguments specifies the number of halfwords to be added before the 25965 function label. A second argument can be used to specify the 25966 number of halfwords to be added after the function label. For 25967 both arguments the maximum allowed value is 1000000. 25968 25969 If both arguments are zero, hotpatching is disabled. 25970 25971`naked' 25972 This attribute is available on the ARM, AVR, MCORE, MSP430, NDS32, 25973 RL78, RX and SPU ports. It allows the compiler to construct the 25974 requisite function declaration, while allowing the body of the 25975 function to be assembly code. The specified function will not have 25976 prologue/epilogue sequences generated by the compiler. Only basic 25977 `asm' statements can safely be included in naked functions (*note 25978 Basic Asm::). While using extended `asm' or a mixture of basic 25979 `asm' and C code may appear to work, they cannot be depended upon 25980 to work reliably and are not supported. 25981 25982`near' 25983 On MeP targets this attribute causes the compiler to assume the 25984 called function is close enough to use the normal calling 25985 convention, overriding the `-mtf' command-line option. 25986 25987`nesting' 25988 Use this attribute together with `interrupt_handler', 25989 `exception_handler' or `nmi_handler' to indicate that the function 25990 entry code should enable nested interrupts or exceptions. 25991 25992`nmi_handler' 25993 Use this attribute on the Blackfin to indicate that the specified 25994 function is an NMI handler. The compiler generates function entry 25995 and exit sequences suitable for use in an NMI handler when this 25996 attribute is present. 25997 25998`nocompression' 25999 On MIPS targets, you can use the `nocompression' function attribute 26000 to locally turn off MIPS16 and microMIPS code generation. This 26001 attribute overrides the `-mips16' and `-mmicromips' options on the 26002 command line (*note MIPS Options::). 26003 26004`no_instrument_function' 26005 If `-finstrument-functions' is given, profiling function calls are 26006 generated at entry and exit of most user-compiled functions. 26007 Functions with this attribute are not so instrumented. 26008 26009`no_split_stack' 26010 If `-fsplit-stack' is given, functions have a small prologue which 26011 decides whether to split the stack. Functions with the 26012 `no_split_stack' attribute do not have that prologue, and thus may 26013 run with only a small amount of stack space available. 26014 26015`stack_protect' 26016 This function attribute make a stack protection of the function if 26017 flags `fstack-protector' or `fstack-protector-strong' or 26018 `fstack-protector-explicit' are set. 26019 26020`noinline' 26021 This function attribute prevents a function from being considered 26022 for inlining. If the function does not have side-effects, there 26023 are optimizations other than inlining that cause function calls to 26024 be optimized away, although the function call is live. To keep 26025 such calls from being optimized away, put 26026 asm (""); 26027 26028 (*note Extended Asm::) in the called function, to serve as a 26029 special side-effect. 26030 26031`noclone' 26032 This function attribute prevents a function from being considered 26033 for cloning--a mechanism that produces specialized copies of 26034 functions and which is (currently) performed by interprocedural 26035 constant propagation. 26036 26037`no_icf' 26038 This function attribute prevents a functions from being merged 26039 with another semantically equivalent function. 26040 26041`nonnull (ARG-INDEX, ...)' 26042 The `nonnull' attribute specifies that some function parameters 26043 should be non-null pointers. For instance, the declaration: 26044 26045 extern void * 26046 my_memcpy (void *dest, const void *src, size_t len) 26047 __attribute__((nonnull (1, 2))); 26048 26049 causes the compiler to check that, in calls to `my_memcpy', 26050 arguments DEST and SRC are non-null. If the compiler determines 26051 that a null pointer is passed in an argument slot marked as 26052 non-null, and the `-Wnonnull' option is enabled, a warning is 26053 issued. The compiler may also choose to make optimizations based 26054 on the knowledge that certain function arguments will never be 26055 null. 26056 26057 If no argument index list is given to the `nonnull' attribute, all 26058 pointer arguments are marked as non-null. To illustrate, the 26059 following declaration is equivalent to the previous example: 26060 26061 extern void * 26062 my_memcpy (void *dest, const void *src, size_t len) 26063 __attribute__((nonnull)); 26064 26065`no_reorder' 26066 Do not reorder functions or variables marked `no_reorder' against 26067 each other or top level assembler statements the executable. The 26068 actual order in the program will depend on the linker command 26069 line. Static variables marked like this are also not removed. 26070 This has a similar effect as the `-fno-toplevel-reorder' option, 26071 but only applies to the marked symbols. 26072 26073`returns_nonnull' 26074 The `returns_nonnull' attribute specifies that the function return 26075 value should be a non-null pointer. For instance, the declaration: 26076 26077 extern void * 26078 mymalloc (size_t len) __attribute__((returns_nonnull)); 26079 26080 lets the compiler optimize callers based on the knowledge that the 26081 return value will never be null. 26082 26083`noreturn' 26084 A few standard library functions, such as `abort' and `exit', 26085 cannot return. GCC knows this automatically. Some programs define 26086 their own functions that never return. You can declare them 26087 `noreturn' to tell the compiler this fact. For example, 26088 26089 void fatal () __attribute__ ((noreturn)); 26090 26091 void 26092 fatal (/* ... */) 26093 { 26094 /* ... */ /* Print error message. */ /* ... */ 26095 exit (1); 26096 } 26097 26098 The `noreturn' keyword tells the compiler to assume that `fatal' 26099 cannot return. It can then optimize without regard to what would 26100 happen if `fatal' ever did return. This makes slightly better 26101 code. More importantly, it helps avoid spurious warnings of 26102 uninitialized variables. 26103 26104 The `noreturn' keyword does not affect the exceptional path when 26105 that applies: a `noreturn'-marked function may still return to the 26106 caller by throwing an exception or calling `longjmp'. 26107 26108 Do not assume that registers saved by the calling function are 26109 restored before calling the `noreturn' function. 26110 26111 It does not make sense for a `noreturn' function to have a return 26112 type other than `void'. 26113 26114`nothrow' 26115 The `nothrow' attribute is used to inform the compiler that a 26116 function cannot throw an exception. For example, most functions in 26117 the standard C library can be guaranteed not to throw an exception 26118 with the notable exceptions of `qsort' and `bsearch' that take 26119 function pointer arguments. 26120 26121`nosave_low_regs' 26122 Use this attribute on SH targets to indicate that an 26123 `interrupt_handler' function should not save and restore registers 26124 R0..R7. This can be used on SH3* and SH4* targets that have a 26125 second R0..R7 register bank for non-reentrant interrupt handlers. 26126 26127`optimize' 26128 The `optimize' attribute is used to specify that a function is to 26129 be compiled with different optimization options than specified on 26130 the command line. Arguments can either be numbers or strings. 26131 Numbers are assumed to be an optimization level. Strings that 26132 begin with `O' are assumed to be an optimization option, while 26133 other options are assumed to be used with a `-f' prefix. You can 26134 also use the `#pragma GCC optimize' pragma to set the optimization 26135 options that affect more than one function. *Note Function 26136 Specific Option Pragmas::, for details about the `#pragma GCC 26137 optimize' pragma. 26138 26139 This can be used for instance to have frequently-executed functions 26140 compiled with more aggressive optimization options that produce 26141 faster and larger code, while other functions can be compiled with 26142 less aggressive options. 26143 26144`OS_main' 26145`OS_task' 26146 On AVR, functions with the `OS_main' or `OS_task' attribute do not 26147 save/restore any call-saved register in their prologue/epilogue. 26148 26149 The `OS_main' attribute can be used when there _is guarantee_ that 26150 interrupts are disabled at the time when the function is entered. 26151 This saves resources when the stack pointer has to be changed to 26152 set up a frame for local variables. 26153 26154 The `OS_task' attribute can be used when there is _no guarantee_ 26155 that interrupts are disabled at that time when the function is 26156 entered like for, e.g. task functions in a multi-threading 26157 operating system. In that case, changing the stack pointer 26158 register is guarded by save/clear/restore of the global interrupt 26159 enable flag. 26160 26161 The differences to the `naked' function attribute are: 26162 * `naked' functions do not have a return instruction whereas 26163 `OS_main' and `OS_task' functions have a `RET' or `RETI' 26164 return instruction. 26165 26166 * `naked' functions do not set up a frame for local variables 26167 or a frame pointer whereas `OS_main' and `OS_task' do this as 26168 needed. 26169 26170`pcs' 26171 The `pcs' attribute can be used to control the calling convention 26172 used for a function on ARM. The attribute takes an argument that 26173 specifies the calling convention to use. 26174 26175 When compiling using the AAPCS ABI (or a variant of it) then valid 26176 values for the argument are `"aapcs"' and `"aapcs-vfp"'. In order 26177 to use a variant other than `"aapcs"' then the compiler must be 26178 permitted to use the appropriate co-processor registers (i.e., the 26179 VFP registers must be available in order to use `"aapcs-vfp"'). 26180 For example, 26181 26182 /* Argument passed in r0, and result returned in r0+r1. */ 26183 double f2d (float) __attribute__((pcs("aapcs"))); 26184 26185 Variadic functions always use the `"aapcs"' calling convention and 26186 the compiler rejects attempts to specify an alternative. 26187 26188`pure' 26189 Many functions have no effects except the return value and their 26190 return value depends only on the parameters and/or global 26191 variables. Such a function can be subject to common subexpression 26192 elimination and loop optimization just as an arithmetic operator 26193 would be. These functions should be declared with the attribute 26194 `pure'. For example, 26195 26196 int square (int) __attribute__ ((pure)); 26197 26198 says that the hypothetical function `square' is safe to call fewer 26199 times than the program says. 26200 26201 Some of common examples of pure functions are `strlen' or `memcmp'. 26202 Interesting non-pure functions are functions with infinite loops 26203 or those depending on volatile memory or other system resource, 26204 that may change between two consecutive calls (such as `feof' in a 26205 multithreading environment). 26206 26207`hot' 26208 The `hot' attribute on a function is used to inform the compiler 26209 that the function is a hot spot of the compiled program. The 26210 function is optimized more aggressively and on many targets it is 26211 placed into a special subsection of the text section so all hot 26212 functions appear close together, improving locality. 26213 26214 When profile feedback is available, via `-fprofile-use', hot 26215 functions are automatically detected and this attribute is ignored. 26216 26217`cold' 26218 The `cold' attribute on functions is used to inform the compiler 26219 that the function is unlikely to be executed. The function is 26220 optimized for size rather than speed and on many targets it is 26221 placed into a special subsection of the text section so all cold 26222 functions appear close together, improving code locality of 26223 non-cold parts of program. The paths leading to calls of cold 26224 functions within code are marked as unlikely by the branch 26225 prediction mechanism. It is thus useful to mark functions used to 26226 handle unlikely conditions, such as `perror', as cold to improve 26227 optimization of hot functions that do call marked functions in 26228 rare occasions. 26229 26230 When profile feedback is available, via `-fprofile-use', cold 26231 functions are automatically detected and this attribute is ignored. 26232 26233`no_sanitize_address' 26234`no_address_safety_analysis' 26235 The `no_sanitize_address' attribute on functions is used to inform 26236 the compiler that it should not instrument memory accesses in the 26237 function when compiling with the `-fsanitize=address' option. The 26238 `no_address_safety_analysis' is a deprecated alias of the 26239 `no_sanitize_address' attribute, new code should use 26240 `no_sanitize_address'. 26241 26242`no_sanitize_thread' 26243 The `no_sanitize_thread' attribute on functions is used to inform 26244 the compiler that it should not instrument memory accesses in the 26245 function when compiling with the `-fsanitize=thread' option. 26246 26247`no_sanitize_undefined' 26248 The `no_sanitize_undefined' attribute on functions is used to 26249 inform the compiler that it should not check for undefined behavior 26250 in the function when compiling with the `-fsanitize=undefined' 26251 option. 26252 26253`bnd_legacy' 26254 The `bnd_legacy' attribute on functions is used to inform the 26255 compiler that the function should not be instrumented when compiled 26256 with the `-fcheck-pointer-bounds' option. 26257 26258`bnd_instrument' 26259 The `bnd_instrument' attribute on functions is used to inform the 26260 compiler that the function should be instrumented when compiled 26261 with the `-fchkp-instrument-marked-only' option. 26262 26263`regparm (NUMBER)' 26264 On x86-32 targets, the `regparm' attribute causes the compiler to 26265 pass arguments number one to NUMBER if they are of integral type 26266 in registers EAX, EDX, and ECX instead of on the stack. Functions 26267 that take a variable number of arguments continue to be passed all 26268 of their arguments on the stack. 26269 26270 Beware that on some ELF systems this attribute is unsuitable for 26271 global functions in shared libraries with lazy binding (which is 26272 the default). Lazy binding sends the first call via resolving 26273 code in the loader, which might assume EAX, EDX and ECX can be 26274 clobbered, as per the standard calling conventions. Solaris 8 is 26275 affected by this. Systems with the GNU C Library version 2.1 or 26276 higher and FreeBSD are believed to be safe since the loaders there 26277 save EAX, EDX and ECX. (Lazy binding can be disabled with the 26278 linker or the loader if desired, to avoid the problem.) 26279 26280`reset' 26281 Use this attribute on the NDS32 target to indicate that the 26282 specified function is a reset handler. The compiler will generate 26283 corresponding sections for use in a reset handler. You can use 26284 the following attributes to provide extra exception handling: 26285 `nmi' 26286 Provide a user-defined function to handle NMI exception. 26287 26288 `warm' 26289 Provide a user-defined function to handle warm reset 26290 exception. 26291 26292`sseregparm' 26293 On x86-32 targets with SSE support, the `sseregparm' attribute 26294 causes the compiler to pass up to 3 floating-point arguments in 26295 SSE registers instead of on the stack. Functions that take a 26296 variable number of arguments continue to pass all of their 26297 floating-point arguments on the stack. 26298 26299`force_align_arg_pointer' 26300 On x86 targets, the `force_align_arg_pointer' attribute may be 26301 applied to individual function definitions, generating an alternate 26302 prologue and epilogue that realigns the run-time stack if 26303 necessary. This supports mixing legacy codes that run with a 26304 4-byte aligned stack with modern codes that keep a 16-byte stack 26305 for SSE compatibility. 26306 26307`renesas' 26308 On SH targets this attribute specifies that the function or struct 26309 follows the Renesas ABI. 26310 26311`resbank' 26312 On the SH2A target, this attribute enables the high-speed register 26313 saving and restoration using a register bank for 26314 `interrupt_handler' routines. Saving to the bank is performed 26315 automatically after the CPU accepts an interrupt that uses a 26316 register bank. 26317 26318 The nineteen 32-bit registers comprising general register R0 to 26319 R14, control register GBR, and system registers MACH, MACL, and PR 26320 and the vector table address offset are saved into a register 26321 bank. Register banks are stacked in first-in last-out (FILO) 26322 sequence. Restoration from the bank is executed by issuing a 26323 RESBANK instruction. 26324 26325`returns_twice' 26326 The `returns_twice' attribute tells the compiler that a function 26327 may return more than one time. The compiler ensures that all 26328 registers are dead before calling such a function and emits a 26329 warning about the variables that may be clobbered after the second 26330 return from the function. Examples of such functions are `setjmp' 26331 and `vfork'. The `longjmp'-like counterpart of such function, if 26332 any, might need to be marked with the `noreturn' attribute. 26333 26334`saveall' 26335 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 26336 indicate that all registers except the stack pointer should be 26337 saved in the prologue regardless of whether they are used or not. 26338 26339`save_volatiles' 26340 Use this attribute on the MicroBlaze to indicate that the function 26341 is an interrupt handler. All volatile registers (in addition to 26342 non-volatile registers) are saved in the function prologue. If 26343 the function is a leaf function, only volatiles used by the 26344 function are saved. A normal function return is generated instead 26345 of a return from interrupt. 26346 26347`break_handler' 26348 Use this attribute on the MicroBlaze ports to indicate that the 26349 specified function is a break handler. The compiler generates 26350 function entry and exit sequences suitable for use in an break 26351 handler when this attribute is present. The return from 26352 `break_handler' is done through the `rtbd' instead of `rtsd'. 26353 26354 void f () __attribute__ ((break_handler)); 26355 26356`section ("SECTION-NAME")' 26357 Normally, the compiler places the code it generates in the `text' 26358 section. Sometimes, however, you need additional sections, or you 26359 need certain particular functions to appear in special sections. 26360 The `section' attribute specifies that a function lives in a 26361 particular section. For example, the declaration: 26362 26363 extern void foobar (void) __attribute__ ((section ("bar"))); 26364 26365 puts the function `foobar' in the `bar' section. 26366 26367 Some file formats do not support arbitrary sections so the 26368 `section' attribute is not available on all platforms. If you 26369 need to map the entire contents of a module to a particular 26370 section, consider using the facilities of the linker instead. 26371 26372`sentinel' 26373 This function attribute ensures that a parameter in a function 26374 call is an explicit `NULL'. The attribute is only valid on 26375 variadic functions. By default, the sentinel is located at 26376 position zero, the last parameter of the function call. If an 26377 optional integer position argument P is supplied to the attribute, 26378 the sentinel must be located at position P counting backwards from 26379 the end of the argument list. 26380 26381 __attribute__ ((sentinel)) 26382 is equivalent to 26383 __attribute__ ((sentinel(0))) 26384 26385 The attribute is automatically set with a position of 0 for the 26386 built-in functions `execl' and `execlp'. The built-in function 26387 `execle' has the attribute set with a position of 1. 26388 26389 A valid `NULL' in this context is defined as zero with any pointer 26390 type. If your system defines the `NULL' macro with an integer type 26391 then you need to add an explicit cast. GCC replaces `stddef.h' 26392 with a copy that redefines NULL appropriately. 26393 26394 The warnings for missing or incorrect sentinels are enabled with 26395 `-Wformat'. 26396 26397`short_call' 26398 See `long_call'. 26399 26400`shortcall' 26401 See `longcall'. 26402 26403`signal' 26404 Use this attribute on the AVR to indicate that the specified 26405 function is an interrupt handler. The compiler generates function 26406 entry and exit sequences suitable for use in an interrupt handler 26407 when this attribute is present. 26408 26409 See also the `interrupt' function attribute. 26410 26411 The AVR hardware globally disables interrupts when an interrupt is 26412 executed. Interrupt handler functions defined with the `signal' 26413 attribute do not re-enable interrupts. It is save to enable 26414 interrupts in a `signal' handler. This "save" only applies to the 26415 code generated by the compiler and not to the IRQ layout of the 26416 application which is responsibility of the application. 26417 26418 If both `signal' and `interrupt' are specified for the same 26419 function, `signal' is silently ignored. 26420 26421`sp_switch' 26422 Use this attribute on the SH to indicate an `interrupt_handler' 26423 function should switch to an alternate stack. It expects a string 26424 argument that names a global variable holding the address of the 26425 alternate stack. 26426 26427 void *alt_stack; 26428 void f () __attribute__ ((interrupt_handler, 26429 sp_switch ("alt_stack"))); 26430 26431`stdcall' 26432 On x86-32 targets, the `stdcall' attribute causes the compiler to 26433 assume that the called function pops off the stack space used to 26434 pass arguments, unless it takes a variable number of arguments. 26435 26436`syscall_linkage' 26437 This attribute is used to modify the IA-64 calling convention by 26438 marking all input registers as live at all function exits. This 26439 makes it possible to restart a system call after an interrupt 26440 without having to save/restore the input registers. This also 26441 prevents kernel data from leaking into application code. 26442 26443`target' 26444 The `target' attribute is used to specify that a function is to be 26445 compiled with different target options than specified on the 26446 command line. This can be used for instance to have functions 26447 compiled with a different ISA (instruction set architecture) than 26448 the default. You can also use the `#pragma GCC target' pragma to 26449 set more than one function to be compiled with specific target 26450 options. *Note Function Specific Option Pragmas::, for details 26451 about the `#pragma GCC target' pragma. 26452 26453 For instance on an x86, you could compile one function with 26454 `target("sse4.1,arch=core2")' and another with 26455 `target("sse4a,arch=amdfam10")'. This is equivalent to compiling 26456 the first function with `-msse4.1' and `-march=core2' options, and 26457 the second function with `-msse4a' and `-march=amdfam10' options. 26458 It is up to the user to make sure that a function is only invoked 26459 on a machine that supports the particular ISA it is compiled for 26460 (for example by using `cpuid' on x86 to determine what feature 26461 bits and architecture family are used). 26462 26463 int core2_func (void) __attribute__ ((__target__ ("arch=core2"))); 26464 int sse3_func (void) __attribute__ ((__target__ ("sse3"))); 26465 26466 You can either use multiple strings to specify multiple options, 26467 or separate the options with a comma (`,'). 26468 26469 The `target' attribute is presently implemented for x86, PowerPC, 26470 and Nios II targets only. The options supported are specific to 26471 each target. 26472 26473 On the x86, the following options are allowed: 26474 26475 `abm' 26476 `no-abm' 26477 Enable/disable the generation of the advanced bit 26478 instructions. 26479 26480 `aes' 26481 `no-aes' 26482 Enable/disable the generation of the AES instructions. 26483 26484 `default' 26485 *Note Function Multiversioning::, where it is used to specify 26486 the default function version. 26487 26488 `mmx' 26489 `no-mmx' 26490 Enable/disable the generation of the MMX instructions. 26491 26492 `pclmul' 26493 `no-pclmul' 26494 Enable/disable the generation of the PCLMUL instructions. 26495 26496 `popcnt' 26497 `no-popcnt' 26498 Enable/disable the generation of the POPCNT instruction. 26499 26500 `sse' 26501 `no-sse' 26502 Enable/disable the generation of the SSE instructions. 26503 26504 `sse2' 26505 `no-sse2' 26506 Enable/disable the generation of the SSE2 instructions. 26507 26508 `sse3' 26509 `no-sse3' 26510 Enable/disable the generation of the SSE3 instructions. 26511 26512 `sse4' 26513 `no-sse4' 26514 Enable/disable the generation of the SSE4 instructions (both 26515 SSE4.1 and SSE4.2). 26516 26517 `sse4.1' 26518 `no-sse4.1' 26519 Enable/disable the generation of the sse4.1 instructions. 26520 26521 `sse4.2' 26522 `no-sse4.2' 26523 Enable/disable the generation of the sse4.2 instructions. 26524 26525 `sse4a' 26526 `no-sse4a' 26527 Enable/disable the generation of the SSE4A instructions. 26528 26529 `fma4' 26530 `no-fma4' 26531 Enable/disable the generation of the FMA4 instructions. 26532 26533 `xop' 26534 `no-xop' 26535 Enable/disable the generation of the XOP instructions. 26536 26537 `lwp' 26538 `no-lwp' 26539 Enable/disable the generation of the LWP instructions. 26540 26541 `ssse3' 26542 `no-ssse3' 26543 Enable/disable the generation of the SSSE3 instructions. 26544 26545 `cld' 26546 `no-cld' 26547 Enable/disable the generation of the CLD before string moves. 26548 26549 `fancy-math-387' 26550 `no-fancy-math-387' 26551 Enable/disable the generation of the `sin', `cos', and `sqrt' 26552 instructions on the 387 floating-point unit. 26553 26554 `fused-madd' 26555 `no-fused-madd' 26556 Enable/disable the generation of the fused multiply/add 26557 instructions. 26558 26559 `ieee-fp' 26560 `no-ieee-fp' 26561 Enable/disable the generation of floating point that depends 26562 on IEEE arithmetic. 26563 26564 `inline-all-stringops' 26565 `no-inline-all-stringops' 26566 Enable/disable inlining of string operations. 26567 26568 `inline-stringops-dynamically' 26569 `no-inline-stringops-dynamically' 26570 Enable/disable the generation of the inline code to do small 26571 string operations and calling the library routines for large 26572 operations. 26573 26574 `align-stringops' 26575 `no-align-stringops' 26576 Do/do not align destination of inlined string operations. 26577 26578 `recip' 26579 `no-recip' 26580 Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and 26581 RSQRTPS instructions followed an additional Newton-Raphson 26582 step instead of doing a floating-point division. 26583 26584 `arch=ARCH' 26585 Specify the architecture to generate code for in compiling 26586 the function. 26587 26588 `tune=TUNE' 26589 Specify the architecture to tune for in compiling the 26590 function. 26591 26592 `fpmath=FPMATH' 26593 Specify which floating-point unit to use. The 26594 `target("fpmath=sse,387")' option must be specified as 26595 `target("fpmath=sse+387")' because the comma would separate 26596 different options. 26597 26598 On the PowerPC, the following options are allowed: 26599 26600 `altivec' 26601 `no-altivec' 26602 Generate code that uses (does not use) AltiVec instructions. 26603 In 32-bit code, you cannot enable AltiVec instructions unless 26604 `-mabi=altivec' is used on the command line. 26605 26606 `cmpb' 26607 `no-cmpb' 26608 Generate code that uses (does not use) the compare bytes 26609 instruction implemented on the POWER6 processor and other 26610 processors that support the PowerPC V2.05 architecture. 26611 26612 `dlmzb' 26613 `no-dlmzb' 26614 Generate code that uses (does not use) the string-search 26615 `dlmzb' instruction on the IBM 405, 440, 464 and 476 26616 processors. This instruction is generated by default when 26617 targeting those processors. 26618 26619 `fprnd' 26620 `no-fprnd' 26621 Generate code that uses (does not use) the FP round to integer 26622 instructions implemented on the POWER5+ processor and other 26623 processors that support the PowerPC V2.03 architecture. 26624 26625 `hard-dfp' 26626 `no-hard-dfp' 26627 Generate code that uses (does not use) the decimal 26628 floating-point instructions implemented on some POWER 26629 processors. 26630 26631 `isel' 26632 `no-isel' 26633 Generate code that uses (does not use) ISEL instruction. 26634 26635 `mfcrf' 26636 `no-mfcrf' 26637 Generate code that uses (does not use) the move from condition 26638 register field instruction implemented on the POWER4 26639 processor and other processors that support the PowerPC V2.01 26640 architecture. 26641 26642 `mfpgpr' 26643 `no-mfpgpr' 26644 Generate code that uses (does not use) the FP move to/from 26645 general purpose register instructions implemented on the 26646 POWER6X processor and other processors that support the 26647 extended PowerPC V2.05 architecture. 26648 26649 `mulhw' 26650 `no-mulhw' 26651 Generate code that uses (does not use) the half-word multiply 26652 and multiply-accumulate instructions on the IBM 405, 440, 464 26653 and 476 processors. These instructions are generated by 26654 default when targeting those processors. 26655 26656 `multiple' 26657 `no-multiple' 26658 Generate code that uses (does not use) the load multiple word 26659 instructions and the store multiple word instructions. 26660 26661 `update' 26662 `no-update' 26663 Generate code that uses (does not use) the load or store 26664 instructions that update the base register to the address of 26665 the calculated memory location. 26666 26667 `popcntb' 26668 `no-popcntb' 26669 Generate code that uses (does not use) the popcount and 26670 double-precision FP reciprocal estimate instruction 26671 implemented on the POWER5 processor and other processors that 26672 support the PowerPC V2.02 architecture. 26673 26674 `popcntd' 26675 `no-popcntd' 26676 Generate code that uses (does not use) the popcount 26677 instruction implemented on the POWER7 processor and other 26678 processors that support the PowerPC V2.06 architecture. 26679 26680 `powerpc-gfxopt' 26681 `no-powerpc-gfxopt' 26682 Generate code that uses (does not use) the optional PowerPC 26683 architecture instructions in the Graphics group, including 26684 floating-point select. 26685 26686 `powerpc-gpopt' 26687 `no-powerpc-gpopt' 26688 Generate code that uses (does not use) the optional PowerPC 26689 architecture instructions in the General Purpose group, 26690 including floating-point square root. 26691 26692 `recip-precision' 26693 `no-recip-precision' 26694 Assume (do not assume) that the reciprocal estimate 26695 instructions provide higher-precision estimates than is 26696 mandated by the PowerPC ABI. 26697 26698 `string' 26699 `no-string' 26700 Generate code that uses (does not use) the load string 26701 instructions and the store string word instructions to save 26702 multiple registers and do small block moves. 26703 26704 `vsx' 26705 `no-vsx' 26706 Generate code that uses (does not use) vector/scalar (VSX) 26707 instructions, and also enable the use of built-in functions 26708 that allow more direct access to the VSX instruction set. In 26709 32-bit code, you cannot enable VSX or AltiVec instructions 26710 unless `-mabi=altivec' is used on the command line. 26711 26712 `friz' 26713 `no-friz' 26714 Generate (do not generate) the `friz' instruction when the 26715 `-funsafe-math-optimizations' option is used to optimize 26716 rounding a floating-point value to 64-bit integer and back to 26717 floating point. The `friz' instruction does not return the 26718 same value if the floating-point number is too large to fit 26719 in an integer. 26720 26721 `avoid-indexed-addresses' 26722 `no-avoid-indexed-addresses' 26723 Generate code that tries to avoid (not avoid) the use of 26724 indexed load or store instructions. 26725 26726 `paired' 26727 `no-paired' 26728 Generate code that uses (does not use) the generation of 26729 PAIRED simd instructions. 26730 26731 `longcall' 26732 `no-longcall' 26733 Generate code that assumes (does not assume) that all calls 26734 are far away so that a longer more expensive calling sequence 26735 is required. 26736 26737 `cpu=CPU' 26738 Specify the architecture to generate code for when compiling 26739 the function. If you select the `target("cpu=power7")' 26740 attribute when generating 32-bit code, VSX and AltiVec 26741 instructions are not generated unless you use the 26742 `-mabi=altivec' option on the command line. 26743 26744 `tune=TUNE' 26745 Specify the architecture to tune for when compiling the 26746 function. If you do not specify the `target("tune=TUNE")' 26747 attribute and you do specify the `target("cpu=CPU")' 26748 attribute, compilation tunes for the CPU architecture, and 26749 not the default tuning specified on the command line. 26750 26751 When compiling for Nios II, the following options are allowed: 26752 26753 `custom-INSN=N' 26754 `no-custom-INSN' 26755 Each `custom-INSN=N' attribute locally enables use of a 26756 custom instruction with encoding N when generating code that 26757 uses INSN. Similarly, `no-custom-INSN' locally inhibits use 26758 of the custom instruction INSN. These target attributes 26759 correspond to the `-mcustom-INSN=N' and `-mno-custom-INSN' 26760 command-line options, and support the same set of INSN 26761 keywords. *Note Nios II Options::, for more information. 26762 26763 `custom-fpu-cfg=NAME' 26764 This attribute corresponds to the `-mcustom-fpu-cfg=NAME' 26765 command-line option, to select a predefined set of custom 26766 instructions named NAME. *Note Nios II Options::, for more 26767 information. 26768 26769 On the x86 and PowerPC back ends, the inliner does not inline a 26770 function that has different target options than the caller, unless 26771 the callee has a subset of the target options of the caller. For 26772 example a function declared with `target("sse3")' can inline a 26773 function with `target("sse2")', since `-msse3' implies `-msse2'. 26774 26775`trap_exit' 26776 Use this attribute on the SH for an `interrupt_handler' to return 26777 using `trapa' instead of `rte'. This attribute expects an integer 26778 argument specifying the trap number to be used. 26779 26780`trapa_handler' 26781 On SH targets this function attribute is similar to 26782 `interrupt_handler' but it does not save and restore all registers. 26783 26784`unused' 26785 This attribute, attached to a function, means that the function is 26786 meant to be possibly unused. GCC does not produce a warning for 26787 this function. 26788 26789`used' 26790 This attribute, attached to a function, means that code must be 26791 emitted for the function even if it appears that the function is 26792 not referenced. This is useful, for example, when the function is 26793 referenced only in inline assembly. 26794 26795 When applied to a member function of a C++ class template, the 26796 attribute also means that the function is instantiated if the 26797 class itself is instantiated. 26798 26799`vector' 26800 This RX attribute is similar to the `interrupt' attribute, 26801 including its parameters, but does not make the function an 26802 interrupt-handler type function (i.e. it retains the normal C 26803 function calling ABI). See the `interrupt' attribute for a 26804 description of its arguments. 26805 26806`version_id' 26807 This IA-64 HP-UX attribute, attached to a global variable or 26808 function, renames a symbol to contain a version string, thus 26809 allowing for function level versioning. HP-UX system header files 26810 may use function level versioning for some system calls. 26811 26812 extern int foo () __attribute__((version_id ("20040821"))); 26813 26814 Calls to FOO are mapped to calls to FOO{20040821}. 26815 26816`visibility ("VISIBILITY_TYPE")' 26817 This attribute affects the linkage of the declaration to which it 26818 is attached. There are four supported VISIBILITY_TYPE values: 26819 default, hidden, protected or internal visibility. 26820 26821 void __attribute__ ((visibility ("protected"))) 26822 f () { /* Do something. */; } 26823 int i __attribute__ ((visibility ("hidden"))); 26824 26825 The possible values of VISIBILITY_TYPE correspond to the 26826 visibility settings in the ELF gABI. 26827 26828 "default" 26829 Default visibility is the normal case for the object file 26830 format. This value is available for the visibility attribute 26831 to override other options that may change the assumed 26832 visibility of entities. 26833 26834 On ELF, default visibility means that the declaration is 26835 visible to other modules and, in shared libraries, means that 26836 the declared entity may be overridden. 26837 26838 On Darwin, default visibility means that the declaration is 26839 visible to other modules. 26840 26841 Default visibility corresponds to "external linkage" in the 26842 language. 26843 26844 "hidden" 26845 Hidden visibility indicates that the entity declared has a new 26846 form of linkage, which we call "hidden linkage". Two 26847 declarations of an object with hidden linkage refer to the 26848 same object if they are in the same shared object. 26849 26850 "internal" 26851 Internal visibility is like hidden visibility, but with 26852 additional processor specific semantics. Unless otherwise 26853 specified by the psABI, GCC defines internal visibility to 26854 mean that a function is _never_ called from another module. 26855 Compare this with hidden functions which, while they cannot 26856 be referenced directly by other modules, can be referenced 26857 indirectly via function pointers. By indicating that a 26858 function cannot be called from outside the module, GCC may 26859 for instance omit the load of a PIC register since it is known 26860 that the calling function loaded the correct value. 26861 26862 "protected" 26863 Protected visibility is like default visibility except that it 26864 indicates that references within the defining module bind to 26865 the definition in that module. That is, the declared entity 26866 cannot be overridden by another module. 26867 26868 26869 All visibilities are supported on many, but not all, ELF targets 26870 (supported when the assembler supports the `.visibility' 26871 pseudo-op). Default visibility is supported everywhere. Hidden 26872 visibility is supported on Darwin targets. 26873 26874 The visibility attribute should be applied only to declarations 26875 that would otherwise have external linkage. The attribute should 26876 be applied consistently, so that the same entity should not be 26877 declared with different settings of the attribute. 26878 26879 In C++, the visibility attribute applies to types as well as 26880 functions and objects, because in C++ types have linkage. A class 26881 must not have greater visibility than its non-static data member 26882 types and bases, and class members default to the visibility of 26883 their class. Also, a declaration without explicit visibility is 26884 limited to the visibility of its type. 26885 26886 In C++, you can mark member functions and static member variables 26887 of a class with the visibility attribute. This is useful if you 26888 know a particular method or static member variable should only be 26889 used from one shared object; then you can mark it hidden while the 26890 rest of the class has default visibility. Care must be taken to 26891 avoid breaking the One Definition Rule; for example, it is usually 26892 not useful to mark an inline method as hidden without marking the 26893 whole class as hidden. 26894 26895 A C++ namespace declaration can also have the visibility attribute. 26896 26897 namespace nspace1 __attribute__ ((visibility ("protected"))) 26898 { /* Do something. */; } 26899 26900 This attribute applies only to the particular namespace body, not 26901 to other definitions of the same namespace; it is equivalent to 26902 using `#pragma GCC visibility' before and after the namespace 26903 definition (*note Visibility Pragmas::). 26904 26905 In C++, if a template argument has limited visibility, this 26906 restriction is implicitly propagated to the template instantiation. 26907 Otherwise, template instantiations and specializations default to 26908 the visibility of their template. 26909 26910 If both the template and enclosing class have explicit visibility, 26911 the visibility from the template is used. 26912 26913`vliw' 26914 On MeP, the `vliw' attribute tells the compiler to emit 26915 instructions in VLIW mode instead of core mode. Note that this 26916 attribute is not allowed unless a VLIW coprocessor has been 26917 configured and enabled through command-line options. 26918 26919`warn_unused_result' 26920 The `warn_unused_result' attribute causes a warning to be emitted 26921 if a caller of the function with this attribute does not use its 26922 return value. This is useful for functions where not checking the 26923 result is either a security problem or always a bug, such as 26924 `realloc'. 26925 26926 int fn () __attribute__ ((warn_unused_result)); 26927 int foo () 26928 { 26929 if (fn () < 0) return -1; 26930 fn (); 26931 return 0; 26932 } 26933 26934 results in warning on line 5. 26935 26936`weak' 26937 The `weak' attribute causes the declaration to be emitted as a weak 26938 symbol rather than a global. This is primarily useful in defining 26939 library functions that can be overridden in user code, though it 26940 can also be used with non-function declarations. Weak symbols are 26941 supported for ELF targets, and also for a.out targets when using 26942 the GNU assembler and linker. 26943 26944`weakref' 26945`weakref ("TARGET")' 26946 The `weakref' attribute marks a declaration as a weak reference. 26947 Without arguments, it should be accompanied by an `alias' attribute 26948 naming the target symbol. Optionally, the TARGET may be given as 26949 an argument to `weakref' itself. In either case, `weakref' 26950 implicitly marks the declaration as `weak'. Without a TARGET, 26951 given as an argument to `weakref' or to `alias', `weakref' is 26952 equivalent to `weak'. 26953 26954 static int x() __attribute__ ((weakref ("y"))); 26955 /* is equivalent to... */ 26956 static int x() __attribute__ ((weak, weakref, alias ("y"))); 26957 /* and to... */ 26958 static int x() __attribute__ ((weakref)); 26959 static int x() __attribute__ ((alias ("y"))); 26960 26961 A weak reference is an alias that does not by itself require a 26962 definition to be given for the target symbol. If the target 26963 symbol is only referenced through weak references, then it becomes 26964 a `weak' undefined symbol. If it is directly referenced, however, 26965 then such strong references prevail, and a definition is required 26966 for the symbol, not necessarily in the same translation unit. 26967 26968 The effect is equivalent to moving all references to the alias to a 26969 separate translation unit, renaming the alias to the aliased 26970 symbol, declaring it as weak, compiling the two separate 26971 translation units and performing a reloadable link on them. 26972 26973 At present, a declaration to which `weakref' is attached can only 26974 be `static'. 26975 26976 26977 You can specify multiple attributes in a declaration by separating them 26978by commas within the double parentheses or by immediately following an 26979attribute declaration with another attribute declaration. 26980 26981 Some people object to the `__attribute__' feature, suggesting that ISO 26982C's `#pragma' should be used instead. At the time `__attribute__' was 26983designed, there were two reasons for not doing this. 26984 26985 1. It is impossible to generate `#pragma' commands from a macro. 26986 26987 2. There is no telling what the same `#pragma' might mean in another 26988 compiler. 26989 26990 These two reasons applied to almost any application that might have 26991been proposed for `#pragma'. It was basically a mistake to use 26992`#pragma' for _anything_. 26993 26994 The ISO C99 standard includes `_Pragma', which now allows pragmas to 26995be generated from macros. In addition, a `#pragma GCC' namespace is 26996now in use for GCC-specific pragmas. However, it has been found 26997convenient to use `__attribute__' to achieve a natural attachment of 26998attributes to their corresponding declarations, whereas `#pragma GCC' 26999is of use for constructs that do not naturally form part of the 27000grammar. *Note Pragmas Accepted by GCC: Pragmas. 27001 27002 27003File: gcc.info, Node: Label Attributes, Next: Attribute Syntax, Prev: Function Attributes, Up: C Extensions 27004 270056.32 Label Attributes 27006===================== 27007 27008GCC allows attributes to be set on C labels. *Note Attribute Syntax::, 27009for details of the exact syntax for using attributes. Other attributes 27010are available for functions (*note Function Attributes::), variables 27011(*note Variable Attributes::) and for types (*note Type Attributes::). 27012 27013 This example uses the `cold' label attribute to indicate the 27014`ErrorHandling' branch is unlikely to be taken and that the 27015`ErrorHandling' label is unused: 27016 27017 27018 asm goto ("some asm" : : : : NoError); 27019 27020 /* This branch (the fall-through from the asm) is less commonly used */ 27021 ErrorHandling: 27022 __attribute__((cold, unused)); /* Semi-colon is required here */ 27023 printf("error\n"); 27024 return 0; 27025 27026 NoError: 27027 printf("no error\n"); 27028 return 1; 27029 27030`unused' 27031 This feature is intended for program-generated code that may 27032 contain unused labels, but which is compiled with `-Wall'. It is 27033 not normally appropriate to use in it human-written code, though it 27034 could be useful in cases where the code that jumps to the label is 27035 contained within an `#ifdef' conditional. 27036 27037`hot' 27038 The `hot' attribute on a label is used to inform the compiler that 27039 the path following the label is more likely than paths that are 27040 not so annotated. This attribute is used in cases where 27041 `__builtin_expect' cannot be used, for instance with computed goto 27042 or `asm goto'. 27043 27044`cold' 27045 The `cold' attribute on labels is used to inform the compiler that 27046 the path following the label is unlikely to be executed. This 27047 attribute is used in cases where `__builtin_expect' cannot be 27048 used, for instance with computed goto or `asm goto'. 27049 27050 27051 27052File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Label Attributes, Up: C Extensions 27053 270546.33 Attribute Syntax 27055===================== 27056 27057This section describes the syntax with which `__attribute__' may be 27058used, and the constructs to which attribute specifiers bind, for the C 27059language. Some details may vary for C++ and Objective-C. Because of 27060infelicities in the grammar for attributes, some forms described here 27061may not be successfully parsed in all cases. 27062 27063 There are some problems with the semantics of attributes in C++. For 27064example, there are no manglings for attributes, although they may affect 27065code generation, so problems may arise when attributed types are used in 27066conjunction with templates or overloading. Similarly, `typeid' does 27067not distinguish between types with different attributes. Support for 27068attributes in C++ may be restricted in future to attributes on 27069declarations only, but not on nested declarators. 27070 27071 *Note Function Attributes::, for details of the semantics of attributes 27072applying to functions. *Note Variable Attributes::, for details of the 27073semantics of attributes applying to variables. *Note Type Attributes::, 27074for details of the semantics of attributes applying to structure, union 27075and enumerated types. *Note Label Attributes::, for details of the 27076semantics of attributes applying to labels. 27077 27078 An "attribute specifier" is of the form `__attribute__ 27079((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 27080comma-separated sequence of "attributes", where each attribute is one 27081of the following: 27082 27083 * Empty. Empty attributes are ignored. 27084 27085 * A word (which may be an identifier such as `unused', or a reserved 27086 word such as `const'). 27087 27088 * A word, followed by, in parentheses, parameters for the attribute. 27089 These parameters take one of the following forms: 27090 27091 * An identifier. For example, `mode' attributes use this form. 27092 27093 * An identifier followed by a comma and a non-empty 27094 comma-separated list of expressions. For example, `format' 27095 attributes use this form. 27096 27097 * A possibly empty comma-separated list of expressions. For 27098 example, `format_arg' attributes use this form with the list 27099 being a single integer constant expression, and `alias' 27100 attributes use this form with the list being a single string 27101 constant. 27102 27103 An "attribute specifier list" is a sequence of one or more attribute 27104specifiers, not separated by any other tokens. 27105 27106Label Attributes 27107................ 27108 27109In GNU C, an attribute specifier list may appear after the colon 27110following a label, other than a `case' or `default' label. GNU C++ 27111only permits attributes on labels if the attribute specifier is 27112immediately followed by a semicolon (i.e., the label applies to an empty 27113statement). If the semicolon is missing, C++ label attributes are 27114ambiguous, as it is permissible for a declaration, which could begin 27115with an attribute list, to be labelled in C++. Declarations cannot be 27116labelled in C90 or C99, so the ambiguity does not arise there. 27117 27118Type Attributes 27119............... 27120 27121An attribute specifier list may appear as part of a `struct', `union' 27122or `enum' specifier. It may go either immediately after the `struct', 27123`union' or `enum' keyword, or after the closing brace. The former 27124syntax is preferred. Where attribute specifiers follow the closing 27125brace, they are considered to relate to the structure, union or 27126enumerated type defined, not to any enclosing declaration the type 27127specifier appears in, and the type defined is not complete until after 27128the attribute specifiers. 27129 27130All other attributes 27131.................... 27132 27133Otherwise, an attribute specifier appears as part of a declaration, 27134counting declarations of unnamed parameters and type names, and relates 27135to that declaration (which may be nested in another declaration, for 27136example in the case of a parameter declaration), or to a particular 27137declarator within a declaration. Where an attribute specifier is 27138applied to a parameter declared as a function or an array, it should 27139apply to the function or array rather than the pointer to which the 27140parameter is implicitly converted, but this is not yet correctly 27141implemented. 27142 27143 Any list of specifiers and qualifiers at the start of a declaration may 27144contain attribute specifiers, whether or not such a list may in that 27145context contain storage class specifiers. (Some attributes, however, 27146are essentially in the nature of storage class specifiers, and only make 27147sense where storage class specifiers may be used; for example, 27148`section'.) There is one necessary limitation to this syntax: the 27149first old-style parameter declaration in a function definition cannot 27150begin with an attribute specifier, because such an attribute applies to 27151the function instead by syntax described below (which, however, is not 27152yet implemented in this case). In some other cases, attribute 27153specifiers are permitted by this grammar but not yet supported by the 27154compiler. All attribute specifiers in this place relate to the 27155declaration as a whole. In the obsolescent usage where a type of `int' 27156is implied by the absence of type specifiers, such a list of specifiers 27157and qualifiers may be an attribute specifier list with no other 27158specifiers or qualifiers. 27159 27160 At present, the first parameter in a function prototype must have some 27161type specifier that is not an attribute specifier; this resolves an 27162ambiguity in the interpretation of `void f(int (__attribute__((foo)) 27163x))', but is subject to change. At present, if the parentheses of a 27164function declarator contain only attributes then those attributes are 27165ignored, rather than yielding an error or warning or implying a single 27166parameter of type int, but this is subject to change. 27167 27168 An attribute specifier list may appear immediately before a declarator 27169(other than the first) in a comma-separated list of declarators in a 27170declaration of more than one identifier using a single list of 27171specifiers and qualifiers. Such attribute specifiers apply only to the 27172identifier before whose declarator they appear. For example, in 27173 27174 __attribute__((noreturn)) void d0 (void), 27175 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 27176 d2 (void); 27177 27178the `noreturn' attribute applies to all the functions declared; the 27179`format' attribute only applies to `d1'. 27180 27181 An attribute specifier list may appear immediately before the comma, 27182`=' or semicolon terminating the declaration of an identifier other 27183than a function definition. Such attribute specifiers apply to the 27184declared object or function. Where an assembler name for an object or 27185function is specified (*note Asm Labels::), the attribute must follow 27186the `asm' specification. 27187 27188 An attribute specifier list may, in future, be permitted to appear 27189after the declarator in a function definition (before any old-style 27190parameter declarations or the function body). 27191 27192 Attribute specifiers may be mixed with type qualifiers appearing inside 27193the `[]' of a parameter array declarator, in the C99 construct by which 27194such qualifiers are applied to the pointer to which the array is 27195implicitly converted. Such attribute specifiers apply to the pointer, 27196not to the array, but at present this is not implemented and they are 27197ignored. 27198 27199 An attribute specifier list may appear at the start of a nested 27200declarator. At present, there are some limitations in this usage: the 27201attributes correctly apply to the declarator, but for most individual 27202attributes the semantics this implies are not implemented. When 27203attribute specifiers follow the `*' of a pointer declarator, they may 27204be mixed with any type qualifiers present. The following describes the 27205formal semantics of this syntax. It makes the most sense if you are 27206familiar with the formal specification of declarators in the ISO C 27207standard. 27208 27209 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 27210where `T' contains declaration specifiers that specify a type TYPE 27211(such as `int') and `D1' is a declarator that contains an identifier 27212IDENT. The type specified for IDENT for derived declarators whose type 27213does not include an attribute specifier is as in the ISO C standard. 27214 27215 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 27216declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 27217TYPE" for IDENT, then `T D1' specifies the type 27218"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 27219 27220 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 27221D', and the declaration `T D' specifies the type 27222"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 27223the type "DERIVED-DECLARATOR-TYPE-LIST 27224TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT. 27225 27226 For example, 27227 27228 void (__attribute__((noreturn)) ****f) (void); 27229 27230specifies the type "pointer to pointer to pointer to pointer to 27231non-returning function returning `void'". As another example, 27232 27233 char *__attribute__((aligned(8))) *f; 27234 27235specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 27236again that this does not work with most attributes; for example, the 27237usage of `aligned' and `noreturn' attributes given above is not yet 27238supported. 27239 27240 For compatibility with existing code written for compiler versions that 27241did not implement attributes on nested declarators, some laxity is 27242allowed in the placing of attributes. If an attribute that only applies 27243to types is applied to a declaration, it is treated as applying to the 27244type of that declaration. If an attribute that only applies to 27245declarations is applied to the type of a declaration, it is treated as 27246applying to that declaration; and, for compatibility with code placing 27247the attributes immediately before the identifier declared, such an 27248attribute applied to a function return type is treated as applying to 27249the function type, and such an attribute applied to an array element 27250type is treated as applying to the array type. If an attribute that 27251only applies to function types is applied to a pointer-to-function 27252type, it is treated as applying to the pointer target type; if such an 27253attribute is applied to a function return type that is not a 27254pointer-to-function type, it is treated as applying to the function 27255type. 27256 27257 27258File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 27259 272606.34 Prototypes and Old-Style Function Definitions 27261================================================== 27262 27263GNU C extends ISO C to allow a function prototype to override a later 27264old-style non-prototype definition. Consider the following example: 27265 27266 /* Use prototypes unless the compiler is old-fashioned. */ 27267 #ifdef __STDC__ 27268 #define P(x) x 27269 #else 27270 #define P(x) () 27271 #endif 27272 27273 /* Prototype function declaration. */ 27274 int isroot P((uid_t)); 27275 27276 /* Old-style function definition. */ 27277 int 27278 isroot (x) /* ??? lossage here ??? */ 27279 uid_t x; 27280 { 27281 return x == 0; 27282 } 27283 27284 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 27285this example, because subword arguments in old-style non-prototype 27286definitions are promoted. Therefore in this example the function 27287definition's argument is really an `int', which does not match the 27288prototype argument type of `short'. 27289 27290 This restriction of ISO C makes it hard to write code that is portable 27291to traditional C compilers, because the programmer does not know 27292whether the `uid_t' type is `short', `int', or `long'. Therefore, in 27293cases like these GNU C allows a prototype to override a later old-style 27294definition. More precisely, in GNU C, a function prototype argument 27295type overrides the argument type specified by a later old-style 27296definition if the former type is the same as the latter type before 27297promotion. Thus in GNU C the above example is equivalent to the 27298following: 27299 27300 int isroot (uid_t); 27301 27302 int 27303 isroot (uid_t x) 27304 { 27305 return x == 0; 27306 } 27307 27308GNU C++ does not support old-style function definitions, so this 27309extension is irrelevant. 27310 27311 27312File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 27313 273146.35 C++ Style Comments 27315======================= 27316 27317In GNU C, you may use C++ style comments, which start with `//' and 27318continue until the end of the line. Many other C implementations allow 27319such comments, and they are included in the 1999 C standard. However, 27320C++ style comments are not recognized if you specify an `-std' option 27321specifying a version of ISO C before C99, or `-ansi' (equivalent to 27322`-std=c90'). 27323 27324 27325File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 27326 273276.36 Dollar Signs in Identifier Names 27328===================================== 27329 27330In GNU C, you may normally use dollar signs in identifier names. This 27331is because many traditional C implementations allow such identifiers. 27332However, dollar signs in identifiers are not supported on a few target 27333machines, typically because the target assembler does not allow them. 27334 27335 27336File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 27337 273386.37 The Character <ESC> in Constants 27339===================================== 27340 27341You can use the sequence `\e' in a string or character constant to 27342stand for the ASCII character <ESC>. 27343 27344 27345File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 27346 273476.38 Specifying Attributes of Variables 27348======================================= 27349 27350The keyword `__attribute__' allows you to specify special attributes of 27351variables or structure fields. This keyword is followed by an 27352attribute specification inside double parentheses. Some attributes are 27353currently defined generically for variables. Other attributes are 27354defined for variables on particular target systems. Other attributes 27355are available for functions (*note Function Attributes::), labels 27356(*note Label Attributes::) and for types (*note Type Attributes::). 27357Other front ends might define more attributes (*note Extensions to the 27358C++ Language: C++ Extensions.). 27359 27360 You may also specify attributes with `__' preceding and following each 27361keyword. This allows you to use them in header files without being 27362concerned about a possible macro of the same name. For example, you 27363may use `__aligned__' instead of `aligned'. 27364 27365 *Note Attribute Syntax::, for details of the exact syntax for using 27366attributes. 27367 27368`aligned (ALIGNMENT)' 27369 This attribute specifies a minimum alignment for the variable or 27370 structure field, measured in bytes. For example, the declaration: 27371 27372 int x __attribute__ ((aligned (16))) = 0; 27373 27374 causes the compiler to allocate the global variable `x' on a 27375 16-byte boundary. On a 68040, this could be used in conjunction 27376 with an `asm' expression to access the `move16' instruction which 27377 requires 16-byte aligned operands. 27378 27379 You can also specify the alignment of structure fields. For 27380 example, to create a double-word aligned `int' pair, you could 27381 write: 27382 27383 struct foo { int x[2] __attribute__ ((aligned (8))); }; 27384 27385 This is an alternative to creating a union with a `double' member, 27386 which forces the union to be double-word aligned. 27387 27388 As in the preceding examples, you can explicitly specify the 27389 alignment (in bytes) that you wish the compiler to use for a given 27390 variable or structure field. Alternatively, you can leave out the 27391 alignment factor and just ask the compiler to align a variable or 27392 field to the default alignment for the target architecture you are 27393 compiling for. The default alignment is sufficient for all scalar 27394 types, but may not be enough for all vector types on a target that 27395 supports vector operations. The default alignment is fixed for a 27396 particular target ABI. 27397 27398 GCC also provides a target specific macro `__BIGGEST_ALIGNMENT__', 27399 which is the largest alignment ever used for any data type on the 27400 target machine you are compiling for. For example, you could 27401 write: 27402 27403 short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__))); 27404 27405 The compiler automatically sets the alignment for the declared 27406 variable or field to `__BIGGEST_ALIGNMENT__'. Doing this can 27407 often make copy operations more efficient, because the compiler can 27408 use whatever instructions copy the biggest chunks of memory when 27409 performing copies to or from the variables or fields that you have 27410 aligned this way. Note that the value of `__BIGGEST_ALIGNMENT__' 27411 may change depending on command-line options. 27412 27413 When used on a struct, or struct member, the `aligned' attribute 27414 can only increase the alignment; in order to decrease it, the 27415 `packed' attribute must be specified as well. When used as part 27416 of a typedef, the `aligned' attribute can both increase and 27417 decrease alignment, and specifying the `packed' attribute 27418 generates a warning. 27419 27420 Note that the effectiveness of `aligned' attributes may be limited 27421 by inherent limitations in your linker. On many systems, the 27422 linker is only able to arrange for variables to be aligned up to a 27423 certain maximum alignment. (For some linkers, the maximum 27424 supported alignment may be very very small.) If your linker is 27425 only able to align variables up to a maximum of 8-byte alignment, 27426 then specifying `aligned(16)' in an `__attribute__' still only 27427 provides you with 8-byte alignment. See your linker documentation 27428 for further information. 27429 27430 The `aligned' attribute can also be used for functions (*note 27431 Function Attributes::.) 27432 27433`cleanup (CLEANUP_FUNCTION)' 27434 The `cleanup' attribute runs a function when the variable goes out 27435 of scope. This attribute can only be applied to auto function 27436 scope variables; it may not be applied to parameters or variables 27437 with static storage duration. The function must take one 27438 parameter, a pointer to a type compatible with the variable. The 27439 return value of the function (if any) is ignored. 27440 27441 If `-fexceptions' is enabled, then CLEANUP_FUNCTION is run during 27442 the stack unwinding that happens during the processing of the 27443 exception. Note that the `cleanup' attribute does not allow the 27444 exception to be caught, only to perform an action. It is 27445 undefined what happens if CLEANUP_FUNCTION does not return 27446 normally. 27447 27448`common' 27449`nocommon' 27450 The `common' attribute requests GCC to place a variable in 27451 "common" storage. The `nocommon' attribute requests the 27452 opposite--to allocate space for it directly. 27453 27454 These attributes override the default chosen by the `-fno-common' 27455 and `-fcommon' flags respectively. 27456 27457`deprecated' 27458`deprecated (MSG)' 27459 The `deprecated' attribute results in a warning if the variable is 27460 used anywhere in the source file. This is useful when identifying 27461 variables that are expected to be removed in a future version of a 27462 program. The warning also includes the location of the declaration 27463 of the deprecated variable, to enable users to easily find further 27464 information about why the variable is deprecated, or what they 27465 should do instead. Note that the warning only occurs for uses: 27466 27467 extern int old_var __attribute__ ((deprecated)); 27468 extern int old_var; 27469 int new_fn () { return old_var; } 27470 27471 results in a warning on line 3 but not line 2. The optional MSG 27472 argument, which must be a string, is printed in the warning if 27473 present. 27474 27475 The `deprecated' attribute can also be used for functions and 27476 types (*note Function Attributes::, *note Type Attributes::.) 27477 27478`mode (MODE)' 27479 This attribute specifies the data type for the 27480 declaration--whichever type corresponds to the mode MODE. This in 27481 effect lets you request an integer or floating-point type 27482 according to its width. 27483 27484 You may also specify a mode of `byte' or `__byte__' to indicate 27485 the mode corresponding to a one-byte integer, `word' or `__word__' 27486 for the mode of a one-word integer, and `pointer' or `__pointer__' 27487 for the mode used to represent pointers. 27488 27489`packed' 27490 The `packed' attribute specifies that a variable or structure field 27491 should have the smallest possible alignment--one byte for a 27492 variable, and one bit for a field, unless you specify a larger 27493 value with the `aligned' attribute. 27494 27495 Here is a structure in which the field `x' is packed, so that it 27496 immediately follows `a': 27497 27498 struct foo 27499 { 27500 char a; 27501 int x[2] __attribute__ ((packed)); 27502 }; 27503 27504 _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' 27505 attribute on bit-fields of type `char'. This has been fixed in 27506 GCC 4.4 but the change can lead to differences in the structure 27507 layout. See the documentation of `-Wpacked-bitfield-compat' for 27508 more information. 27509 27510`section ("SECTION-NAME")' 27511 Normally, the compiler places the objects it generates in sections 27512 like `data' and `bss'. Sometimes, however, you need additional 27513 sections, or you need certain particular variables to appear in 27514 special sections, for example to map to special hardware. The 27515 `section' attribute specifies that a variable (or function) lives 27516 in a particular section. For example, this small program uses 27517 several specific section names: 27518 27519 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 27520 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 27521 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 27522 int init_data __attribute__ ((section ("INITDATA"))); 27523 27524 main() 27525 { 27526 /* Initialize stack pointer */ 27527 init_sp (stack + sizeof (stack)); 27528 27529 /* Initialize initialized data */ 27530 memcpy (&init_data, &data, &edata - &data); 27531 27532 /* Turn on the serial ports */ 27533 init_duart (&a); 27534 init_duart (&b); 27535 } 27536 27537 Use the `section' attribute with _global_ variables and not 27538 _local_ variables, as shown in the example. 27539 27540 You may use the `section' attribute with initialized or 27541 uninitialized global variables but the linker requires each object 27542 be defined once, with the exception that uninitialized variables 27543 tentatively go in the `common' (or `bss') section and can be 27544 multiply "defined". Using the `section' attribute changes what 27545 section the variable goes into and may cause the linker to issue 27546 an error if an uninitialized variable has multiple definitions. 27547 You can force a variable to be initialized with the `-fno-common' 27548 flag or the `nocommon' attribute. 27549 27550 Some file formats do not support arbitrary sections so the 27551 `section' attribute is not available on all platforms. If you 27552 need to map the entire contents of a module to a particular 27553 section, consider using the facilities of the linker instead. 27554 27555`shared' 27556 On Microsoft Windows, in addition to putting variable definitions 27557 in a named section, the section can also be shared among all 27558 running copies of an executable or DLL. For example, this small 27559 program defines shared data by putting it in a named section 27560 `shared' and marking the section shareable: 27561 27562 int foo __attribute__((section ("shared"), shared)) = 0; 27563 27564 int 27565 main() 27566 { 27567 /* Read and write foo. All running 27568 copies see the same value. */ 27569 return 0; 27570 } 27571 27572 You may only use the `shared' attribute along with `section' 27573 attribute with a fully-initialized global definition because of 27574 the way linkers work. See `section' attribute for more 27575 information. 27576 27577 The `shared' attribute is only available on Microsoft Windows. 27578 27579`tls_model ("TLS_MODEL")' 27580 The `tls_model' attribute sets thread-local storage model (*note 27581 Thread-Local::) of a particular `__thread' variable, overriding 27582 `-ftls-model=' command-line switch on a per-variable basis. The 27583 TLS_MODEL argument should be one of `global-dynamic', 27584 `local-dynamic', `initial-exec' or `local-exec'. 27585 27586 Not all targets support this attribute. 27587 27588`unused' 27589 This attribute, attached to a variable, means that the variable is 27590 meant to be possibly unused. GCC does not produce a warning for 27591 this variable. 27592 27593`used' 27594 This attribute, attached to a variable with static storage, means 27595 that the variable must be emitted even if it appears that the 27596 variable is not referenced. 27597 27598 When applied to a static data member of a C++ class template, the 27599 attribute also means that the member is instantiated if the class 27600 itself is instantiated. 27601 27602`vector_size (BYTES)' 27603 This attribute specifies the vector size for the variable, 27604 measured in bytes. For example, the declaration: 27605 27606 int foo __attribute__ ((vector_size (16))); 27607 27608 causes the compiler to set the mode for `foo', to be 16 bytes, 27609 divided into `int' sized units. Assuming a 32-bit int (a vector of 27610 4 units of 4 bytes), the corresponding mode of `foo' is V4SI. 27611 27612 This attribute is only applicable to integral and float scalars, 27613 although arrays, pointers, and function return values are allowed 27614 in conjunction with this construct. 27615 27616 Aggregates with this attribute are invalid, even if they are of 27617 the same size as a corresponding scalar. For example, the 27618 declaration: 27619 27620 struct S { int a; }; 27621 struct S __attribute__ ((vector_size (16))) foo; 27622 27623 is invalid even if the size of the structure is the same as the 27624 size of the `int'. 27625 27626`selectany' 27627 The `selectany' attribute causes an initialized global variable to 27628 have link-once semantics. When multiple definitions of the 27629 variable are encountered by the linker, the first is selected and 27630 the remainder are discarded. Following usage by the Microsoft 27631 compiler, the linker is told _not_ to warn about size or content 27632 differences of the multiple definitions. 27633 27634 Although the primary usage of this attribute is for POD types, the 27635 attribute can also be applied to global C++ objects that are 27636 initialized by a constructor. In this case, the static 27637 initialization and destruction code for the object is emitted in 27638 each translation defining the object, but the calls to the 27639 constructor and destructor are protected by a link-once guard 27640 variable. 27641 27642 The `selectany' attribute is only available on Microsoft Windows 27643 targets. You can use `__declspec (selectany)' as a synonym for 27644 `__attribute__ ((selectany))' for compatibility with other 27645 compilers. 27646 27647`weak' 27648 The `weak' attribute is described in *Note Function Attributes::. 27649 27650`dllimport' 27651 The `dllimport' attribute is described in *Note Function 27652 Attributes::. 27653 27654`dllexport' 27655 The `dllexport' attribute is described in *Note Function 27656 Attributes::. 27657 27658 276596.38.1 AVR Variable Attributes 27660------------------------------ 27661 27662`progmem' 27663 The `progmem' attribute is used on the AVR to place read-only data 27664 in the non-volatile program memory (flash). The `progmem' 27665 attribute accomplishes this by putting respective variables into a 27666 section whose name starts with `.progmem'. 27667 27668 This attribute works similar to the `section' attribute but adds 27669 additional checking. Notice that just like the `section' 27670 attribute, `progmem' affects the location of the data but not how 27671 this data is accessed. 27672 27673 In order to read data located with the `progmem' attribute 27674 (inline) assembler must be used. 27675 /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */ 27676 #include <avr/pgmspace.h> 27677 27678 /* Locate var in flash memory */ 27679 const int var[2] PROGMEM = { 1, 2 }; 27680 27681 int read_var (int i) 27682 { 27683 /* Access var[] by accessor macro from avr/pgmspace.h */ 27684 return (int) pgm_read_word (& var[i]); 27685 } 27686 27687 AVR is a Harvard architecture processor and data and read-only data 27688 normally resides in the data memory (RAM). 27689 27690 See also the *Note AVR Named Address Spaces:: section for an 27691 alternate way to locate and access data in flash memory. 27692 27693`io' 27694`io (ADDR)' 27695 Variables with the `io' attribute are used to address 27696 memory-mapped peripherals in the io address range. If an address 27697 is specified, the variable is assigned that address, and the value 27698 is interpreted as an address in the data address space. Example: 27699 27700 volatile int porta __attribute__((io (0x22))); 27701 27702 The address specified in the address in the data address range. 27703 27704 Otherwise, the variable it is not assigned an address, but the 27705 compiler will still use in/out instructions where applicable, 27706 assuming some other module assigns an address in the io address 27707 range. Example: 27708 27709 extern volatile int porta __attribute__((io)); 27710 27711`io_low' 27712`io_low (ADDR)' 27713 This is like the `io' attribute, but additionally it informs the 27714 compiler that the object lies in the lower half of the I/O area, 27715 allowing the use of `cbi', `sbi', `sbic' and `sbis' instructions. 27716 27717`address' 27718`address (ADDR)' 27719 Variables with the `address' attribute are used to address 27720 memory-mapped peripherals that may lie outside the io address 27721 range. 27722 27723 volatile int porta __attribute__((address (0x600))); 27724 27725 277266.38.2 Blackfin Variable Attributes 27727----------------------------------- 27728 27729Three attributes are currently defined for the Blackfin. 27730 27731`l1_data' 27732`l1_data_A' 27733`l1_data_B' 27734 Use these attributes on the Blackfin to place the variable into L1 27735 Data SRAM. Variables with `l1_data' attribute are put into the 27736 specific section named `.l1.data'. Those with `l1_data_A' 27737 attribute are put into the specific section named `.l1.data.A'. 27738 Those with `l1_data_B' attribute are put into the specific section 27739 named `.l1.data.B'. 27740 27741`l2' 27742 Use this attribute on the Blackfin to place the variable into L2 27743 SRAM. Variables with `l2' attribute are put into the specific 27744 section named `.l2.data'. 27745 277466.38.3 H8/300 Variable Attributes 27747--------------------------------- 27748 27749These variable attributes are available for H8/300 targets: 27750 27751`eightbit_data' 27752 Use this attribute on the H8/300, H8/300H, and H8S to indicate 27753 that the specified variable should be placed into the eight-bit 27754 data section. The compiler generates more efficient code for 27755 certain operations on data in the eight-bit data area. Note the 27756 eight-bit data area is limited to 256 bytes of data. 27757 27758 You must use GAS and GLD from GNU binutils version 2.7 or later for 27759 this attribute to work correctly. 27760 27761`tiny_data' 27762 Use this attribute on the H8/300H and H8S to indicate that the 27763 specified variable should be placed into the tiny data section. 27764 The compiler generates more efficient code for loads and stores on 27765 data in the tiny data section. Note the tiny data area is limited 27766 to slightly under 32KB of data. 27767 27768 277696.38.4 IA-64 Variable Attributes 27770-------------------------------- 27771 27772The IA-64 back end supports the following variable attribute: 27773 27774`model (MODEL-NAME)' 27775 On IA-64, use this attribute to set the addressability of an 27776 object. At present, the only supported identifier for MODEL-NAME 27777 is `small', indicating addressability via "small" (22-bit) 27778 addresses (so that their addresses can be loaded with the `addl' 27779 instruction). Caveat: such addressing is by definition not 27780 position independent and hence this attribute must not be used for 27781 objects defined by shared libraries. 27782 27783 277846.38.5 M32R/D Variable Attributes 27785--------------------------------- 27786 27787One attribute is currently defined for the M32R/D. 27788 27789`model (MODEL-NAME)' 27790 Use this attribute on the M32R/D to set the addressability of an 27791 object. The identifier MODEL-NAME is one of `small', `medium', or 27792 `large', representing each of the code models. 27793 27794 Small model objects live in the lower 16MB of memory (so that their 27795 addresses can be loaded with the `ld24' instruction). 27796 27797 Medium and large model objects may live anywhere in the 32-bit 27798 address space (the compiler generates `seth/add3' instructions to 27799 load their addresses). 27800 278016.38.6 MeP Variable Attributes 27802------------------------------ 27803 27804The MeP target has a number of addressing modes and busses. The `near' 27805space spans the standard memory space's first 16 megabytes (24 bits). 27806The `far' space spans the entire 32-bit memory space. The `based' 27807space is a 128-byte region in the memory space that is addressed 27808relative to the `$tp' register. The `tiny' space is a 65536-byte 27809region relative to the `$gp' register. In addition to these memory 27810regions, the MeP target has a separate 16-bit control bus which is 27811specified with `cb' attributes. 27812 27813`based' 27814 Any variable with the `based' attribute is assigned to the 27815 `.based' section, and is accessed with relative to the `$tp' 27816 register. 27817 27818`tiny' 27819 Likewise, the `tiny' attribute assigned variables to the `.tiny' 27820 section, relative to the `$gp' register. 27821 27822`near' 27823 Variables with the `near' attribute are assumed to have addresses 27824 that fit in a 24-bit addressing mode. This is the default for 27825 large variables (`-mtiny=4' is the default) but this attribute can 27826 override `-mtiny=' for small variables, or override `-ml'. 27827 27828`far' 27829 Variables with the `far' attribute are addressed using a full 27830 32-bit address. Since this covers the entire memory space, this 27831 allows modules to make no assumptions about where variables might 27832 be stored. 27833 27834`io' 27835`io (ADDR)' 27836 Variables with the `io' attribute are used to address 27837 memory-mapped peripherals. If an address is specified, the 27838 variable is assigned that address, else it is not assigned an 27839 address (it is assumed some other module assigns an address). 27840 Example: 27841 27842 int timer_count __attribute__((io(0x123))); 27843 27844`cb' 27845`cb (ADDR)' 27846 Variables with the `cb' attribute are used to access the control 27847 bus, using special instructions. `addr' indicates the control bus 27848 address. Example: 27849 27850 int cpu_clock __attribute__((cb(0x123))); 27851 27852 278536.38.7 PowerPC Variable Attributes 27854---------------------------------- 27855 27856Three attributes currently are defined for PowerPC configurations: 27857`altivec', `ms_struct' and `gcc_struct'. 27858 27859 For full documentation of the struct attributes please see the 27860documentation in *Note x86 Variable Attributes::. 27861 27862 For documentation of `altivec' attribute please see the documentation 27863in *Note PowerPC Type Attributes::. 27864 278656.38.8 SPU Variable Attributes 27866------------------------------ 27867 27868The SPU supports the `spu_vector' attribute for variables. For 27869documentation of this attribute please see the documentation in *Note 27870SPU Type Attributes::. 27871 278726.38.9 x86 Variable Attributes 27873------------------------------ 27874 27875Two attributes are currently defined for x86 configurations: 27876`ms_struct' and `gcc_struct'. 27877 27878`ms_struct' 27879`gcc_struct' 27880 If `packed' is used on a structure, or if bit-fields are used, it 27881 may be that the Microsoft ABI lays out the structure differently 27882 than the way GCC normally does. Particularly when moving packed 27883 data between functions compiled with GCC and the native Microsoft 27884 compiler (either via function call or as data in a file), it may 27885 be necessary to access either format. 27886 27887 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 27888 Windows x86 compilers to match the native Microsoft compiler. 27889 27890 The Microsoft structure layout algorithm is fairly simple with the 27891 exception of the bit-field packing. The padding and alignment of 27892 members of structures and whether a bit-field can straddle a 27893 storage-unit boundary are determine by these rules: 27894 27895 1. Structure members are stored sequentially in the order in 27896 which they are declared: the first member has the lowest 27897 memory address and the last member the highest. 27898 27899 2. Every data object has an alignment requirement. The 27900 alignment requirement for all data except structures, unions, 27901 and arrays is either the size of the object or the current 27902 packing size (specified with either the `aligned' attribute 27903 or the `pack' pragma), whichever is less. For structures, 27904 unions, and arrays, the alignment requirement is the largest 27905 alignment requirement of its members. Every object is 27906 allocated an offset so that: 27907 27908 offset % alignment_requirement == 0 27909 27910 3. Adjacent bit-fields are packed into the same 1-, 2-, or 27911 4-byte allocation unit if the integral types are the same 27912 size and if the next bit-field fits into the current 27913 allocation unit without crossing the boundary imposed by the 27914 common alignment requirements of the bit-fields. 27915 27916 MSVC interprets zero-length bit-fields in the following ways: 27917 27918 1. If a zero-length bit-field is inserted between two bit-fields 27919 that are normally coalesced, the bit-fields are not coalesced. 27920 27921 For example: 27922 27923 struct 27924 { 27925 unsigned long bf_1 : 12; 27926 unsigned long : 0; 27927 unsigned long bf_2 : 12; 27928 } t1; 27929 27930 The size of `t1' is 8 bytes with the zero-length bit-field. 27931 If the zero-length bit-field were removed, `t1''s size would 27932 be 4 bytes. 27933 27934 2. If a zero-length bit-field is inserted after a bit-field, 27935 `foo', and the alignment of the zero-length bit-field is 27936 greater than the member that follows it, `bar', `bar' is 27937 aligned as the type of the zero-length bit-field. 27938 27939 For example: 27940 27941 struct 27942 { 27943 char foo : 4; 27944 short : 0; 27945 char bar; 27946 } t2; 27947 27948 struct 27949 { 27950 char foo : 4; 27951 short : 0; 27952 double bar; 27953 } t3; 27954 27955 For `t2', `bar' is placed at offset 2, rather than offset 1. 27956 Accordingly, the size of `t2' is 4. For `t3', the zero-length 27957 bit-field does not affect the alignment of `bar' or, as a 27958 result, the size of the structure. 27959 27960 Taking this into account, it is important to note the 27961 following: 27962 27963 1. If a zero-length bit-field follows a normal bit-field, 27964 the type of the zero-length bit-field may affect the 27965 alignment of the structure as whole. For example, `t2' 27966 has a size of 4 bytes, since the zero-length bit-field 27967 follows a normal bit-field, and is of type short. 27968 27969 2. Even if a zero-length bit-field is not followed by a 27970 normal bit-field, it may still affect the alignment of 27971 the structure: 27972 27973 struct 27974 { 27975 char foo : 6; 27976 long : 0; 27977 } t4; 27978 27979 Here, `t4' takes up 4 bytes. 27980 27981 3. Zero-length bit-fields following non-bit-field members are 27982 ignored: 27983 27984 struct 27985 { 27986 char foo; 27987 long : 0; 27988 char bar; 27989 } t5; 27990 27991 Here, `t5' takes up 2 bytes. 27992 279936.38.10 Xstormy16 Variable Attributes 27994------------------------------------- 27995 27996One attribute is currently defined for xstormy16 configurations: 27997`below100'. 27998 27999`below100' 28000 If a variable has the `below100' attribute (`BELOW100' is allowed 28001 also), GCC places the variable in the first 0x100 bytes of memory 28002 and use special opcodes to access it. Such variables are placed 28003 in either the `.bss_below100' section or the `.data_below100' 28004 section. 28005 28006 28007 28008File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 28009 280106.39 Specifying Attributes of Types 28011=================================== 28012 28013The keyword `__attribute__' allows you to specify special attributes of 28014`struct' and `union' types when you define such types. This keyword is 28015followed by an attribute specification inside double parentheses. 28016Eight attributes are currently defined for types: `aligned', `packed', 28017`transparent_union', `unused', `deprecated', `visibility', `may_alias' 28018and `bnd_variable_size'. Other attributes are defined for functions 28019(*note Function Attributes::), labels (*note Label Attributes::) and 28020for variables (*note Variable Attributes::). 28021 28022 You may also specify any one of these attributes with `__' preceding 28023and following its keyword. This allows you to use these attributes in 28024header files without being concerned about a possible macro of the same 28025name. For example, you may use `__aligned__' instead of `aligned'. 28026 28027 You may specify type attributes in an enum, struct or union type 28028declaration or definition, or for other types in a `typedef' 28029declaration. 28030 28031 For an enum, struct or union type, you may specify attributes either 28032between the enum, struct or union tag and the name of the type, or just 28033past the closing curly brace of the _definition_. The former syntax is 28034preferred. 28035 28036 *Note Attribute Syntax::, for details of the exact syntax for using 28037attributes. 28038 28039`aligned (ALIGNMENT)' 28040 This attribute specifies a minimum alignment (in bytes) for 28041 variables of the specified type. For example, the declarations: 28042 28043 struct S { short f[3]; } __attribute__ ((aligned (8))); 28044 typedef int more_aligned_int __attribute__ ((aligned (8))); 28045 28046 force the compiler to ensure (as far as it can) that each variable 28047 whose type is `struct S' or `more_aligned_int' is allocated and 28048 aligned _at least_ on a 8-byte boundary. On a SPARC, having all 28049 variables of type `struct S' aligned to 8-byte boundaries allows 28050 the compiler to use the `ldd' and `std' (doubleword load and 28051 store) instructions when copying one variable of type `struct S' to 28052 another, thus improving run-time efficiency. 28053 28054 Note that the alignment of any given `struct' or `union' type is 28055 required by the ISO C standard to be at least a perfect multiple of 28056 the lowest common multiple of the alignments of all of the members 28057 of the `struct' or `union' in question. This means that you _can_ 28058 effectively adjust the alignment of a `struct' or `union' type by 28059 attaching an `aligned' attribute to any one of the members of such 28060 a type, but the notation illustrated in the example above is a 28061 more obvious, intuitive, and readable way to request the compiler 28062 to adjust the alignment of an entire `struct' or `union' type. 28063 28064 As in the preceding example, you can explicitly specify the 28065 alignment (in bytes) that you wish the compiler to use for a given 28066 `struct' or `union' type. Alternatively, you can leave out the 28067 alignment factor and just ask the compiler to align a type to the 28068 maximum useful alignment for the target machine you are compiling 28069 for. For example, you could write: 28070 28071 struct S { short f[3]; } __attribute__ ((aligned)); 28072 28073 Whenever you leave out the alignment factor in an `aligned' 28074 attribute specification, the compiler automatically sets the 28075 alignment for the type to the largest alignment that is ever used 28076 for any data type on the target machine you are compiling for. 28077 Doing this can often make copy operations more efficient, because 28078 the compiler can use whatever instructions copy the biggest chunks 28079 of memory when performing copies to or from the variables that 28080 have types that you have aligned this way. 28081 28082 In the example above, if the size of each `short' is 2 bytes, then 28083 the size of the entire `struct S' type is 6 bytes. The smallest 28084 power of two that is greater than or equal to that is 8, so the 28085 compiler sets the alignment for the entire `struct S' type to 8 28086 bytes. 28087 28088 Note that although you can ask the compiler to select a 28089 time-efficient alignment for a given type and then declare only 28090 individual stand-alone objects of that type, the compiler's 28091 ability to select a time-efficient alignment is primarily useful 28092 only when you plan to create arrays of variables having the 28093 relevant (efficiently aligned) type. If you declare or use arrays 28094 of variables of an efficiently-aligned type, then it is likely 28095 that your program also does pointer arithmetic (or subscripting, 28096 which amounts to the same thing) on pointers to the relevant type, 28097 and the code that the compiler generates for these pointer 28098 arithmetic operations is often more efficient for 28099 efficiently-aligned types than for other types. 28100 28101 The `aligned' attribute can only increase the alignment; but you 28102 can decrease it by specifying `packed' as well. See below. 28103 28104 Note that the effectiveness of `aligned' attributes may be limited 28105 by inherent limitations in your linker. On many systems, the 28106 linker is only able to arrange for variables to be aligned up to a 28107 certain maximum alignment. (For some linkers, the maximum 28108 supported alignment may be very very small.) If your linker is 28109 only able to align variables up to a maximum of 8-byte alignment, 28110 then specifying `aligned(16)' in an `__attribute__' still only 28111 provides you with 8-byte alignment. See your linker documentation 28112 for further information. 28113 28114`packed' 28115 This attribute, attached to `struct' or `union' type definition, 28116 specifies that each member (other than zero-width bit-fields) of 28117 the structure or union is placed to minimize the memory required. 28118 When attached to an `enum' definition, it indicates that the 28119 smallest integral type should be used. 28120 28121 Specifying this attribute for `struct' and `union' types is 28122 equivalent to specifying the `packed' attribute on each of the 28123 structure or union members. Specifying the `-fshort-enums' flag 28124 on the line is equivalent to specifying the `packed' attribute on 28125 all `enum' definitions. 28126 28127 In the following example `struct my_packed_struct''s members are 28128 packed closely together, but the internal layout of its `s' member 28129 is not packed--to do that, `struct my_unpacked_struct' needs to be 28130 packed too. 28131 28132 struct my_unpacked_struct 28133 { 28134 char c; 28135 int i; 28136 }; 28137 28138 struct __attribute__ ((__packed__)) my_packed_struct 28139 { 28140 char c; 28141 int i; 28142 struct my_unpacked_struct s; 28143 }; 28144 28145 You may only specify this attribute on the definition of an `enum', 28146 `struct' or `union', not on a `typedef' that does not also define 28147 the enumerated type, structure or union. 28148 28149`transparent_union' 28150 This attribute, attached to a `union' type definition, indicates 28151 that any function parameter having that union type causes calls to 28152 that function to be treated in a special way. 28153 28154 First, the argument corresponding to a transparent union type can 28155 be of any type in the union; no cast is required. Also, if the 28156 union contains a pointer type, the corresponding argument can be a 28157 null pointer constant or a void pointer expression; and if the 28158 union contains a void pointer type, the corresponding argument can 28159 be any pointer expression. If the union member type is a pointer, 28160 qualifiers like `const' on the referenced type must be respected, 28161 just as with normal pointer conversions. 28162 28163 Second, the argument is passed to the function using the calling 28164 conventions of the first member of the transparent union, not the 28165 calling conventions of the union itself. All members of the union 28166 must have the same machine representation; this is necessary for 28167 this argument passing to work properly. 28168 28169 Transparent unions are designed for library functions that have 28170 multiple interfaces for compatibility reasons. For example, 28171 suppose the `wait' function must accept either a value of type 28172 `int *' to comply with POSIX, or a value of type `union wait *' to 28173 comply with the 4.1BSD interface. If `wait''s parameter were 28174 `void *', `wait' would accept both kinds of arguments, but it 28175 would also accept any other pointer type and this would make 28176 argument type checking less useful. Instead, `<sys/wait.h>' might 28177 define the interface as follows: 28178 28179 typedef union __attribute__ ((__transparent_union__)) 28180 { 28181 int *__ip; 28182 union wait *__up; 28183 } wait_status_ptr_t; 28184 28185 pid_t wait (wait_status_ptr_t); 28186 28187 This interface allows either `int *' or `union wait *' arguments 28188 to be passed, using the `int *' calling convention. The program 28189 can call `wait' with arguments of either type: 28190 28191 int w1 () { int w; return wait (&w); } 28192 int w2 () { union wait w; return wait (&w); } 28193 28194 With this interface, `wait''s implementation might look like this: 28195 28196 pid_t wait (wait_status_ptr_t p) 28197 { 28198 return waitpid (-1, p.__ip, 0); 28199 } 28200 28201`unused' 28202 When attached to a type (including a `union' or a `struct'), this 28203 attribute means that variables of that type are meant to appear 28204 possibly unused. GCC does not produce a warning for any variables 28205 of that type, even if the variable appears to do nothing. This is 28206 often the case with lock or thread classes, which are usually 28207 defined and then not referenced, but contain constructors and 28208 destructors that have nontrivial bookkeeping functions. 28209 28210`deprecated' 28211`deprecated (MSG)' 28212 The `deprecated' attribute results in a warning if the type is 28213 used anywhere in the source file. This is useful when identifying 28214 types that are expected to be removed in a future version of a 28215 program. If possible, the warning also includes the location of 28216 the declaration of the deprecated type, to enable users to easily 28217 find further information about why the type is deprecated, or what 28218 they should do instead. Note that the warnings only occur for 28219 uses and then only if the type is being applied to an identifier 28220 that itself is not being declared as deprecated. 28221 28222 typedef int T1 __attribute__ ((deprecated)); 28223 T1 x; 28224 typedef T1 T2; 28225 T2 y; 28226 typedef T1 T3 __attribute__ ((deprecated)); 28227 T3 z __attribute__ ((deprecated)); 28228 28229 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 28230 warning is issued for line 4 because T2 is not explicitly 28231 deprecated. Line 5 has no warning because T3 is explicitly 28232 deprecated. Similarly for line 6. The optional MSG argument, 28233 which must be a string, is printed in the warning if present. 28234 28235 The `deprecated' attribute can also be used for functions and 28236 variables (*note Function Attributes::, *note Variable 28237 Attributes::.) 28238 28239`may_alias' 28240 Accesses through pointers to types with this attribute are not 28241 subject to type-based alias analysis, but are instead assumed to 28242 be able to alias any other type of objects. In the context of 28243 section 6.5 paragraph 7 of the C99 standard, an lvalue expression 28244 dereferencing such a pointer is treated like having a character 28245 type. See `-fstrict-aliasing' for more information on aliasing 28246 issues. This extension exists to support some vector APIs, in 28247 which pointers to one vector type are permitted to alias pointers 28248 to a different vector type. 28249 28250 Note that an object of a type with this attribute does not have any 28251 special semantics. 28252 28253 Example of use: 28254 28255 typedef short __attribute__((__may_alias__)) short_a; 28256 28257 int 28258 main (void) 28259 { 28260 int a = 0x12345678; 28261 short_a *b = (short_a *) &a; 28262 28263 b[1] = 0; 28264 28265 if (a == 0x12345678) 28266 abort(); 28267 28268 exit(0); 28269 } 28270 28271 If you replaced `short_a' with `short' in the variable 28272 declaration, the above program would abort when compiled with 28273 `-fstrict-aliasing', which is on by default at `-O2' or above. 28274 28275`visibility' 28276 In C++, attribute visibility (*note Function Attributes::) can 28277 also be applied to class, struct, union and enum types. Unlike 28278 other type attributes, the attribute must appear between the 28279 initial keyword and the name of the type; it cannot appear after 28280 the body of the type. 28281 28282 Note that the type visibility is applied to vague linkage entities 28283 associated with the class (vtable, typeinfo node, etc.). In 28284 particular, if a class is thrown as an exception in one shared 28285 object and caught in another, the class must have default 28286 visibility. Otherwise the two shared objects are unable to use 28287 the same typeinfo node and exception handling will break. 28288 28289`designated_init' 28290 This attribute may only be applied to structure types. It 28291 indicates that any initialization of an object of this type must 28292 use designated initializers rather than positional initializers. 28293 The intent of this attribute is to allow the programmer to 28294 indicate that a structure's layout may change, and that therefore 28295 relying on positional initialization will result in future 28296 breakage. 28297 28298 GCC emits warnings based on this attribute by default; use 28299 `-Wno-designated-init' to suppress them. 28300 28301`bnd_variable_size' 28302 When applied to a structure field, this attribute tells Pointer 28303 Bounds Checker that the size of this field should not be computed 28304 using static type information. It may be used to mark 28305 variably-sized static array fields placed at the end of a 28306 structure. 28307 28308 struct S 28309 { 28310 int size; 28311 char data[1]; 28312 } 28313 S *p = (S *)malloc (sizeof(S) + 100); 28314 p->data[10] = 0; //Bounds violation 28315 28316 By using an attribute for the field we may avoid unwanted bound 28317 violation checks: 28318 28319 struct S 28320 { 28321 int size; 28322 char data[1] __attribute__((bnd_variable_size)); 28323 } 28324 S *p = (S *)malloc (sizeof(S) + 100); 28325 p->data[10] = 0; //OK 28326 28327 28328 To specify multiple attributes, separate them by commas within the 28329double parentheses: for example, `__attribute__ ((aligned (16), 28330packed))'. 28331 283326.39.1 ARM Type Attributes 28333-------------------------- 28334 28335On those ARM targets that support `dllimport' (such as Symbian OS), you 28336can use the `notshared' attribute to indicate that the virtual table 28337and other similar data for a class should not be exported from a DLL. 28338For example: 28339 28340 class __declspec(notshared) C { 28341 public: 28342 __declspec(dllimport) C(); 28343 virtual void f(); 28344 } 28345 28346 __declspec(dllexport) 28347 C::C() {} 28348 28349In this code, `C::C' is exported from the current DLL, but the virtual 28350table for `C' is not exported. (You can use `__attribute__' instead of 28351`__declspec' if you prefer, but most Symbian OS code uses `__declspec'.) 28352 283536.39.2 MeP Type Attributes 28354-------------------------- 28355 28356Many of the MeP variable attributes may be applied to types as well. 28357Specifically, the `based', `tiny', `near', and `far' attributes may be 28358applied to either. The `io' and `cb' attributes may not be applied to 28359types. 28360 283616.39.3 PowerPC Type Attributes 28362------------------------------ 28363 28364Three attributes currently are defined for PowerPC configurations: 28365`altivec', `ms_struct' and `gcc_struct'. 28366 28367 For full documentation of the `ms_struct' and `gcc_struct' attributes 28368please see the documentation in *Note x86 Type Attributes::. 28369 28370 The `altivec' attribute allows one to declare AltiVec vector data 28371types supported by the AltiVec Programming Interface Manual. The 28372attribute requires an argument to specify one of three vector types: 28373`vector__', `pixel__' (always followed by unsigned short), and `bool__' 28374(always followed by unsigned). 28375 28376 __attribute__((altivec(vector__))) 28377 __attribute__((altivec(pixel__))) unsigned short 28378 __attribute__((altivec(bool__))) unsigned 28379 28380 These attributes mainly are intended to support the `__vector', 28381`__pixel', and `__bool' AltiVec keywords. 28382 283836.39.4 SPU Type Attributes 28384-------------------------- 28385 28386The SPU supports the `spu_vector' attribute for types. This attribute 28387allows one to declare vector data types supported by the 28388Sony/Toshiba/IBM SPU Language Extensions Specification. It is intended 28389to support the `__vector' keyword. 28390 283916.39.5 x86 Type Attributes 28392-------------------------- 28393 28394Two attributes are currently defined for x86 configurations: 28395`ms_struct' and `gcc_struct'. 28396 28397`ms_struct' 28398`gcc_struct' 28399 If `packed' is used on a structure, or if bit-fields are used it 28400 may be that the Microsoft ABI packs them differently than GCC 28401 normally packs them. Particularly when moving packed data between 28402 functions compiled with GCC and the native Microsoft compiler 28403 (either via function call or as data in a file), it may be 28404 necessary to access either format. 28405 28406 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 28407 Windows x86 compilers to match the native Microsoft compiler. 28408 28409 28410File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 28411 284126.40 Inquiring on Alignment of Types or Variables 28413================================================= 28414 28415The keyword `__alignof__' allows you to inquire about how an object is 28416aligned, or the minimum alignment usually required by a type. Its 28417syntax is just like `sizeof'. 28418 28419 For example, if the target machine requires a `double' value to be 28420aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 28421is true on many RISC machines. On more traditional machine designs, 28422`__alignof__ (double)' is 4 or even 2. 28423 28424 Some machines never actually require alignment; they allow reference 28425to any data type even at an odd address. For these machines, 28426`__alignof__' reports the smallest alignment that GCC gives the data 28427type, usually as mandated by the target ABI. 28428 28429 If the operand of `__alignof__' is an lvalue rather than a type, its 28430value is the required alignment for its type, taking into account any 28431minimum alignment specified with GCC's `__attribute__' extension (*note 28432Variable Attributes::). For example, after this declaration: 28433 28434 struct foo { int x; char y; } foo1; 28435 28436the value of `__alignof__ (foo1.y)' is 1, even though its actual 28437alignment is probably 2 or 4, the same as `__alignof__ (int)'. 28438 28439 It is an error to ask for the alignment of an incomplete type. 28440 28441 28442File: gcc.info, Node: Inline, Next: Volatiles, Prev: Alignment, Up: C Extensions 28443 284446.41 An Inline Function is As Fast As a Macro 28445============================================= 28446 28447By declaring a function inline, you can direct GCC to make calls to 28448that function faster. One way GCC can achieve this is to integrate 28449that function's code into the code for its callers. This makes 28450execution faster by eliminating the function-call overhead; in 28451addition, if any of the actual argument values are constant, their 28452known values may permit simplifications at compile time so that not all 28453of the inline function's code needs to be included. The effect on code 28454size is less predictable; object code may be larger or smaller with 28455function inlining, depending on the particular case. You can also 28456direct GCC to try to integrate all "simple enough" functions into their 28457callers with the option `-finline-functions'. 28458 28459 GCC implements three different semantics of declaring a function 28460inline. One is available with `-std=gnu89' or `-fgnu89-inline' or when 28461`gnu_inline' attribute is present on all inline declarations, another 28462when `-std=c99', `-std=c11', `-std=gnu99' or `-std=gnu11' (without 28463`-fgnu89-inline'), and the third is used when compiling C++. 28464 28465 To declare a function inline, use the `inline' keyword in its 28466declaration, like this: 28467 28468 static inline int 28469 inc (int *a) 28470 { 28471 return (*a)++; 28472 } 28473 28474 If you are writing a header file to be included in ISO C90 programs, 28475write `__inline__' instead of `inline'. *Note Alternate Keywords::. 28476 28477 The three types of inlining behave similarly in two important cases: 28478when the `inline' keyword is used on a `static' function, like the 28479example above, and when a function is first declared without using the 28480`inline' keyword and then is defined with `inline', like this: 28481 28482 extern int inc (int *a); 28483 inline int 28484 inc (int *a) 28485 { 28486 return (*a)++; 28487 } 28488 28489 In both of these common cases, the program behaves the same as if you 28490had not used the `inline' keyword, except for its speed. 28491 28492 When a function is both inline and `static', if all calls to the 28493function are integrated into the caller, and the function's address is 28494never used, then the function's own assembler code is never referenced. 28495In this case, GCC does not actually output assembler code for the 28496function, unless you specify the option `-fkeep-inline-functions'. 28497Some calls cannot be integrated for various reasons (in particular, 28498calls that precede the function's definition cannot be integrated, and 28499neither can recursive calls within the definition). If there is a 28500nonintegrated call, then the function is compiled to assembler code as 28501usual. The function must also be compiled as usual if the program 28502refers to its address, because that can't be inlined. 28503 28504 Note that certain usages in a function definition can make it 28505unsuitable for inline substitution. Among these usages are: variadic 28506functions, use of `alloca', use of variable-length data types (*note 28507Variable Length::), use of computed goto (*note Labels as Values::), 28508use of nonlocal goto, and nested functions (*note Nested Functions::). 28509Using `-Winline' warns when a function marked `inline' could not be 28510substituted, and gives the reason for the failure. 28511 28512 As required by ISO C++, GCC considers member functions defined within 28513the body of a class to be marked inline even if they are not explicitly 28514declared with the `inline' keyword. You can override this with 28515`-fno-default-inline'; *note Options Controlling C++ Dialect: C++ 28516Dialect Options. 28517 28518 GCC does not inline any functions when not optimizing unless you 28519specify the `always_inline' attribute for the function, like this: 28520 28521 /* Prototype. */ 28522 inline void foo (const char) __attribute__((always_inline)); 28523 28524 The remainder of this section is specific to GNU C90 inlining. 28525 28526 When an inline function is not `static', then the compiler must assume 28527that there may be calls from other source files; since a global symbol 28528can be defined only once in any program, the function must not be 28529defined in the other source files, so the calls therein cannot be 28530integrated. Therefore, a non-`static' inline function is always 28531compiled on its own in the usual fashion. 28532 28533 If you specify both `inline' and `extern' in the function definition, 28534then the definition is used only for inlining. In no case is the 28535function compiled on its own, not even if you refer to its address 28536explicitly. Such an address becomes an external reference, as if you 28537had only declared the function, and had not defined it. 28538 28539 This combination of `inline' and `extern' has almost the effect of a 28540macro. The way to use it is to put a function definition in a header 28541file with these keywords, and put another copy of the definition 28542(lacking `inline' and `extern') in a library file. The definition in 28543the header file causes most calls to the function to be inlined. If 28544any uses of the function remain, they refer to the single copy in the 28545library. 28546 28547 28548File: gcc.info, Node: Volatiles, Next: Using Assembly Language with C, Prev: Inline, Up: C Extensions 28549 285506.42 When is a Volatile Object Accessed? 28551======================================== 28552 28553C has the concept of volatile objects. These are normally accessed by 28554pointers and used for accessing hardware or inter-thread communication. 28555The standard encourages compilers to refrain from optimizations 28556concerning accesses to volatile objects, but leaves it implementation 28557defined as to what constitutes a volatile access. The minimum 28558requirement is that at a sequence point all previous accesses to 28559volatile objects have stabilized and no subsequent accesses have 28560occurred. Thus an implementation is free to reorder and combine 28561volatile accesses that occur between sequence points, but cannot do so 28562for accesses across a sequence point. The use of volatile does not 28563allow you to violate the restriction on updating objects multiple times 28564between two sequence points. 28565 28566 Accesses to non-volatile objects are not ordered with respect to 28567volatile accesses. You cannot use a volatile object as a memory 28568barrier to order a sequence of writes to non-volatile memory. For 28569instance: 28570 28571 int *ptr = SOMETHING; 28572 volatile int vobj; 28573 *ptr = SOMETHING; 28574 vobj = 1; 28575 28576Unless *PTR and VOBJ can be aliased, it is not guaranteed that the 28577write to *PTR occurs by the time the update of VOBJ happens. If you 28578need this guarantee, you must use a stronger memory barrier such as: 28579 28580 int *ptr = SOMETHING; 28581 volatile int vobj; 28582 *ptr = SOMETHING; 28583 asm volatile ("" : : : "memory"); 28584 vobj = 1; 28585 28586 A scalar volatile object is read when it is accessed in a void context: 28587 28588 volatile int *src = SOMEVALUE; 28589 *src; 28590 28591 Such expressions are rvalues, and GCC implements this as a read of the 28592volatile object being pointed to. 28593 28594 Assignments are also expressions and have an rvalue. However when 28595assigning to a scalar volatile, the volatile object is not reread, 28596regardless of whether the assignment expression's rvalue is used or 28597not. If the assignment's rvalue is used, the value is that assigned to 28598the volatile object. For instance, there is no read of VOBJ in all the 28599following cases: 28600 28601 int obj; 28602 volatile int vobj; 28603 vobj = SOMETHING; 28604 obj = vobj = SOMETHING; 28605 obj ? vobj = ONETHING : vobj = ANOTHERTHING; 28606 obj = (SOMETHING, vobj = ANOTHERTHING); 28607 28608 If you need to read the volatile object after an assignment has 28609occurred, you must use a separate expression with an intervening 28610sequence point. 28611 28612 As bit-fields are not individually addressable, volatile bit-fields may 28613be implicitly read when written to, or when adjacent bit-fields are 28614accessed. Bit-field operations may be optimized such that adjacent 28615bit-fields are only partially accessed, if they straddle a storage unit 28616boundary. For these reasons it is unwise to use volatile bit-fields to 28617access hardware. 28618 28619 28620File: gcc.info, Node: Using Assembly Language with C, Next: Alternate Keywords, Prev: Volatiles, Up: C Extensions 28621 286226.43 How to Use Inline Assembly Language in C Code 28623================================================== 28624 28625The `asm' keyword allows you to embed assembler instructions within C 28626code. GCC provides two forms of inline `asm' statements. A "basic 28627`asm'" statement is one with no operands (*note Basic Asm::), while an 28628"extended `asm'" statement (*note Extended Asm::) includes one or more 28629operands. The extended form is preferred for mixing C and assembly 28630language within a function, but to include assembly language at top 28631level you must use basic `asm'. 28632 28633 You can also use the `asm' keyword to override the assembler name for 28634a C symbol, or to place a C variable in a specific register. 28635 28636* Menu: 28637 28638* Basic Asm:: Inline assembler without operands. 28639* Extended Asm:: Inline assembler with operands. 28640* Constraints:: Constraints for `asm' operands 28641* Asm Labels:: Specifying the assembler name to use for a C symbol. 28642* Explicit Reg Vars:: Defining variables residing in specified registers. 28643* Size of an asm:: How GCC calculates the size of an `asm' block. 28644 28645 28646File: gcc.info, Node: Basic Asm, Next: Extended Asm, Up: Using Assembly Language with C 28647 286486.43.1 Basic Asm -- Assembler Instructions Without Operands 28649----------------------------------------------------------- 28650 28651A basic `asm' statement has the following syntax: 28652 28653 asm [ volatile ] ( ASSEMBLERINSTRUCTIONS ) 28654 28655 The `asm' keyword is a GNU extension. When writing code that can be 28656compiled with `-ansi' and the various `-std' options, use `__asm__' 28657instead of `asm' (*note Alternate Keywords::). 28658 28659Qualifiers 28660.......... 28661 28662`volatile' 28663 The optional `volatile' qualifier has no effect. All basic `asm' 28664 blocks are implicitly volatile. 28665 28666Parameters 28667.......... 28668 28669ASSEMBLERINSTRUCTIONS 28670 This is a literal string that specifies the assembler code. The 28671 string can contain any instructions recognized by the assembler, 28672 including directives. GCC does not parse the assembler 28673 instructions themselves and does not know what they mean or even 28674 whether they are valid assembler input. 28675 28676 You may place multiple assembler instructions together in a single 28677 `asm' string, separated by the characters normally used in 28678 assembly code for the system. A combination that works in most 28679 places is a newline to break the line, plus a tab character 28680 (written as `\n\t'). Some assemblers allow semicolons as a line 28681 separator. However, note that some assembler dialects use 28682 semicolons to start a comment. 28683 28684Remarks 28685....... 28686 28687Using extended `asm' typically produces smaller, safer, and more 28688efficient code, and in most cases it is a better solution than basic 28689`asm'. However, there are two situations where only basic `asm' can be 28690used: 28691 28692 * Extended `asm' statements have to be inside a C function, so to 28693 write inline assembly language at file scope ("top-level"), 28694 outside of C functions, you must use basic `asm'. You can use 28695 this technique to emit assembler directives, define assembly 28696 language macros that can be invoked elsewhere in the file, or 28697 write entire functions in assembly language. 28698 28699 * Functions declared with the `naked' attribute also require basic 28700 `asm' (*note Function Attributes::). 28701 28702 Safely accessing C data and calling functions from basic `asm' is more 28703complex than it may appear. To access C data, it is better to use 28704extended `asm'. 28705 28706 Do not expect a sequence of `asm' statements to remain perfectly 28707consecutive after compilation. If certain instructions need to remain 28708consecutive in the output, put them in a single multi-instruction `asm' 28709statement. Note that GCC's optimizers can move `asm' statements 28710relative to other code, including across jumps. 28711 28712 `asm' statements may not perform jumps into other `asm' statements. 28713GCC does not know about these jumps, and therefore cannot take account 28714of them when deciding how to optimize. Jumps from `asm' to C labels are 28715only supported in extended `asm'. 28716 28717 Under certain circumstances, GCC may duplicate (or remove duplicates 28718of) your assembly code when optimizing. This can lead to unexpected 28719duplicate symbol errors during compilation if your assembly code 28720defines symbols or labels. 28721 28722 Since GCC does not parse the ASSEMBLERINSTRUCTIONS, it has no 28723visibility of any symbols it references. This may result in GCC 28724discarding those symbols as unreferenced. 28725 28726 The compiler copies the assembler instructions in a basic `asm' 28727verbatim to the assembly language output file, without processing 28728dialects or any of the `%' operators that are available with extended 28729`asm'. This results in minor differences between basic `asm' strings 28730and extended `asm' templates. For example, to refer to registers you 28731might use `%eax' in basic `asm' and `%%eax' in extended `asm'. 28732 28733 On targets such as x86 that support multiple assembler dialects, all 28734basic `asm' blocks use the assembler dialect specified by the `-masm' 28735command-line option (*note x86 Options::). Basic `asm' provides no 28736mechanism to provide different assembler strings for different dialects. 28737 28738 Here is an example of basic `asm' for i386: 28739 28740 /* Note that this code will not compile with -masm=intel */ 28741 #define DebugBreak() asm("int $3") 28742 28743 28744File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Basic Asm, Up: Using Assembly Language with C 28745 287466.43.2 Extended Asm - Assembler Instructions with C Expression Operands 28747----------------------------------------------------------------------- 28748 28749With extended `asm' you can read and write C variables from assembler 28750and perform jumps from assembler code to C labels. Extended `asm' 28751syntax uses colons (`:') to delimit the operand parameters after the 28752assembler template: 28753 28754 asm [volatile] ( ASSEMBLERTEMPLATE 28755 : OUTPUTOPERANDS 28756 [ : INPUTOPERANDS 28757 [ : CLOBBERS ] ]) 28758 28759 asm [volatile] goto ( ASSEMBLERTEMPLATE 28760 : 28761 : INPUTOPERANDS 28762 : CLOBBERS 28763 : GOTOLABELS) 28764 28765 The `asm' keyword is a GNU extension. When writing code that can be 28766compiled with `-ansi' and the various `-std' options, use `__asm__' 28767instead of `asm' (*note Alternate Keywords::). 28768 28769Qualifiers 28770.......... 28771 28772`volatile' 28773 The typical use of extended `asm' statements is to manipulate input 28774 values to produce output values. However, your `asm' statements may 28775 also produce side effects. If so, you may need to use the 28776 `volatile' qualifier to disable certain optimizations. *Note 28777 Volatile::. 28778 28779`goto' 28780 This qualifier informs the compiler that the `asm' statement may 28781 perform a jump to one of the labels listed in the GOTOLABELS. 28782 *Note GotoLabels::. 28783 28784Parameters 28785.......... 28786 28787ASSEMBLERTEMPLATE 28788 This is a literal string that is the template for the assembler 28789 code. It is a combination of fixed text and tokens that refer to 28790 the input, output, and goto parameters. *Note AssemblerTemplate::. 28791 28792OUTPUTOPERANDS 28793 A comma-separated list of the C variables modified by the 28794 instructions in the ASSEMBLERTEMPLATE. An empty list is 28795 permitted. *Note OutputOperands::. 28796 28797INPUTOPERANDS 28798 A comma-separated list of C expressions read by the instructions 28799 in the ASSEMBLERTEMPLATE. An empty list is permitted. *Note 28800 InputOperands::. 28801 28802CLOBBERS 28803 A comma-separated list of registers or other values changed by the 28804 ASSEMBLERTEMPLATE, beyond those listed as outputs. An empty list 28805 is permitted. *Note Clobbers::. 28806 28807GOTOLABELS 28808 When you are using the `goto' form of `asm', this section contains 28809 the list of all C labels to which the code in the 28810 ASSEMBLERTEMPLATE may jump. *Note GotoLabels::. 28811 28812 `asm' statements may not perform jumps into other `asm' statements, 28813 only to the listed GOTOLABELS. GCC's optimizers do not know about 28814 other jumps; therefore they cannot take account of them when 28815 deciding how to optimize. 28816 28817 The total number of input + output + goto operands is limited to 30. 28818 28819Remarks 28820....... 28821 28822The `asm' statement allows you to include assembly instructions directly 28823within C code. This may help you to maximize performance in 28824time-sensitive code or to access assembly instructions that are not 28825readily available to C programs. 28826 28827 Note that extended `asm' statements must be inside a function. Only 28828basic `asm' may be outside functions (*note Basic Asm::). Functions 28829declared with the `naked' attribute also require basic `asm' (*note 28830Function Attributes::). 28831 28832 While the uses of `asm' are many and varied, it may help to think of an 28833`asm' statement as a series of low-level instructions that convert input 28834parameters to output parameters. So a simple (if not particularly 28835useful) example for i386 using `asm' might look like this: 28836 28837 int src = 1; 28838 int dst; 28839 28840 asm ("mov %1, %0\n\t" 28841 "add $1, %0" 28842 : "=r" (dst) 28843 : "r" (src)); 28844 28845 printf("%d\n", dst); 28846 28847 This code copies `src' to `dst' and add 1 to `dst'. 28848 288496.43.2.1 Volatile 28850................. 28851 28852GCC's optimizers sometimes discard `asm' statements if they determine 28853there is no need for the output variables. Also, the optimizers may move 28854code out of loops if they believe that the code will always return the 28855same result (i.e. none of its input values change between calls). Using 28856the `volatile' qualifier disables these optimizations. `asm' statements 28857that have no output operands, including `asm goto' statements, are 28858implicitly volatile. 28859 28860 This i386 code demonstrates a case that does not use (or require) the 28861`volatile' qualifier. If it is performing assertion checking, this code 28862uses `asm' to perform the validation. Otherwise, `dwRes' is 28863unreferenced by any code. As a result, the optimizers can discard the 28864`asm' statement, which in turn removes the need for the entire 28865`DoCheck' routine. By omitting the `volatile' qualifier when it isn't 28866needed you allow the optimizers to produce the most efficient code 28867possible. 28868 28869 void DoCheck(uint32_t dwSomeValue) 28870 { 28871 uint32_t dwRes; 28872 28873 // Assumes dwSomeValue is not zero. 28874 asm ("bsfl %1,%0" 28875 : "=r" (dwRes) 28876 : "r" (dwSomeValue) 28877 : "cc"); 28878 28879 assert(dwRes > 3); 28880 } 28881 28882 The next example shows a case where the optimizers can recognize that 28883the input (`dwSomeValue') never changes during the execution of the 28884function and can therefore move the `asm' outside the loop to produce 28885more efficient code. Again, using `volatile' disables this type of 28886optimization. 28887 28888 void do_print(uint32_t dwSomeValue) 28889 { 28890 uint32_t dwRes; 28891 28892 for (uint32_t x=0; x < 5; x++) 28893 { 28894 // Assumes dwSomeValue is not zero. 28895 asm ("bsfl %1,%0" 28896 : "=r" (dwRes) 28897 : "r" (dwSomeValue) 28898 : "cc"); 28899 28900 printf("%u: %u %u\n", x, dwSomeValue, dwRes); 28901 } 28902 } 28903 28904 The following example demonstrates a case where you need to use the 28905`volatile' qualifier. It uses the x86 `rdtsc' instruction, which reads 28906the computer's time-stamp counter. Without the `volatile' qualifier, 28907the optimizers might assume that the `asm' block will always return the 28908same value and therefore optimize away the second call. 28909 28910 uint64_t msr; 28911 28912 asm volatile ( "rdtsc\n\t" // Returns the time in EDX:EAX. 28913 "shl $32, %%rdx\n\t" // Shift the upper bits left. 28914 "or %%rdx, %0" // 'Or' in the lower bits. 28915 : "=a" (msr) 28916 : 28917 : "rdx"); 28918 28919 printf("msr: %llx\n", msr); 28920 28921 // Do other work... 28922 28923 // Reprint the timestamp 28924 asm volatile ( "rdtsc\n\t" // Returns the time in EDX:EAX. 28925 "shl $32, %%rdx\n\t" // Shift the upper bits left. 28926 "or %%rdx, %0" // 'Or' in the lower bits. 28927 : "=a" (msr) 28928 : 28929 : "rdx"); 28930 28931 printf("msr: %llx\n", msr); 28932 28933 GCC's optimizers do not treat this code like the non-volatile code in 28934the earlier examples. They do not move it out of loops or omit it on the 28935assumption that the result from a previous call is still valid. 28936 28937 Note that the compiler can move even volatile `asm' instructions 28938relative to other code, including across jump instructions. For 28939example, on many targets there is a system register that controls the 28940rounding mode of floating-point operations. Setting it with a volatile 28941`asm', as in the following PowerPC example, does not work reliably. 28942 28943 asm volatile("mtfsf 255, %0" : : "f" (fpenv)); 28944 sum = x + y; 28945 28946 The compiler may move the addition back before the volatile `asm'. To 28947make it work as expected, add an artificial dependency to the `asm' by 28948referencing a variable in the subsequent code, for example: 28949 28950 asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv)); 28951 sum = x + y; 28952 28953 Under certain circumstances, GCC may duplicate (or remove duplicates 28954of) your assembly code when optimizing. This can lead to unexpected 28955duplicate symbol errors during compilation if your asm code defines 28956symbols or labels. Using `%=' (*note AssemblerTemplate::) may help 28957resolve this problem. 28958 289596.43.2.2 Assembler Template 28960........................... 28961 28962An assembler template is a literal string containing assembler 28963instructions. The compiler replaces tokens in the template that refer 28964to inputs, outputs, and goto labels, and then outputs the resulting 28965string to the assembler. The string can contain any instructions 28966recognized by the assembler, including directives. GCC does not parse 28967the assembler instructions themselves and does not know what they mean 28968or even whether they are valid assembler input. However, it does count 28969the statements (*note Size of an asm::). 28970 28971 You may place multiple assembler instructions together in a single 28972`asm' string, separated by the characters normally used in assembly 28973code for the system. A combination that works in most places is a 28974newline to break the line, plus a tab character to move to the 28975instruction field (written as `\n\t'). Some assemblers allow 28976semicolons as a line separator. However, note that some assembler 28977dialects use semicolons to start a comment. 28978 28979 Do not expect a sequence of `asm' statements to remain perfectly 28980consecutive after compilation, even when you are using the `volatile' 28981qualifier. If certain instructions need to remain consecutive in the 28982output, put them in a single multi-instruction asm statement. 28983 28984 Accessing data from C programs without using input/output operands 28985(such as by using global symbols directly from the assembler template) 28986may not work as expected. Similarly, calling functions directly from an 28987assembler template requires a detailed understanding of the target 28988assembler and ABI. 28989 28990 Since GCC does not parse the assembler template, it has no visibility 28991of any symbols it references. This may result in GCC discarding those 28992symbols as unreferenced unless they are also listed as input, output, 28993or goto operands. 28994 28995Special format strings 28996...................... 28997 28998In addition to the tokens described by the input, output, and goto 28999operands, these tokens have special meanings in the assembler template: 29000 29001`%%' 29002 Outputs a single `%' into the assembler code. 29003 29004`%=' 29005 Outputs a number that is unique to each instance of the `asm' 29006 statement in the entire compilation. This option is useful when 29007 creating local labels and referring to them multiple times in a 29008 single template that generates multiple assembler instructions. 29009 29010`%{' 29011`%|' 29012`%}' 29013 Outputs `{', `|', and `}' characters (respectively) into the 29014 assembler code. When unescaped, these characters have special 29015 meaning to indicate multiple assembler dialects, as described 29016 below. 29017 29018Multiple assembler dialects in `asm' templates 29019.............................................. 29020 29021On targets such as x86, GCC supports multiple assembler dialects. The 29022`-masm' option controls which dialect GCC uses as its default for 29023inline assembler. The target-specific documentation for the `-masm' 29024option contains the list of supported dialects, as well as the default 29025dialect if the option is not specified. This information may be 29026important to understand, since assembler code that works correctly when 29027compiled using one dialect will likely fail if compiled using another. 29028*Note x86 Options::. 29029 29030 If your code needs to support multiple assembler dialects (for 29031example, if you are writing public headers that need to support a 29032variety of compilation options), use constructs of this form: 29033 29034 { dialect0 | dialect1 | dialect2... } 29035 29036 This construct outputs `dialect0' when using dialect #0 to compile the 29037code, `dialect1' for dialect #1, etc. If there are fewer alternatives 29038within the braces than the number of dialects the compiler supports, 29039the construct outputs nothing. 29040 29041 For example, if an x86 compiler supports two dialects (`att', 29042`intel'), an assembler template such as this: 29043 29044 "bt{l %[Offset],%[Base] | %[Base],%[Offset]}; jc %l2" 29045 29046is equivalent to one of 29047 29048 "btl %[Offset],%[Base] ; jc %l2" /* att dialect */ 29049 "bt %[Base],%[Offset]; jc %l2" /* intel dialect */ 29050 29051 Using that same compiler, this code: 29052 29053 "xchg{l}\t{%%}ebx, %1" 29054 29055corresponds to either 29056 29057 "xchgl\t%%ebx, %1" /* att dialect */ 29058 "xchg\tebx, %1" /* intel dialect */ 29059 29060 There is no support for nesting dialect alternatives. 29061 290626.43.2.3 Output Operands 29063........................ 29064 29065An `asm' statement has zero or more output operands indicating the names 29066of C variables modified by the assembler code. 29067 29068 In this i386 example, `old' (referred to in the template string as 29069`%0') and `*Base' (as `%1') are outputs and `Offset' (`%2') is an input: 29070 29071 bool old; 29072 29073 __asm__ ("btsl %2,%1\n\t" // Turn on zero-based bit #Offset in Base. 29074 "sbb %0,%0" // Use the CF to calculate old. 29075 : "=r" (old), "+rm" (*Base) 29076 : "Ir" (Offset) 29077 : "cc"); 29078 29079 return old; 29080 29081 Operands are separated by commas. Each operand has this format: 29082 29083 [ [ASMSYMBOLICNAME] ] CONSTRAINT (CVARIABLENAME) 29084 29085ASMSYMBOLICNAME 29086 Specifies a symbolic name for the operand. Reference the name in 29087 the assembler template by enclosing it in square brackets (i.e. 29088 `%[Value]'). The scope of the name is the `asm' statement that 29089 contains the definition. Any valid C variable name is acceptable, 29090 including names already defined in the surrounding code. No two 29091 operands within the same `asm' statement can use the same symbolic 29092 name. 29093 29094 When not using an ASMSYMBOLICNAME, use the (zero-based) position 29095 of the operand in the list of operands in the assembler template. 29096 For example if there are three output operands, use `%0' in the 29097 template to refer to the first, `%1' for the second, and `%2' for 29098 the third. 29099 29100CONSTRAINT 29101 A string constant specifying constraints on the placement of the 29102 operand; *Note Constraints::, for details. 29103 29104 Output constraints must begin with either `=' (a variable 29105 overwriting an existing value) or `+' (when reading and writing). 29106 When using `=', do not assume the location contains the existing 29107 value on entry to the `asm', except when the operand is tied to an 29108 input; *note Input Operands: InputOperands. 29109 29110 After the prefix, there must be one or more additional constraints 29111 (*note Constraints::) that describe where the value resides. Common 29112 constraints include `r' for register and `m' for memory. When you 29113 list more than one possible location (for example, `"=rm"'), the 29114 compiler chooses the most efficient one based on the current 29115 context. If you list as many alternates as the `asm' statement 29116 allows, you permit the optimizers to produce the best possible 29117 code. If you must use a specific register, but your Machine 29118 Constraints do not provide sufficient control to select the 29119 specific register you want, local register variables may provide a 29120 solution (*note Local Reg Vars::). 29121 29122CVARIABLENAME 29123 Specifies a C lvalue expression to hold the output, typically a 29124 variable name. The enclosing parentheses are a required part of 29125 the syntax. 29126 29127 29128 When the compiler selects the registers to use to represent the output 29129operands, it does not use any of the clobbered registers (*note 29130Clobbers::). 29131 29132 Output operand expressions must be lvalues. The compiler cannot check 29133whether the operands have data types that are reasonable for the 29134instruction being executed. For output expressions that are not 29135directly addressable (for example a bit-field), the constraint must 29136allow a register. In that case, GCC uses the register as the output of 29137the `asm', and then stores that register into the output. 29138 29139 Operands using the `+' constraint modifier count as two operands (that 29140is, both as input and output) towards the total maximum of 30 operands 29141per `asm' statement. 29142 29143 Use the `&' constraint modifier (*note Modifiers::) on all output 29144operands that must not overlap an input. Otherwise, GCC may allocate 29145the output operand in the same register as an unrelated input operand, 29146on the assumption that the assembler code consumes its inputs before 29147producing outputs. This assumption may be false if the assembler code 29148actually consists of more than one instruction. 29149 29150 The same problem can occur if one output parameter (A) allows a 29151register constraint and another output parameter (B) allows a memory 29152constraint. The code generated by GCC to access the memory address in 29153B can contain registers which _might_ be shared by A, and GCC considers 29154those registers to be inputs to the asm. As above, GCC assumes that 29155such input registers are consumed before any outputs are written. This 29156assumption may result in incorrect behavior if the asm writes to A 29157before using B. Combining the `&' modifier with the register constraint 29158on A ensures that modifying A does not affect the address referenced by 29159B. Otherwise, the location of B is undefined if A is modified before 29160using B. 29161 29162 `asm' supports operand modifiers on operands (for example `%k2' 29163instead of simply `%2'). Typically these qualifiers are hardware 29164dependent. The list of supported modifiers for x86 is found at *Note 29165x86 Operand modifiers: x86Operandmodifiers. 29166 29167 If the C code that follows the `asm' makes no use of any of the output 29168operands, use `volatile' for the `asm' statement to prevent the 29169optimizers from discarding the `asm' statement as unneeded (see *Note 29170Volatile::). 29171 29172 This code makes no use of the optional ASMSYMBOLICNAME. Therefore it 29173references the first output operand as `%0' (were there a second, it 29174would be `%1', etc). The number of the first input operand is one 29175greater than that of the last output operand. In this i386 example, 29176that makes `Mask' referenced as `%1': 29177 29178 uint32_t Mask = 1234; 29179 uint32_t Index; 29180 29181 asm ("bsfl %1, %0" 29182 : "=r" (Index) 29183 : "r" (Mask) 29184 : "cc"); 29185 29186 That code overwrites the variable `Index' (`='), placing the value in 29187a register (`r'). Using the generic `r' constraint instead of a 29188constraint for a specific register allows the compiler to pick the 29189register to use, which can result in more efficient code. This may not 29190be possible if an assembler instruction requires a specific register. 29191 29192 The following i386 example uses the ASMSYMBOLICNAME syntax. It 29193produces the same result as the code above, but some may consider it 29194more readable or more maintainable since reordering index numbers is 29195not necessary when adding or removing operands. The names `aIndex' and 29196`aMask' are only used in this example to emphasize which names get used 29197where. It is acceptable to reuse the names `Index' and `Mask'. 29198 29199 uint32_t Mask = 1234; 29200 uint32_t Index; 29201 29202 asm ("bsfl %[aMask], %[aIndex]" 29203 : [aIndex] "=r" (Index) 29204 : [aMask] "r" (Mask) 29205 : "cc"); 29206 29207 Here are some more examples of output operands. 29208 29209 uint32_t c = 1; 29210 uint32_t d; 29211 uint32_t *e = &c; 29212 29213 asm ("mov %[e], %[d]" 29214 : [d] "=rm" (d) 29215 : [e] "rm" (*e)); 29216 29217 Here, `d' may either be in a register or in memory. Since the compiler 29218might already have the current value of the `uint32_t' location pointed 29219to by `e' in a register, you can enable it to choose the best location 29220for `d' by specifying both constraints. 29221 292226.43.2.4 Input Operands 29223....................... 29224 29225Input operands make values from C variables and expressions available 29226to the assembly code. 29227 29228 Operands are separated by commas. Each operand has this format: 29229 29230 [ [ASMSYMBOLICNAME] ] CONSTRAINT (CEXPRESSION) 29231 29232ASMSYMBOLICNAME 29233 Specifies a symbolic name for the operand. Reference the name in 29234 the assembler template by enclosing it in square brackets (i.e. 29235 `%[Value]'). The scope of the name is the `asm' statement that 29236 contains the definition. Any valid C variable name is acceptable, 29237 including names already defined in the surrounding code. No two 29238 operands within the same `asm' statement can use the same symbolic 29239 name. 29240 29241 When not using an ASMSYMBOLICNAME, use the (zero-based) position 29242 of the operand in the list of operands in the assembler template. 29243 For example if there are two output operands and three inputs, use 29244 `%2' in the template to refer to the first input operand, `%3' for 29245 the second, and `%4' for the third. 29246 29247CONSTRAINT 29248 A string constant specifying constraints on the placement of the 29249 operand; *Note Constraints::, for details. 29250 29251 Input constraint strings may not begin with either `=' or `+'. 29252 When you list more than one possible location (for example, 29253 `"irm"'), the compiler chooses the most efficient one based on the 29254 current context. If you must use a specific register, but your 29255 Machine Constraints do not provide sufficient control to select 29256 the specific register you want, local register variables may 29257 provide a solution (*note Local Reg Vars::). 29258 29259 Input constraints can also be digits (for example, `"0"'). This 29260 indicates that the specified input must be in the same place as 29261 the output constraint at the (zero-based) index in the output 29262 constraint list. When using ASMSYMBOLICNAME syntax for the output 29263 operands, you may use these names (enclosed in brackets `[]') 29264 instead of digits. 29265 29266CEXPRESSION 29267 This is the C variable or expression being passed to the `asm' 29268 statement as input. The enclosing parentheses are a required part 29269 of the syntax. 29270 29271 29272 When the compiler selects the registers to use to represent the input 29273operands, it does not use any of the clobbered registers (*note 29274Clobbers::). 29275 29276 If there are no output operands but there are input operands, place two 29277consecutive colons where the output operands would go: 29278 29279 __asm__ ("some instructions" 29280 : /* No outputs. */ 29281 : "r" (Offset / 8)); 29282 29283 *Warning:* Do _not_ modify the contents of input-only operands (except 29284for inputs tied to outputs). The compiler assumes that on exit from the 29285`asm' statement these operands contain the same values as they had 29286before executing the statement. It is _not_ possible to use clobbers 29287to inform the compiler that the values in these inputs are changing. One 29288common work-around is to tie the changing input variable to an output 29289variable that never gets used. Note, however, that if the code that 29290follows the `asm' statement makes no use of any of the output operands, 29291the GCC optimizers may discard the `asm' statement as unneeded (see 29292*Note Volatile::). 29293 29294 `asm' supports operand modifiers on operands (for example `%k2' 29295instead of simply `%2'). Typically these qualifiers are hardware 29296dependent. The list of supported modifiers for x86 is found at *Note 29297x86 Operand modifiers: x86Operandmodifiers. 29298 29299 In this example using the fictitious `combine' instruction, the 29300constraint `"0"' for input operand 1 says that it must occupy the same 29301location as output operand 0. Only input operands may use numbers in 29302constraints, and they must each refer to an output operand. Only a 29303number (or the symbolic assembler name) in the constraint can guarantee 29304that one operand is in the same place as another. The mere fact that 29305`foo' is the value of both operands is not enough to guarantee that 29306they are in the same place in the generated assembler code. 29307 29308 asm ("combine %2, %0" 29309 : "=r" (foo) 29310 : "0" (foo), "g" (bar)); 29311 29312 Here is an example using symbolic names. 29313 29314 asm ("cmoveq %1, %2, %[result]" 29315 : [result] "=r"(result) 29316 : "r" (test), "r" (new), "[result]" (old)); 29317 293186.43.2.5 Clobbers 29319................. 29320 29321While the compiler is aware of changes to entries listed in the output 29322operands, the inline `asm' code may modify more than just the outputs. 29323For example, calculations may require additional registers, or the 29324processor may overwrite a register as a side effect of a particular 29325assembler instruction. In order to inform the compiler of these 29326changes, list them in the clobber list. Clobber list items are either 29327register names or the special clobbers (listed below). Each clobber 29328list item is a string constant enclosed in double quotes and separated 29329by commas. 29330 29331 Clobber descriptions may not in any way overlap with an input or output 29332operand. For example, you may not have an operand describing a register 29333class with one member when listing that register in the clobber list. 29334Variables declared to live in specific registers (*note Explicit Reg 29335Vars::) and used as `asm' input or output operands must have no part 29336mentioned in the clobber description. In particular, there is no way to 29337specify that input operands get modified without also specifying them 29338as output operands. 29339 29340 When the compiler selects which registers to use to represent input 29341and output operands, it does not use any of the clobbered registers. As 29342a result, clobbered registers are available for any use in the 29343assembler code. 29344 29345 Here is a realistic example for the VAX showing the use of clobbered 29346registers: 29347 29348 asm volatile ("movc3 %0, %1, %2" 29349 : /* No outputs. */ 29350 : "g" (from), "g" (to), "g" (count) 29351 : "r0", "r1", "r2", "r3", "r4", "r5"); 29352 29353 Also, there are two special clobber arguments: 29354 29355`"cc"' 29356 The `"cc"' clobber indicates that the assembler code modifies the 29357 flags register. On some machines, GCC represents the condition 29358 codes as a specific hardware register; `"cc"' serves to name this 29359 register. On other machines, condition code handling is different, 29360 and specifying `"cc"' has no effect. But it is valid no matter 29361 what the target. 29362 29363`"memory"' 29364 The `"memory"' clobber tells the compiler that the assembly code 29365 performs memory reads or writes to items other than those listed 29366 in the input and output operands (for example, accessing the 29367 memory pointed to by one of the input parameters). To ensure 29368 memory contains correct values, GCC may need to flush specific 29369 register values to memory before executing the `asm'. Further, the 29370 compiler does not assume that any values read from memory before an 29371 `asm' remain unchanged after that `asm'; it reloads them as needed. 29372 Using the `"memory"' clobber effectively forms a read/write memory 29373 barrier for the compiler. 29374 29375 Note that this clobber does not prevent the _processor_ from doing 29376 speculative reads past the `asm' statement. To prevent that, you 29377 need processor-specific fence instructions. 29378 29379 Flushing registers to memory has performance implications and may 29380 be an issue for time-sensitive code. You can use a trick to avoid 29381 this if the size of the memory being accessed is known at compile 29382 time. For example, if accessing ten bytes of a string, use a 29383 memory input like: 29384 29385 `{"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}'. 29386 29387 293886.43.2.6 Goto Labels 29389.................... 29390 29391`asm goto' allows assembly code to jump to one or more C labels. The 29392GOTOLABELS section in an `asm goto' statement contains a comma-separated 29393list of all C labels to which the assembler code may jump. GCC assumes 29394that `asm' execution falls through to the next statement (if this is 29395not the case, consider using the `__builtin_unreachable' intrinsic 29396after the `asm' statement). Optimization of `asm goto' may be improved 29397by using the `hot' and `cold' label attributes (*note Label 29398Attributes::). 29399 29400 An `asm goto' statement cannot have outputs. This is due to an 29401internal restriction of the compiler: control transfer instructions 29402cannot have outputs. If the assembler code does modify anything, use 29403the `"memory"' clobber to force the optimizers to flush all register 29404values to memory and reload them if necessary after the `asm' statement. 29405 29406 Also note that an `asm goto' statement is always implicitly considered 29407volatile. 29408 29409 To reference a label in the assembler template, prefix it with `%l' 29410(lowercase `L') followed by its (zero-based) position in GOTOLABELS 29411plus the number of input operands. For example, if the `asm' has three 29412inputs and references two labels, refer to the first label as `%l3' and 29413the second as `%l4'). 29414 29415 Alternately, you can reference labels using the actual C label name 29416enclosed in brackets. For example, to reference a label named `carry', 29417you can use `%l[carry]'. The label must still be listed in the 29418GOTOLABELS section when using this approach. 29419 29420 Here is an example of `asm goto' for i386: 29421 29422 asm goto ( 29423 "btl %1, %0\n\t" 29424 "jc %l2" 29425 : /* No outputs. */ 29426 : "r" (p1), "r" (p2) 29427 : "cc" 29428 : carry); 29429 29430 return 0; 29431 29432 carry: 29433 return 1; 29434 29435 The following example shows an `asm goto' that uses a memory clobber. 29436 29437 int frob(int x) 29438 { 29439 int y; 29440 asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5" 29441 : /* No outputs. */ 29442 : "r"(x), "r"(&y) 29443 : "r5", "memory" 29444 : error); 29445 return y; 29446 error: 29447 return -1; 29448 } 29449 294506.43.2.7 x86 Operand Modifiers 29451.............................. 29452 29453References to input, output, and goto operands in the assembler template 29454of extended `asm' statements can use modifiers to affect the way the 29455operands are formatted in the code output to the assembler. For 29456example, the following code uses the `h' and `b' modifiers for x86: 29457 29458 uint16_t num; 29459 asm volatile ("xchg %h0, %b0" : "+a" (num) ); 29460 29461These modifiers generate this assembler code: 29462 29463 xchg %ah, %al 29464 29465 The rest of this discussion uses the following code for illustrative 29466purposes. 29467 29468 int main() 29469 { 29470 int iInt = 1; 29471 29472 top: 29473 29474 asm volatile goto ("some assembler instructions here" 29475 : /* No outputs. */ 29476 : "q" (iInt), "X" (sizeof(unsigned char) + 1) 29477 : /* No clobbers. */ 29478 : top); 29479 } 29480 29481 With no modifiers, this is what the output from the operands would be 29482for the `att' and `intel' dialects of assembler: 29483 29484Operand masm=att masm=intel 29485--------------------------------------- 29486`%0' `%eax' `eax' 29487`%1' `$2' `2' 29488`%2' `$.L2' `OFFSET FLAT:.L2' 29489 29490 The table below shows the list of supported modifiers and their 29491effects. 29492 29493Modifier Description Operand `masm=att' `masm=intel' 29494------------------------------------------------------------------------------------------ 29495`z' Print the opcode suffix for the size of the `%z0' `l' 29496 current integer operand (one of 29497 `b'/`w'/`l'/`q'). 29498`b' Print the QImode name of the register. `%b0' `%al' `al' 29499`h' Print the QImode name for a "high" register. `%h0' `%ah' `ah' 29500`w' Print the HImode name of the register. `%w0' `%ax' `ax' 29501`k' Print the SImode name of the register. `%k0' `%eax' `eax' 29502`q' Print the DImode name of the register. `%q0' `%rax' `rax' 29503`l' Print the label name with no punctuation. `%l2' `.L2' `.L2' 29504`c' Require a constant operand and print the `%c1' `2' `2' 29505 constant expression with no punctuation. 29506 295076.43.2.8 x86 Floating-Point `asm' Operands 29508.......................................... 29509 29510On x86 targets, there are several rules on the usage of stack-like 29511registers in the operands of an `asm'. These rules apply only to the 29512operands that are stack-like registers: 29513 29514 1. Given a set of input registers that die in an `asm', it is 29515 necessary to know which are implicitly popped by the `asm', and 29516 which must be explicitly popped by GCC. 29517 29518 An input register that is implicitly popped by the `asm' must be 29519 explicitly clobbered, unless it is constrained to match an output 29520 operand. 29521 29522 2. For any input register that is implicitly popped by an `asm', it is 29523 necessary to know how to adjust the stack to compensate for the 29524 pop. If any non-popped input is closer to the top of the 29525 reg-stack than the implicitly popped register, it would not be 29526 possible to know what the stack looked like--it's not clear how 29527 the rest of the stack "slides up". 29528 29529 All implicitly popped input registers must be closer to the top of 29530 the reg-stack than any input that is not implicitly popped. 29531 29532 It is possible that if an input dies in an `asm', the compiler 29533 might use the input register for an output reload. Consider this 29534 example: 29535 29536 asm ("foo" : "=t" (a) : "f" (b)); 29537 29538 This code says that input `b' is not popped by the `asm', and that 29539 the `asm' pushes a result onto the reg-stack, i.e., the stack is 29540 one deeper after the `asm' than it was before. But, it is 29541 possible that reload may think that it can use the same register 29542 for both the input and the output. 29543 29544 To prevent this from happening, if any input operand uses the `f' 29545 constraint, all output register constraints must use the `&' 29546 early-clobber modifier. 29547 29548 The example above is correctly written as: 29549 29550 asm ("foo" : "=&t" (a) : "f" (b)); 29551 29552 3. Some operands need to be in particular places on the stack. All 29553 output operands fall in this category--GCC has no other way to 29554 know which registers the outputs appear in unless you indicate 29555 this in the constraints. 29556 29557 Output operands must specifically indicate which register an output 29558 appears in after an `asm'. `=f' is not allowed: the operand 29559 constraints must select a class with a single register. 29560 29561 4. Output operands may not be "inserted" between existing stack 29562 registers. Since no 387 opcode uses a read/write operand, all 29563 output operands are dead before the `asm', and are pushed by the 29564 `asm'. It makes no sense to push anywhere but the top of the 29565 reg-stack. 29566 29567 Output operands must start at the top of the reg-stack: output 29568 operands may not "skip" a register. 29569 29570 5. Some `asm' statements may need extra stack space for internal 29571 calculations. This can be guaranteed by clobbering stack registers 29572 unrelated to the inputs and outputs. 29573 29574 29575 This `asm' takes one input, which is internally popped, and produces 29576two outputs. 29577 29578 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 29579 29580This `asm' takes two inputs, which are popped by the `fyl2xp1' opcode, 29581and replaces them with one output. The `st(1)' clobber is necessary 29582for the compiler to know that `fyl2xp1' pops both inputs. 29583 29584 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 29585 29586 29587File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: Using Assembly Language with C 29588 295896.43.3 Constraints for `asm' Operands 29590------------------------------------- 29591 29592Here are specific details on what constraint letters you can use with 29593`asm' operands. Constraints can say whether an operand may be in a 29594register, and which kinds of register; whether the operand can be a 29595memory reference, and which kinds of address; whether the operand may 29596be an immediate constant, and which possible values it may have. 29597Constraints can also require two operands to match. Side-effects 29598aren't allowed in operands of inline `asm', unless `<' or `>' 29599constraints are used, because there is no guarantee that the 29600side-effects will happen exactly once in an instruction that can update 29601the addressing register. 29602 29603* Menu: 29604 29605* Simple Constraints:: Basic use of constraints. 29606* Multi-Alternative:: When an insn has two alternative constraint-patterns. 29607* Modifiers:: More precise control over effects of constraints. 29608* Machine Constraints:: Special constraints for some particular machines. 29609 29610 29611File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 29612 296136.43.3.1 Simple Constraints 29614........................... 29615 29616The simplest kind of constraint is a string full of letters, each of 29617which describes one kind of operand that is permitted. Here are the 29618letters that are allowed: 29619 29620whitespace 29621 Whitespace characters are ignored and can be inserted at any 29622 position except the first. This enables each alternative for 29623 different operands to be visually aligned in the machine 29624 description even if they have different number of constraints and 29625 modifiers. 29626 29627`m' 29628 A memory operand is allowed, with any kind of address that the 29629 machine supports in general. Note that the letter used for the 29630 general memory constraint can be re-defined by a back end using 29631 the `TARGET_MEM_CONSTRAINT' macro. 29632 29633`o' 29634 A memory operand is allowed, but only if the address is 29635 "offsettable". This means that adding a small integer (actually, 29636 the width in bytes of the operand, as determined by its machine 29637 mode) may be added to the address and the result is also a valid 29638 memory address. 29639 29640 For example, an address which is constant is offsettable; so is an 29641 address that is the sum of a register and a constant (as long as a 29642 slightly larger constant is also within the range of 29643 address-offsets supported by the machine); but an autoincrement or 29644 autodecrement address is not offsettable. More complicated 29645 indirect/indexed addresses may or may not be offsettable depending 29646 on the other addressing modes that the machine supports. 29647 29648 Note that in an output operand which can be matched by another 29649 operand, the constraint letter `o' is valid only when accompanied 29650 by both `<' (if the target machine has predecrement addressing) 29651 and `>' (if the target machine has preincrement addressing). 29652 29653`V' 29654 A memory operand that is not offsettable. In other words, 29655 anything that would fit the `m' constraint but not the `o' 29656 constraint. 29657 29658`<' 29659 A memory operand with autodecrement addressing (either 29660 predecrement or postdecrement) is allowed. In inline `asm' this 29661 constraint is only allowed if the operand is used exactly once in 29662 an instruction that can handle the side-effects. Not using an 29663 operand with `<' in constraint string in the inline `asm' pattern 29664 at all or using it in multiple instructions isn't valid, because 29665 the side-effects wouldn't be performed or would be performed more 29666 than once. Furthermore, on some targets the operand with `<' in 29667 constraint string must be accompanied by special instruction 29668 suffixes like `%U0' instruction suffix on PowerPC or `%P0' on 29669 IA-64. 29670 29671`>' 29672 A memory operand with autoincrement addressing (either 29673 preincrement or postincrement) is allowed. In inline `asm' the 29674 same restrictions as for `<' apply. 29675 29676`r' 29677 A register operand is allowed provided that it is in a general 29678 register. 29679 29680`i' 29681 An immediate integer operand (one with constant value) is allowed. 29682 This includes symbolic constants whose values will be known only at 29683 assembly time or later. 29684 29685`n' 29686 An immediate integer operand with a known numeric value is allowed. 29687 Many systems cannot support assembly-time constants for operands 29688 less than a word wide. Constraints for these operands should use 29689 `n' rather than `i'. 29690 29691`I', `J', `K', ... `P' 29692 Other letters in the range `I' through `P' may be defined in a 29693 machine-dependent fashion to permit immediate integer operands with 29694 explicit integer values in specified ranges. For example, on the 29695 68000, `I' is defined to stand for the range of values 1 to 8. 29696 This is the range permitted as a shift count in the shift 29697 instructions. 29698 29699`E' 29700 An immediate floating operand (expression code `const_double') is 29701 allowed, but only if the target floating point format is the same 29702 as that of the host machine (on which the compiler is running). 29703 29704`F' 29705 An immediate floating operand (expression code `const_double' or 29706 `const_vector') is allowed. 29707 29708`G', `H' 29709 `G' and `H' may be defined in a machine-dependent fashion to 29710 permit immediate floating operands in particular ranges of values. 29711 29712`s' 29713 An immediate integer operand whose value is not an explicit 29714 integer is allowed. 29715 29716 This might appear strange; if an insn allows a constant operand 29717 with a value not known at compile time, it certainly must allow 29718 any known value. So why use `s' instead of `i'? Sometimes it 29719 allows better code to be generated. 29720 29721 For example, on the 68000 in a fullword instruction it is possible 29722 to use an immediate operand; but if the immediate value is between 29723 -128 and 127, better code results from loading the value into a 29724 register and using the register. This is because the load into 29725 the register can be done with a `moveq' instruction. We arrange 29726 for this to happen by defining the letter `K' to mean "any integer 29727 outside the range -128 to 127", and then specifying `Ks' in the 29728 operand constraints. 29729 29730`g' 29731 Any register, memory or immediate integer operand is allowed, 29732 except for registers that are not general registers. 29733 29734`X' 29735 Any operand whatsoever is allowed. 29736 29737`0', `1', `2', ... `9' 29738 An operand that matches the specified operand number is allowed. 29739 If a digit is used together with letters within the same 29740 alternative, the digit should come last. 29741 29742 This number is allowed to be more than a single digit. If multiple 29743 digits are encountered consecutively, they are interpreted as a 29744 single decimal integer. There is scant chance for ambiguity, 29745 since to-date it has never been desirable that `10' be interpreted 29746 as matching either operand 1 _or_ operand 0. Should this be 29747 desired, one can use multiple alternatives instead. 29748 29749 This is called a "matching constraint" and what it really means is 29750 that the assembler has only a single operand that fills two roles 29751 which `asm' distinguishes. For example, an add instruction uses 29752 two input operands and an output operand, but on most CISC 29753 machines an add instruction really has only two operands, one of 29754 them an input-output operand: 29755 29756 addl #35,r12 29757 29758 Matching constraints are used in these circumstances. More 29759 precisely, the two operands that match must include one input-only 29760 operand and one output-only operand. Moreover, the digit must be a 29761 smaller number than the number of the operand that uses it in the 29762 constraint. 29763 29764`p' 29765 An operand that is a valid memory address is allowed. This is for 29766 "load address" and "push address" instructions. 29767 29768 `p' in the constraint must be accompanied by `address_operand' as 29769 the predicate in the `match_operand'. This predicate interprets 29770 the mode specified in the `match_operand' as the mode of the memory 29771 reference for which the address would be valid. 29772 29773OTHER-LETTERS 29774 Other letters can be defined in machine-dependent fashion to stand 29775 for particular classes of registers or other arbitrary operand 29776 types. `d', `a' and `f' are defined on the 68000/68020 to stand 29777 for data, address and floating point registers. 29778 29779 29780File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 29781 297826.43.3.2 Multiple Alternative Constraints 29783......................................... 29784 29785Sometimes a single instruction has multiple alternative sets of possible 29786operands. For example, on the 68000, a logical-or instruction can 29787combine register or an immediate value into memory, or it can combine 29788any kind of operand into a register; but it cannot combine one memory 29789location into another. 29790 29791 These constraints are represented as multiple alternatives. An 29792alternative can be described by a series of letters for each operand. 29793The overall constraint for an operand is made from the letters for this 29794operand from the first alternative, a comma, the letters for this 29795operand from the second alternative, a comma, and so on until the last 29796alternative. 29797 29798 If all the operands fit any one alternative, the instruction is valid. 29799Otherwise, for each alternative, the compiler counts how many 29800instructions must be added to copy the operands so that that 29801alternative applies. The alternative requiring the least copying is 29802chosen. If two alternatives need the same amount of copying, the one 29803that comes first is chosen. These choices can be altered with the `?' 29804and `!' characters: 29805 29806`?' 29807 Disparage slightly the alternative that the `?' appears in, as a 29808 choice when no alternative applies exactly. The compiler regards 29809 this alternative as one unit more costly for each `?' that appears 29810 in it. 29811 29812`!' 29813 Disparage severely the alternative that the `!' appears in. This 29814 alternative can still be used if it fits without reloading, but if 29815 reloading is needed, some other alternative will be used. 29816 29817`^' 29818 This constraint is analogous to `?' but it disparages slightly the 29819 alternative only if the operand with the `^' needs a reload. 29820 29821`$' 29822 This constraint is analogous to `!' but it disparages severely the 29823 alternative only if the operand with the `$' needs a reload. 29824 29825 29826File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 29827 298286.43.3.3 Constraint Modifier Characters 29829....................................... 29830 29831Here are constraint modifier characters. 29832 29833`=' 29834 Means that this operand is written to by this instruction: the 29835 previous value is discarded and replaced by new data. 29836 29837`+' 29838 Means that this operand is both read and written by the 29839 instruction. 29840 29841 When the compiler fixes up the operands to satisfy the constraints, 29842 it needs to know which operands are read by the instruction and 29843 which are written by it. `=' identifies an operand which is only 29844 written; `+' identifies an operand that is both read and written; 29845 all other operands are assumed to only be read. 29846 29847 If you specify `=' or `+' in a constraint, you put it in the first 29848 character of the constraint string. 29849 29850`&' 29851 Means (in a particular alternative) that this operand is an 29852 "earlyclobber" operand, which is written before the instruction is 29853 finished using the input operands. Therefore, this operand may 29854 not lie in a register that is read by the instruction or as part 29855 of any memory address. 29856 29857 `&' applies only to the alternative in which it is written. In 29858 constraints with multiple alternatives, sometimes one alternative 29859 requires `&' while others do not. See, for example, the `movdf' 29860 insn of the 68000. 29861 29862 A operand which is read by the instruction can be tied to an 29863 earlyclobber operand if its only use as an input occurs before the 29864 early result is written. Adding alternatives of this form often 29865 allows GCC to produce better code when only some of the read 29866 operands can be affected by the earlyclobber. See, for example, 29867 the `mulsi3' insn of the ARM. 29868 29869 Furthermore, if the "earlyclobber" operand is also a read/write 29870 operand, then that operand is written only after it's used. 29871 29872 `&' does not obviate the need to write `=' or `+'. As 29873 "earlyclobber" operands are always written, a read-only 29874 "earlyclobber" operand is ill-formed and will be rejected by the 29875 compiler. 29876 29877`%' 29878 Declares the instruction to be commutative for this operand and the 29879 following operand. This means that the compiler may interchange 29880 the two operands if that is the cheapest way to make all operands 29881 fit the constraints. `%' applies to all alternatives and must 29882 appear as the first character in the constraint. Only read-only 29883 operands can use `%'. 29884 29885 GCC can only handle one commutative pair in an asm; if you use 29886 more, the compiler may fail. Note that you need not use the 29887 modifier if the two alternatives are strictly identical; this 29888 would only waste time in the reload pass. The modifier is not 29889 operational after register allocation, so the result of 29890 `define_peephole2' and `define_split's performed after reload 29891 cannot rely on `%' to make the intended insn match. 29892 29893`#' 29894 Says that all following characters, up to the next comma, are to be 29895 ignored as a constraint. They are significant only for choosing 29896 register preferences. 29897 29898`*' 29899 Says that the following character should be ignored when choosing 29900 register preferences. `*' has no effect on the meaning of the 29901 constraint as a constraint, and no effect on reloading. For LRA 29902 `*' additionally disparages slightly the alternative if the 29903 following character matches the operand. 29904 29905 29906 29907File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 29908 299096.43.3.4 Constraints for Particular Machines 29910............................................ 29911 29912Whenever possible, you should use the general-purpose constraint letters 29913in `asm' arguments, since they will convey meaning more readily to 29914people reading your code. Failing that, use the constraint letters 29915that usually have very similar meanings across architectures. The most 29916commonly used constraints are `m' and `r' (for memory and 29917general-purpose registers respectively; *note Simple Constraints::), and 29918`I', usually the letter indicating the most common immediate-constant 29919format. 29920 29921 Each architecture defines additional constraints. These constraints 29922are used by the compiler itself for instruction generation, as well as 29923for `asm' statements; therefore, some of the constraints are not 29924particularly useful for `asm'. Here is a summary of some of the 29925machine-dependent constraints available on some particular machines; it 29926includes both constraints that are useful for `asm' and constraints 29927that aren't. The compiler source file mentioned in the table heading 29928for each architecture is the definitive reference for the meanings of 29929that architecture's constraints. 29930 29931_AArch64 family--`config/aarch64/constraints.md'_ 29932 29933 `k' 29934 The stack pointer register (`SP') 29935 29936 `w' 29937 Floating point or SIMD vector register 29938 29939 `I' 29940 Integer constant that is valid as an immediate operand in an 29941 `ADD' instruction 29942 29943 `J' 29944 Integer constant that is valid as an immediate operand in a 29945 `SUB' instruction (once negated) 29946 29947 `K' 29948 Integer constant that can be used with a 32-bit logical 29949 instruction 29950 29951 `L' 29952 Integer constant that can be used with a 64-bit logical 29953 instruction 29954 29955 `M' 29956 Integer constant that is valid as an immediate operand in a 29957 32-bit `MOV' pseudo instruction. The `MOV' may be assembled 29958 to one of several different machine instructions depending on 29959 the value 29960 29961 `N' 29962 Integer constant that is valid as an immediate operand in a 29963 64-bit `MOV' pseudo instruction 29964 29965 `S' 29966 An absolute symbolic address or a label reference 29967 29968 `Y' 29969 Floating point constant zero 29970 29971 `Z' 29972 Integer constant zero 29973 29974 `Ush' 29975 The high part (bits 12 and upwards) of the pc-relative 29976 address of a symbol within 4GB of the instruction 29977 29978 `Q' 29979 A memory address which uses a single base register with no 29980 offset 29981 29982 `Ump' 29983 A memory address suitable for a load/store pair instruction 29984 in SI, DI, SF and DF modes 29985 29986 29987_ARC --`config/arc/constraints.md'_ 29988 29989 `q' 29990 Registers usable in ARCompact 16-bit instructions: `r0'-`r3', 29991 `r12'-`r15'. This constraint can only match when the `-mq' 29992 option is in effect. 29993 29994 `e' 29995 Registers usable as base-regs of memory addresses in 29996 ARCompact 16-bit memory instructions: `r0'-`r3', `r12'-`r15', 29997 `sp'. This constraint can only match when the `-mq' option 29998 is in effect. 29999 30000 `D' 30001 ARC FPX (dpfp) 64-bit registers. `D0', `D1'. 30002 30003 `I' 30004 A signed 12-bit integer constant. 30005 30006 `Cal' 30007 constant for arithmetic/logical operations. This might be 30008 any constant that can be put into a long immediate by the 30009 assmbler or linker without involving a PIC relocation. 30010 30011 `K' 30012 A 3-bit unsigned integer constant. 30013 30014 `L' 30015 A 6-bit unsigned integer constant. 30016 30017 `CnL' 30018 One's complement of a 6-bit unsigned integer constant. 30019 30020 `CmL' 30021 Two's complement of a 6-bit unsigned integer constant. 30022 30023 `M' 30024 A 5-bit unsigned integer constant. 30025 30026 `O' 30027 A 7-bit unsigned integer constant. 30028 30029 `P' 30030 A 8-bit unsigned integer constant. 30031 30032 `H' 30033 Any const_double value. 30034 30035_ARM family--`config/arm/constraints.md'_ 30036 30037 `h' 30038 In Thumb state, the core registers `r8'-`r15'. 30039 30040 `k' 30041 The stack pointer register. 30042 30043 `l' 30044 In Thumb State the core registers `r0'-`r7'. In ARM state 30045 this is an alias for the `r' constraint. 30046 30047 `t' 30048 VFP floating-point registers `s0'-`s31'. Used for 32 bit 30049 values. 30050 30051 `w' 30052 VFP floating-point registers `d0'-`d31' and the appropriate 30053 subset `d0'-`d15' based on command line options. Used for 64 30054 bit values only. Not valid for Thumb1. 30055 30056 `y' 30057 The iWMMX co-processor registers. 30058 30059 `z' 30060 The iWMMX GR registers. 30061 30062 `G' 30063 The floating-point constant 0.0 30064 30065 `I' 30066 Integer that is valid as an immediate operand in a data 30067 processing instruction. That is, an integer in the range 0 30068 to 255 rotated by a multiple of 2 30069 30070 `J' 30071 Integer in the range -4095 to 4095 30072 30073 `K' 30074 Integer that satisfies constraint `I' when inverted (ones 30075 complement) 30076 30077 `L' 30078 Integer that satisfies constraint `I' when negated (twos 30079 complement) 30080 30081 `M' 30082 Integer in the range 0 to 32 30083 30084 `Q' 30085 A memory reference where the exact address is in a single 30086 register (``m'' is preferable for `asm' statements) 30087 30088 `R' 30089 An item in the constant pool 30090 30091 `S' 30092 A symbol in the text segment of the current file 30093 30094 `Uv' 30095 A memory reference suitable for VFP load/store insns 30096 (reg+constant offset) 30097 30098 `Uy' 30099 A memory reference suitable for iWMMXt load/store 30100 instructions. 30101 30102 `Uq' 30103 A memory reference suitable for the ARMv4 ldrsb instruction. 30104 30105_AVR family--`config/avr/constraints.md'_ 30106 30107 `l' 30108 Registers from r0 to r15 30109 30110 `a' 30111 Registers from r16 to r23 30112 30113 `d' 30114 Registers from r16 to r31 30115 30116 `w' 30117 Registers from r24 to r31. These registers can be used in 30118 `adiw' command 30119 30120 `e' 30121 Pointer register (r26-r31) 30122 30123 `b' 30124 Base pointer register (r28-r31) 30125 30126 `q' 30127 Stack pointer register (SPH:SPL) 30128 30129 `t' 30130 Temporary register r0 30131 30132 `x' 30133 Register pair X (r27:r26) 30134 30135 `y' 30136 Register pair Y (r29:r28) 30137 30138 `z' 30139 Register pair Z (r31:r30) 30140 30141 `I' 30142 Constant greater than -1, less than 64 30143 30144 `J' 30145 Constant greater than -64, less than 1 30146 30147 `K' 30148 Constant integer 2 30149 30150 `L' 30151 Constant integer 0 30152 30153 `M' 30154 Constant that fits in 8 bits 30155 30156 `N' 30157 Constant integer -1 30158 30159 `O' 30160 Constant integer 8, 16, or 24 30161 30162 `P' 30163 Constant integer 1 30164 30165 `G' 30166 A floating point constant 0.0 30167 30168 `Q' 30169 A memory address based on Y or Z pointer with displacement. 30170 30171_Blackfin family--`config/bfin/constraints.md'_ 30172 30173 `a' 30174 P register 30175 30176 `d' 30177 D register 30178 30179 `z' 30180 A call clobbered P register. 30181 30182 `qN' 30183 A single register. If N is in the range 0 to 7, the 30184 corresponding D register. If it is `A', then the register P0. 30185 30186 `D' 30187 Even-numbered D register 30188 30189 `W' 30190 Odd-numbered D register 30191 30192 `e' 30193 Accumulator register. 30194 30195 `A' 30196 Even-numbered accumulator register. 30197 30198 `B' 30199 Odd-numbered accumulator register. 30200 30201 `b' 30202 I register 30203 30204 `v' 30205 B register 30206 30207 `f' 30208 M register 30209 30210 `c' 30211 Registers used for circular buffering, i.e. I, B, or L 30212 registers. 30213 30214 `C' 30215 The CC register. 30216 30217 `t' 30218 LT0 or LT1. 30219 30220 `k' 30221 LC0 or LC1. 30222 30223 `u' 30224 LB0 or LB1. 30225 30226 `x' 30227 Any D, P, B, M, I or L register. 30228 30229 `y' 30230 Additional registers typically used only in prologues and 30231 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 30232 USP. 30233 30234 `w' 30235 Any register except accumulators or CC. 30236 30237 `Ksh' 30238 Signed 16 bit integer (in the range -32768 to 32767) 30239 30240 `Kuh' 30241 Unsigned 16 bit integer (in the range 0 to 65535) 30242 30243 `Ks7' 30244 Signed 7 bit integer (in the range -64 to 63) 30245 30246 `Ku7' 30247 Unsigned 7 bit integer (in the range 0 to 127) 30248 30249 `Ku5' 30250 Unsigned 5 bit integer (in the range 0 to 31) 30251 30252 `Ks4' 30253 Signed 4 bit integer (in the range -8 to 7) 30254 30255 `Ks3' 30256 Signed 3 bit integer (in the range -3 to 4) 30257 30258 `Ku3' 30259 Unsigned 3 bit integer (in the range 0 to 7) 30260 30261 `PN' 30262 Constant N, where N is a single-digit constant in the range 0 30263 to 4. 30264 30265 `PA' 30266 An integer equal to one of the MACFLAG_XXX constants that is 30267 suitable for use with either accumulator. 30268 30269 `PB' 30270 An integer equal to one of the MACFLAG_XXX constants that is 30271 suitable for use only with accumulator A1. 30272 30273 `M1' 30274 Constant 255. 30275 30276 `M2' 30277 Constant 65535. 30278 30279 `J' 30280 An integer constant with exactly a single bit set. 30281 30282 `L' 30283 An integer constant with all bits set except exactly one. 30284 30285 `H' 30286 30287 `Q' 30288 Any SYMBOL_REF. 30289 30290_CR16 Architecture--`config/cr16/cr16.h'_ 30291 30292 `b' 30293 Registers from r0 to r14 (registers without stack pointer) 30294 30295 `t' 30296 Register from r0 to r11 (all 16-bit registers) 30297 30298 `p' 30299 Register from r12 to r15 (all 32-bit registers) 30300 30301 `I' 30302 Signed constant that fits in 4 bits 30303 30304 `J' 30305 Signed constant that fits in 5 bits 30306 30307 `K' 30308 Signed constant that fits in 6 bits 30309 30310 `L' 30311 Unsigned constant that fits in 4 bits 30312 30313 `M' 30314 Signed constant that fits in 32 bits 30315 30316 `N' 30317 Check for 64 bits wide constants for add/sub instructions 30318 30319 `G' 30320 Floating point constant that is legal for store immediate 30321 30322_Epiphany--`config/epiphany/constraints.md'_ 30323 30324 `U16' 30325 An unsigned 16-bit constant. 30326 30327 `K' 30328 An unsigned 5-bit constant. 30329 30330 `L' 30331 A signed 11-bit constant. 30332 30333 `Cm1' 30334 A signed 11-bit constant added to -1. Can only match when 30335 the `-m1reg-REG' option is active. 30336 30337 `Cl1' 30338 Left-shift of -1, i.e., a bit mask with a block of leading 30339 ones, the rest being a block of trailing zeroes. Can only 30340 match when the `-m1reg-REG' option is active. 30341 30342 `Cr1' 30343 Right-shift of -1, i.e., a bit mask with a trailing block of 30344 ones, the rest being zeroes. Or to put it another way, one 30345 less than a power of two. Can only match when the 30346 `-m1reg-REG' option is active. 30347 30348 `Cal' 30349 Constant for arithmetic/logical operations. This is like 30350 `i', except that for position independent code, no symbols / 30351 expressions needing relocations are allowed. 30352 30353 `Csy' 30354 Symbolic constant for call/jump instruction. 30355 30356 `Rcs' 30357 The register class usable in short insns. This is a register 30358 class constraint, and can thus drive register allocation. 30359 This constraint won't match unless `-mprefer-short-insn-regs' 30360 is in effect. 30361 30362 `Rsc' 30363 The the register class of registers that can be used to hold a 30364 sibcall call address. I.e., a caller-saved register. 30365 30366 `Rct' 30367 Core control register class. 30368 30369 `Rgs' 30370 The register group usable in short insns. This constraint 30371 does not use a register class, so that it only passively 30372 matches suitable registers, and doesn't drive register 30373 allocation. 30374 30375 `Rra' 30376 Matches the return address if it can be replaced with the 30377 link register. 30378 30379 `Rcc' 30380 Matches the integer condition code register. 30381 30382 `Sra' 30383 Matches the return address if it is in a stack slot. 30384 30385 `Cfm' 30386 Matches control register values to switch fp mode, which are 30387 encapsulated in `UNSPEC_FP_MODE'. 30388 30389_FRV--`config/frv/frv.h'_ 30390 30391 `a' 30392 Register in the class `ACC_REGS' (`acc0' to `acc7'). 30393 30394 `b' 30395 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 30396 30397 `c' 30398 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 30399 to `icc3'). 30400 30401 `d' 30402 Register in the class `GPR_REGS' (`gr0' to `gr63'). 30403 30404 `e' 30405 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 30406 registers are excluded not in the class but through the use 30407 of a machine mode larger than 4 bytes. 30408 30409 `f' 30410 Register in the class `FPR_REGS' (`fr0' to `fr63'). 30411 30412 `h' 30413 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 30414 registers are excluded not in the class but through the use 30415 of a machine mode larger than 4 bytes. 30416 30417 `l' 30418 Register in the class `LR_REG' (the `lr' register). 30419 30420 `q' 30421 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 30422 Register numbers not divisible by 4 are excluded not in the 30423 class but through the use of a machine mode larger than 8 30424 bytes. 30425 30426 `t' 30427 Register in the class `ICC_REGS' (`icc0' to `icc3'). 30428 30429 `u' 30430 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 30431 30432 `v' 30433 Register in the class `ICR_REGS' (`cc4' to `cc7'). 30434 30435 `w' 30436 Register in the class `FCR_REGS' (`cc0' to `cc3'). 30437 30438 `x' 30439 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 30440 Register numbers not divisible by 4 are excluded not in the 30441 class but through the use of a machine mode larger than 8 30442 bytes. 30443 30444 `z' 30445 Register in the class `SPR_REGS' (`lcr' and `lr'). 30446 30447 `A' 30448 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 30449 30450 `B' 30451 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 30452 30453 `C' 30454 Register in the class `CR_REGS' (`cc0' to `cc7'). 30455 30456 `G' 30457 Floating point constant zero 30458 30459 `I' 30460 6-bit signed integer constant 30461 30462 `J' 30463 10-bit signed integer constant 30464 30465 `L' 30466 16-bit signed integer constant 30467 30468 `M' 30469 16-bit unsigned integer constant 30470 30471 `N' 30472 12-bit signed integer constant that is negative--i.e. in the 30473 range of -2048 to -1 30474 30475 `O' 30476 Constant zero 30477 30478 `P' 30479 12-bit signed integer constant that is greater than 30480 zero--i.e. in the range of 1 to 2047. 30481 30482 30483_Hewlett-Packard PA-RISC--`config/pa/pa.h'_ 30484 30485 `a' 30486 General register 1 30487 30488 `f' 30489 Floating point register 30490 30491 `q' 30492 Shift amount register 30493 30494 `x' 30495 Floating point register (deprecated) 30496 30497 `y' 30498 Upper floating point register (32-bit), floating point 30499 register (64-bit) 30500 30501 `Z' 30502 Any register 30503 30504 `I' 30505 Signed 11-bit integer constant 30506 30507 `J' 30508 Signed 14-bit integer constant 30509 30510 `K' 30511 Integer constant that can be deposited with a `zdepi' 30512 instruction 30513 30514 `L' 30515 Signed 5-bit integer constant 30516 30517 `M' 30518 Integer constant 0 30519 30520 `N' 30521 Integer constant that can be loaded with a `ldil' instruction 30522 30523 `O' 30524 Integer constant whose value plus one is a power of 2 30525 30526 `P' 30527 Integer constant that can be used for `and' operations in 30528 `depi' and `extru' instructions 30529 30530 `S' 30531 Integer constant 31 30532 30533 `U' 30534 Integer constant 63 30535 30536 `G' 30537 Floating-point constant 0.0 30538 30539 `A' 30540 A `lo_sum' data-linkage-table memory operand 30541 30542 `Q' 30543 A memory operand that can be used as the destination operand 30544 of an integer store instruction 30545 30546 `R' 30547 A scaled or unscaled indexed memory operand 30548 30549 `T' 30550 A memory operand for floating-point loads and stores 30551 30552 `W' 30553 A register indirect memory operand 30554 30555_Intel IA-64--`config/ia64/ia64.h'_ 30556 30557 `a' 30558 General register `r0' to `r3' for `addl' instruction 30559 30560 `b' 30561 Branch register 30562 30563 `c' 30564 Predicate register (`c' as in "conditional") 30565 30566 `d' 30567 Application register residing in M-unit 30568 30569 `e' 30570 Application register residing in I-unit 30571 30572 `f' 30573 Floating-point register 30574 30575 `m' 30576 Memory operand. If used together with `<' or `>', the 30577 operand can have postincrement and postdecrement which 30578 require printing with `%Pn' on IA-64. 30579 30580 `G' 30581 Floating-point constant 0.0 or 1.0 30582 30583 `I' 30584 14-bit signed integer constant 30585 30586 `J' 30587 22-bit signed integer constant 30588 30589 `K' 30590 8-bit signed integer constant for logical instructions 30591 30592 `L' 30593 8-bit adjusted signed integer constant for compare pseudo-ops 30594 30595 `M' 30596 6-bit unsigned integer constant for shift counts 30597 30598 `N' 30599 9-bit signed integer constant for load and store 30600 postincrements 30601 30602 `O' 30603 The constant zero 30604 30605 `P' 30606 0 or -1 for `dep' instruction 30607 30608 `Q' 30609 Non-volatile memory for floating-point loads and stores 30610 30611 `R' 30612 Integer constant in the range 1 to 4 for `shladd' instruction 30613 30614 `S' 30615 Memory operand except postincrement and postdecrement. This 30616 is now roughly the same as `m' when not used together with `<' 30617 or `>'. 30618 30619_M32C--`config/m32c/m32c.c'_ 30620 30621 `Rsp' 30622 `Rfb' 30623 `Rsb' 30624 `$sp', `$fb', `$sb'. 30625 30626 `Rcr' 30627 Any control register, when they're 16 bits wide (nothing if 30628 control registers are 24 bits wide) 30629 30630 `Rcl' 30631 Any control register, when they're 24 bits wide. 30632 30633 `R0w' 30634 `R1w' 30635 `R2w' 30636 `R3w' 30637 $r0, $r1, $r2, $r3. 30638 30639 `R02' 30640 $r0 or $r2, or $r2r0 for 32 bit values. 30641 30642 `R13' 30643 $r1 or $r3, or $r3r1 for 32 bit values. 30644 30645 `Rdi' 30646 A register that can hold a 64 bit value. 30647 30648 `Rhl' 30649 $r0 or $r1 (registers with addressable high/low bytes) 30650 30651 `R23' 30652 $r2 or $r3 30653 30654 `Raa' 30655 Address registers 30656 30657 `Raw' 30658 Address registers when they're 16 bits wide. 30659 30660 `Ral' 30661 Address registers when they're 24 bits wide. 30662 30663 `Rqi' 30664 Registers that can hold QI values. 30665 30666 `Rad' 30667 Registers that can be used with displacements ($a0, $a1, $sb). 30668 30669 `Rsi' 30670 Registers that can hold 32 bit values. 30671 30672 `Rhi' 30673 Registers that can hold 16 bit values. 30674 30675 `Rhc' 30676 Registers chat can hold 16 bit values, including all control 30677 registers. 30678 30679 `Rra' 30680 $r0 through R1, plus $a0 and $a1. 30681 30682 `Rfl' 30683 The flags register. 30684 30685 `Rmm' 30686 The memory-based pseudo-registers $mem0 through $mem15. 30687 30688 `Rpi' 30689 Registers that can hold pointers (16 bit registers for r8c, 30690 m16c; 24 bit registers for m32cm, m32c). 30691 30692 `Rpa' 30693 Matches multiple registers in a PARALLEL to form a larger 30694 register. Used to match function return values. 30695 30696 `Is3' 30697 -8 ... 7 30698 30699 `IS1' 30700 -128 ... 127 30701 30702 `IS2' 30703 -32768 ... 32767 30704 30705 `IU2' 30706 0 ... 65535 30707 30708 `In4' 30709 -8 ... -1 or 1 ... 8 30710 30711 `In5' 30712 -16 ... -1 or 1 ... 16 30713 30714 `In6' 30715 -32 ... -1 or 1 ... 32 30716 30717 `IM2' 30718 -65536 ... -1 30719 30720 `Ilb' 30721 An 8 bit value with exactly one bit set. 30722 30723 `Ilw' 30724 A 16 bit value with exactly one bit set. 30725 30726 `Sd' 30727 The common src/dest memory addressing modes. 30728 30729 `Sa' 30730 Memory addressed using $a0 or $a1. 30731 30732 `Si' 30733 Memory addressed with immediate addresses. 30734 30735 `Ss' 30736 Memory addressed using the stack pointer ($sp). 30737 30738 `Sf' 30739 Memory addressed using the frame base register ($fb). 30740 30741 `Ss' 30742 Memory addressed using the small base register ($sb). 30743 30744 `S1' 30745 $r1h 30746 30747_MeP--`config/mep/constraints.md'_ 30748 30749 `a' 30750 The $sp register. 30751 30752 `b' 30753 The $tp register. 30754 30755 `c' 30756 Any control register. 30757 30758 `d' 30759 Either the $hi or the $lo register. 30760 30761 `em' 30762 Coprocessor registers that can be directly loaded ($c0-$c15). 30763 30764 `ex' 30765 Coprocessor registers that can be moved to each other. 30766 30767 `er' 30768 Coprocessor registers that can be moved to core registers. 30769 30770 `h' 30771 The $hi register. 30772 30773 `j' 30774 The $rpc register. 30775 30776 `l' 30777 The $lo register. 30778 30779 `t' 30780 Registers which can be used in $tp-relative addressing. 30781 30782 `v' 30783 The $gp register. 30784 30785 `x' 30786 The coprocessor registers. 30787 30788 `y' 30789 The coprocessor control registers. 30790 30791 `z' 30792 The $0 register. 30793 30794 `A' 30795 User-defined register set A. 30796 30797 `B' 30798 User-defined register set B. 30799 30800 `C' 30801 User-defined register set C. 30802 30803 `D' 30804 User-defined register set D. 30805 30806 `I' 30807 Offsets for $gp-rel addressing. 30808 30809 `J' 30810 Constants that can be used directly with boolean insns. 30811 30812 `K' 30813 Constants that can be moved directly to registers. 30814 30815 `L' 30816 Small constants that can be added to registers. 30817 30818 `M' 30819 Long shift counts. 30820 30821 `N' 30822 Small constants that can be compared to registers. 30823 30824 `O' 30825 Constants that can be loaded into the top half of registers. 30826 30827 `S' 30828 Signed 8-bit immediates. 30829 30830 `T' 30831 Symbols encoded for $tp-rel or $gp-rel addressing. 30832 30833 `U' 30834 Non-constant addresses for loading/saving coprocessor 30835 registers. 30836 30837 `W' 30838 The top half of a symbol's value. 30839 30840 `Y' 30841 A register indirect address without offset. 30842 30843 `Z' 30844 Symbolic references to the control bus. 30845 30846 30847_MicroBlaze--`config/microblaze/constraints.md'_ 30848 30849 `d' 30850 A general register (`r0' to `r31'). 30851 30852 `z' 30853 A status register (`rmsr', `$fcc1' to `$fcc7'). 30854 30855 30856_MIPS--`config/mips/constraints.md'_ 30857 30858 `d' 30859 An address register. This is equivalent to `r' unless 30860 generating MIPS16 code. 30861 30862 `f' 30863 A floating-point register (if available). 30864 30865 `h' 30866 Formerly the `hi' register. This constraint is no longer 30867 supported. 30868 30869 `l' 30870 The `lo' register. Use this register to store values that are 30871 no bigger than a word. 30872 30873 `x' 30874 The concatenated `hi' and `lo' registers. Use this register 30875 to store doubleword values. 30876 30877 `c' 30878 A register suitable for use in an indirect jump. This will 30879 always be `$25' for `-mabicalls'. 30880 30881 `v' 30882 Register `$3'. Do not use this constraint in new code; it is 30883 retained only for compatibility with glibc. 30884 30885 `y' 30886 Equivalent to `r'; retained for backwards compatibility. 30887 30888 `z' 30889 A floating-point condition code register. 30890 30891 `I' 30892 A signed 16-bit constant (for arithmetic instructions). 30893 30894 `J' 30895 Integer zero. 30896 30897 `K' 30898 An unsigned 16-bit constant (for logic instructions). 30899 30900 `L' 30901 A signed 32-bit constant in which the lower 16 bits are zero. 30902 Such constants can be loaded using `lui'. 30903 30904 `M' 30905 A constant that cannot be loaded using `lui', `addiu' or 30906 `ori'. 30907 30908 `N' 30909 A constant in the range -65535 to -1 (inclusive). 30910 30911 `O' 30912 A signed 15-bit constant. 30913 30914 `P' 30915 A constant in the range 1 to 65535 (inclusive). 30916 30917 `G' 30918 Floating-point zero. 30919 30920 `R' 30921 An address that can be used in a non-macro load or store. 30922 30923 `ZC' 30924 A memory operand whose address is formed by a base register 30925 and offset that is suitable for use in instructions with the 30926 same addressing mode as `ll' and `sc'. 30927 30928 `ZD' 30929 An address suitable for a `prefetch' instruction, or for any 30930 other instruction with the same addressing mode as `prefetch'. 30931 30932_Motorola 680x0--`config/m68k/constraints.md'_ 30933 30934 `a' 30935 Address register 30936 30937 `d' 30938 Data register 30939 30940 `f' 30941 68881 floating-point register, if available 30942 30943 `I' 30944 Integer in the range 1 to 8 30945 30946 `J' 30947 16-bit signed number 30948 30949 `K' 30950 Signed number whose magnitude is greater than 0x80 30951 30952 `L' 30953 Integer in the range -8 to -1 30954 30955 `M' 30956 Signed number whose magnitude is greater than 0x100 30957 30958 `N' 30959 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 30960 30961 `O' 30962 16 (for rotate using swap) 30963 30964 `P' 30965 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 30966 30967 `R' 30968 Numbers that mov3q can handle 30969 30970 `G' 30971 Floating point constant that is not a 68881 constant 30972 30973 `S' 30974 Operands that satisfy 'm' when -mpcrel is in effect 30975 30976 `T' 30977 Operands that satisfy 's' when -mpcrel is not in effect 30978 30979 `Q' 30980 Address register indirect addressing mode 30981 30982 `U' 30983 Register offset addressing 30984 30985 `W' 30986 const_call_operand 30987 30988 `Cs' 30989 symbol_ref or const 30990 30991 `Ci' 30992 const_int 30993 30994 `C0' 30995 const_int 0 30996 30997 `Cj' 30998 Range of signed numbers that don't fit in 16 bits 30999 31000 `Cmvq' 31001 Integers valid for mvq 31002 31003 `Capsw' 31004 Integers valid for a moveq followed by a swap 31005 31006 `Cmvz' 31007 Integers valid for mvz 31008 31009 `Cmvs' 31010 Integers valid for mvs 31011 31012 `Ap' 31013 push_operand 31014 31015 `Ac' 31016 Non-register operands allowed in clr 31017 31018 31019_Moxie--`config/moxie/constraints.md'_ 31020 31021 `A' 31022 An absolute address 31023 31024 `B' 31025 An offset address 31026 31027 `W' 31028 A register indirect memory operand 31029 31030 `I' 31031 A constant in the range of 0 to 255. 31032 31033 `N' 31034 A constant in the range of 0 to -255. 31035 31036 31037_MSP430-`config/msp430/constraints.md'_ 31038 31039 `R12' 31040 Register R12. 31041 31042 `R13' 31043 Register R13. 31044 31045 `K' 31046 Integer constant 1. 31047 31048 `L' 31049 Integer constant -1^20..1^19. 31050 31051 `M' 31052 Integer constant 1-4. 31053 31054 `Ya' 31055 Memory references which do not require an extended MOVX 31056 instruction. 31057 31058 `Yl' 31059 Memory reference, labels only. 31060 31061 `Ys' 31062 Memory reference, stack only. 31063 31064 31065_NDS32--`config/nds32/constraints.md'_ 31066 31067 `w' 31068 LOW register class $r0 to $r7 constraint for V3/V3M ISA. 31069 31070 `l' 31071 LOW register class $r0 to $r7. 31072 31073 `d' 31074 MIDDLE register class $r0 to $r11, $r16 to $r19. 31075 31076 `h' 31077 HIGH register class $r12 to $r14, $r20 to $r31. 31078 31079 `t' 31080 Temporary assist register $ta (i.e. $r15). 31081 31082 `k' 31083 Stack register $sp. 31084 31085 `Iu03' 31086 Unsigned immediate 3-bit value. 31087 31088 `In03' 31089 Negative immediate 3-bit value in the range of -7-0. 31090 31091 `Iu04' 31092 Unsigned immediate 4-bit value. 31093 31094 `Is05' 31095 Signed immediate 5-bit value. 31096 31097 `Iu05' 31098 Unsigned immediate 5-bit value. 31099 31100 `In05' 31101 Negative immediate 5-bit value in the range of -31-0. 31102 31103 `Ip05' 31104 Unsigned immediate 5-bit value for movpi45 instruction with 31105 range 16-47. 31106 31107 `Iu06' 31108 Unsigned immediate 6-bit value constraint for addri36.sp 31109 instruction. 31110 31111 `Iu08' 31112 Unsigned immediate 8-bit value. 31113 31114 `Iu09' 31115 Unsigned immediate 9-bit value. 31116 31117 `Is10' 31118 Signed immediate 10-bit value. 31119 31120 `Is11' 31121 Signed immediate 11-bit value. 31122 31123 `Is15' 31124 Signed immediate 15-bit value. 31125 31126 `Iu15' 31127 Unsigned immediate 15-bit value. 31128 31129 `Ic15' 31130 A constant which is not in the range of imm15u but ok for 31131 bclr instruction. 31132 31133 `Ie15' 31134 A constant which is not in the range of imm15u but ok for 31135 bset instruction. 31136 31137 `It15' 31138 A constant which is not in the range of imm15u but ok for 31139 btgl instruction. 31140 31141 `Ii15' 31142 A constant whose compliment value is in the range of imm15u 31143 and ok for bitci instruction. 31144 31145 `Is16' 31146 Signed immediate 16-bit value. 31147 31148 `Is17' 31149 Signed immediate 17-bit value. 31150 31151 `Is19' 31152 Signed immediate 19-bit value. 31153 31154 `Is20' 31155 Signed immediate 20-bit value. 31156 31157 `Ihig' 31158 The immediate value that can be simply set high 20-bit. 31159 31160 `Izeb' 31161 The immediate value 0xff. 31162 31163 `Izeh' 31164 The immediate value 0xffff. 31165 31166 `Ixls' 31167 The immediate value 0x01. 31168 31169 `Ix11' 31170 The immediate value 0x7ff. 31171 31172 `Ibms' 31173 The immediate value with power of 2. 31174 31175 `Ifex' 31176 The immediate value with power of 2 minus 1. 31177 31178 `U33' 31179 Memory constraint for 333 format. 31180 31181 `U45' 31182 Memory constraint for 45 format. 31183 31184 `U37' 31185 Memory constraint for 37 format. 31186 31187_Nios II family--`config/nios2/constraints.md'_ 31188 31189 `I' 31190 Integer that is valid as an immediate operand in an 31191 instruction taking a signed 16-bit number. Range -32768 to 31192 32767. 31193 31194 `J' 31195 Integer that is valid as an immediate operand in an 31196 instruction taking an unsigned 16-bit number. Range 0 to 31197 65535. 31198 31199 `K' 31200 Integer that is valid as an immediate operand in an 31201 instruction taking only the upper 16-bits of a 32-bit number. 31202 Range 32-bit numbers with the lower 16-bits being 0. 31203 31204 `L' 31205 Integer that is valid as an immediate operand for a shift 31206 instruction. Range 0 to 31. 31207 31208 `M' 31209 Integer that is valid as an immediate operand for only the 31210 value 0. Can be used in conjunction with the format modifier 31211 `z' to use `r0' instead of `0' in the assembly output. 31212 31213 `N' 31214 Integer that is valid as an immediate operand for a custom 31215 instruction opcode. Range 0 to 255. 31216 31217 `S' 31218 Matches immediates which are addresses in the small data 31219 section and therefore can be added to `gp' as a 16-bit 31220 immediate to re-create their 32-bit value. 31221 31222 31223_PDP-11--`config/pdp11/constraints.md'_ 31224 31225 `a' 31226 Floating point registers AC0 through AC3. These can be 31227 loaded from/to memory with a single instruction. 31228 31229 `d' 31230 Odd numbered general registers (R1, R3, R5). These are used 31231 for 16-bit multiply operations. 31232 31233 `f' 31234 Any of the floating point registers (AC0 through AC5). 31235 31236 `G' 31237 Floating point constant 0. 31238 31239 `I' 31240 An integer constant that fits in 16 bits. 31241 31242 `J' 31243 An integer constant whose low order 16 bits are zero. 31244 31245 `K' 31246 An integer constant that does not meet the constraints for 31247 codes `I' or `J'. 31248 31249 `L' 31250 The integer constant 1. 31251 31252 `M' 31253 The integer constant -1. 31254 31255 `N' 31256 The integer constant 0. 31257 31258 `O' 31259 Integer constants -4 through -1 and 1 through 4; shifts by 31260 these amounts are handled as multiple single-bit shifts 31261 rather than a single variable-length shift. 31262 31263 `Q' 31264 A memory reference which requires an additional word (address 31265 or offset) after the opcode. 31266 31267 `R' 31268 A memory reference that is encoded within the opcode. 31269 31270 31271_PowerPC and IBM RS6000--`config/rs6000/constraints.md'_ 31272 31273 `b' 31274 Address base register 31275 31276 `d' 31277 Floating point register (containing 64-bit value) 31278 31279 `f' 31280 Floating point register (containing 32-bit value) 31281 31282 `v' 31283 Altivec vector register 31284 31285 `wa' 31286 Any VSX register if the -mvsx option was used or NO_REGS. 31287 31288 When using any of the register constraints (`wa', `wd', `wf', 31289 `wg', `wh', `wi', `wj', `wk', `wl', `wm', `ws', `wt', `wu', 31290 `wv', `ww', or `wy') that take VSX registers, you must use 31291 `%x<n>' in the template so that the correct register is used. 31292 Otherwise the register number output in the assembly file 31293 will be incorrect if an Altivec register is an operand of a 31294 VSX instruction that expects VSX register numbering. 31295 31296 asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3)); 31297 31298 is correct, but: 31299 31300 asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3)); 31301 31302 is not correct. 31303 31304 `wd' 31305 VSX vector register to hold vector double data or NO_REGS. 31306 31307 `wf' 31308 VSX vector register to hold vector float data or NO_REGS. 31309 31310 `wg' 31311 If `-mmfpgpr' was used, a floating point register or NO_REGS. 31312 31313 `wh' 31314 Floating point register if direct moves are available, or 31315 NO_REGS. 31316 31317 `wi' 31318 FP or VSX register to hold 64-bit integers for VSX insns or 31319 NO_REGS. 31320 31321 `wj' 31322 FP or VSX register to hold 64-bit integers for direct moves 31323 or NO_REGS. 31324 31325 `wk' 31326 FP or VSX register to hold 64-bit doubles for direct moves or 31327 NO_REGS. 31328 31329 `wl' 31330 Floating point register if the LFIWAX instruction is enabled 31331 or NO_REGS. 31332 31333 `wm' 31334 VSX register if direct move instructions are enabled, or 31335 NO_REGS. 31336 31337 `wn' 31338 No register (NO_REGS). 31339 31340 `wr' 31341 General purpose register if 64-bit instructions are enabled 31342 or NO_REGS. 31343 31344 `ws' 31345 VSX vector register to hold scalar double values or NO_REGS. 31346 31347 `wt' 31348 VSX vector register to hold 128 bit integer or NO_REGS. 31349 31350 `wu' 31351 Altivec register to use for float/32-bit int loads/stores or 31352 NO_REGS. 31353 31354 `wv' 31355 Altivec register to use for double loads/stores or NO_REGS. 31356 31357 `ww' 31358 FP or VSX register to perform float operations under `-mvsx' 31359 or NO_REGS. 31360 31361 `wx' 31362 Floating point register if the STFIWX instruction is enabled 31363 or NO_REGS. 31364 31365 `wy' 31366 FP or VSX register to perform ISA 2.07 float ops or NO_REGS. 31367 31368 `wz' 31369 Floating point register if the LFIWZX instruction is enabled 31370 or NO_REGS. 31371 31372 `wD' 31373 Int constant that is the element number of the 64-bit scalar 31374 in a vector. 31375 31376 `wQ' 31377 A memory address that will work with the `lq' and `stq' 31378 instructions. 31379 31380 `h' 31381 `MQ', `CTR', or `LINK' register 31382 31383 `q' 31384 `MQ' register 31385 31386 `c' 31387 `CTR' register 31388 31389 `l' 31390 `LINK' register 31391 31392 `x' 31393 `CR' register (condition register) number 0 31394 31395 `y' 31396 `CR' register (condition register) 31397 31398 `z' 31399 `XER[CA]' carry bit (part of the XER register) 31400 31401 `I' 31402 Signed 16-bit constant 31403 31404 `J' 31405 Unsigned 16-bit constant shifted left 16 bits (use `L' 31406 instead for `SImode' constants) 31407 31408 `K' 31409 Unsigned 16-bit constant 31410 31411 `L' 31412 Signed 16-bit constant shifted left 16 bits 31413 31414 `M' 31415 Constant larger than 31 31416 31417 `N' 31418 Exact power of 2 31419 31420 `O' 31421 Zero 31422 31423 `P' 31424 Constant whose negation is a signed 16-bit constant 31425 31426 `G' 31427 Floating point constant that can be loaded into a register 31428 with one instruction per word 31429 31430 `H' 31431 Integer/Floating point constant that can be loaded into a 31432 register using three instructions 31433 31434 `m' 31435 Memory operand. Normally, `m' does not allow addresses that 31436 update the base register. If `<' or `>' constraint is also 31437 used, they are allowed and therefore on PowerPC targets in 31438 that case it is only safe to use `m<>' in an `asm' statement 31439 if that `asm' statement accesses the operand exactly once. 31440 The `asm' statement must also use `%U<OPNO>' as a placeholder 31441 for the "update" flag in the corresponding load or store 31442 instruction. For example: 31443 31444 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); 31445 31446 is correct but: 31447 31448 asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); 31449 31450 is not. 31451 31452 `es' 31453 A "stable" memory operand; that is, one which does not 31454 include any automodification of the base register. This used 31455 to be useful when `m' allowed automodification of the base 31456 register, but as those are now only allowed when `<' or `>' 31457 is used, `es' is basically the same as `m' without `<' and 31458 `>'. 31459 31460 `Q' 31461 Memory operand that is an offset from a register (it is 31462 usually better to use `m' or `es' in `asm' statements) 31463 31464 `Z' 31465 Memory operand that is an indexed or indirect from a register 31466 (it is usually better to use `m' or `es' in `asm' statements) 31467 31468 `R' 31469 AIX TOC entry 31470 31471 `a' 31472 Address operand that is an indexed or indirect from a 31473 register (`p' is preferable for `asm' statements) 31474 31475 `S' 31476 Constant suitable as a 64-bit mask operand 31477 31478 `T' 31479 Constant suitable as a 32-bit mask operand 31480 31481 `U' 31482 System V Release 4 small data area reference 31483 31484 `t' 31485 AND masks that can be performed by two rldic{l, r} 31486 instructions 31487 31488 `W' 31489 Vector constant that does not require memory 31490 31491 `j' 31492 Vector constant that is all zeros. 31493 31494 31495_RL78--`config/rl78/constraints.md'_ 31496 31497 `Int3' 31498 An integer constant in the range 1 ... 7. 31499 31500 `Int8' 31501 An integer constant in the range 0 ... 255. 31502 31503 `J' 31504 An integer constant in the range -255 ... 0 31505 31506 `K' 31507 The integer constant 1. 31508 31509 `L' 31510 The integer constant -1. 31511 31512 `M' 31513 The integer constant 0. 31514 31515 `N' 31516 The integer constant 2. 31517 31518 `O' 31519 The integer constant -2. 31520 31521 `P' 31522 An integer constant in the range 1 ... 15. 31523 31524 `Qbi' 31525 The built-in compare types-eq, ne, gtu, ltu, geu, and leu. 31526 31527 `Qsc' 31528 The synthetic compare types-gt, lt, ge, and le. 31529 31530 `Wab' 31531 A memory reference with an absolute address. 31532 31533 `Wbc' 31534 A memory reference using `BC' as a base register, with an 31535 optional offset. 31536 31537 `Wca' 31538 A memory reference using `AX', `BC', `DE', or `HL' for the 31539 address, for calls. 31540 31541 `Wcv' 31542 A memory reference using any 16-bit register pair for the 31543 address, for calls. 31544 31545 `Wd2' 31546 A memory reference using `DE' as a base register, with an 31547 optional offset. 31548 31549 `Wde' 31550 A memory reference using `DE' as a base register, without any 31551 offset. 31552 31553 `Wfr' 31554 Any memory reference to an address in the far address space. 31555 31556 `Wh1' 31557 A memory reference using `HL' as a base register, with an 31558 optional one-byte offset. 31559 31560 `Whb' 31561 A memory reference using `HL' as a base register, with `B' or 31562 `C' as the index register. 31563 31564 `Whl' 31565 A memory reference using `HL' as a base register, without any 31566 offset. 31567 31568 `Ws1' 31569 A memory reference using `SP' as a base register, with an 31570 optional one-byte offset. 31571 31572 `Y' 31573 Any memory reference to an address in the near address space. 31574 31575 `A' 31576 The `AX' register. 31577 31578 `B' 31579 The `BC' register. 31580 31581 `D' 31582 The `DE' register. 31583 31584 `R' 31585 `A' through `L' registers. 31586 31587 `S' 31588 The `SP' register. 31589 31590 `T' 31591 The `HL' register. 31592 31593 `Z08W' 31594 The 16-bit `R8' register. 31595 31596 `Z10W' 31597 The 16-bit `R10' register. 31598 31599 `Zint' 31600 The registers reserved for interrupts (`R24' to `R31'). 31601 31602 `a' 31603 The `A' register. 31604 31605 `b' 31606 The `B' register. 31607 31608 `c' 31609 The `C' register. 31610 31611 `d' 31612 The `D' register. 31613 31614 `e' 31615 The `E' register. 31616 31617 `h' 31618 The `H' register. 31619 31620 `l' 31621 The `L' register. 31622 31623 `v' 31624 The virtual registers. 31625 31626 `w' 31627 The `PSW' register. 31628 31629 `x' 31630 The `X' register. 31631 31632 31633_RX--`config/rx/constraints.md'_ 31634 31635 `Q' 31636 An address which does not involve register indirect 31637 addressing or pre/post increment/decrement addressing. 31638 31639 `Symbol' 31640 A symbol reference. 31641 31642 `Int08' 31643 A constant in the range -256 to 255, inclusive. 31644 31645 `Sint08' 31646 A constant in the range -128 to 127, inclusive. 31647 31648 `Sint16' 31649 A constant in the range -32768 to 32767, inclusive. 31650 31651 `Sint24' 31652 A constant in the range -8388608 to 8388607, inclusive. 31653 31654 `Uint04' 31655 A constant in the range 0 to 15, inclusive. 31656 31657 31658_S/390 and zSeries--`config/s390/s390.h'_ 31659 31660 `a' 31661 Address register (general purpose register except r0) 31662 31663 `c' 31664 Condition code register 31665 31666 `d' 31667 Data register (arbitrary general purpose register) 31668 31669 `f' 31670 Floating-point register 31671 31672 `I' 31673 Unsigned 8-bit constant (0-255) 31674 31675 `J' 31676 Unsigned 12-bit constant (0-4095) 31677 31678 `K' 31679 Signed 16-bit constant (-32768-32767) 31680 31681 `L' 31682 Value appropriate as displacement. 31683 `(0..4095)' 31684 for short displacement 31685 31686 `(-524288..524287)' 31687 for long displacement 31688 31689 `M' 31690 Constant integer with a value of 0x7fffffff. 31691 31692 `N' 31693 Multiple letter constraint followed by 4 parameter letters. 31694 `0..9:' 31695 number of the part counting from most to least 31696 significant 31697 31698 `H,Q:' 31699 mode of the part 31700 31701 `D,S,H:' 31702 mode of the containing operand 31703 31704 `0,F:' 31705 value of the other parts (F--all bits set) 31706 The constraint matches if the specified part of a constant 31707 has a value different from its other parts. 31708 31709 `Q' 31710 Memory reference without index register and with short 31711 displacement. 31712 31713 `R' 31714 Memory reference with index register and short displacement. 31715 31716 `S' 31717 Memory reference without index register but with long 31718 displacement. 31719 31720 `T' 31721 Memory reference with index register and long displacement. 31722 31723 `U' 31724 Pointer with short displacement. 31725 31726 `W' 31727 Pointer with long displacement. 31728 31729 `Y' 31730 Shift count operand. 31731 31732 31733_SPARC--`config/sparc/sparc.h'_ 31734 31735 `f' 31736 Floating-point register on the SPARC-V8 architecture and 31737 lower floating-point register on the SPARC-V9 architecture. 31738 31739 `e' 31740 Floating-point register. It is equivalent to `f' on the 31741 SPARC-V8 architecture and contains both lower and upper 31742 floating-point registers on the SPARC-V9 architecture. 31743 31744 `c' 31745 Floating-point condition code register. 31746 31747 `d' 31748 Lower floating-point register. It is only valid on the 31749 SPARC-V9 architecture when the Visual Instruction Set is 31750 available. 31751 31752 `b' 31753 Floating-point register. It is only valid on the SPARC-V9 31754 architecture when the Visual Instruction Set is available. 31755 31756 `h' 31757 64-bit global or out register for the SPARC-V8+ architecture. 31758 31759 `C' 31760 The constant all-ones, for floating-point. 31761 31762 `A' 31763 Signed 5-bit constant 31764 31765 `D' 31766 A vector constant 31767 31768 `I' 31769 Signed 13-bit constant 31770 31771 `J' 31772 Zero 31773 31774 `K' 31775 32-bit constant with the low 12 bits clear (a constant that 31776 can be loaded with the `sethi' instruction) 31777 31778 `L' 31779 A constant in the range supported by `movcc' instructions 31780 (11-bit signed immediate) 31781 31782 `M' 31783 A constant in the range supported by `movrcc' instructions 31784 (10-bit signed immediate) 31785 31786 `N' 31787 Same as `K', except that it verifies that bits that are not 31788 in the lower 32-bit range are all zero. Must be used instead 31789 of `K' for modes wider than `SImode' 31790 31791 `O' 31792 The constant 4096 31793 31794 `G' 31795 Floating-point zero 31796 31797 `H' 31798 Signed 13-bit constant, sign-extended to 32 or 64 bits 31799 31800 `P' 31801 The constant -1 31802 31803 `Q' 31804 Floating-point constant whose integral representation can be 31805 moved into an integer register using a single sethi 31806 instruction 31807 31808 `R' 31809 Floating-point constant whose integral representation can be 31810 moved into an integer register using a single mov instruction 31811 31812 `S' 31813 Floating-point constant whose integral representation can be 31814 moved into an integer register using a high/lo_sum 31815 instruction sequence 31816 31817 `T' 31818 Memory address aligned to an 8-byte boundary 31819 31820 `U' 31821 Even register 31822 31823 `W' 31824 Memory address for `e' constraint registers 31825 31826 `w' 31827 Memory address with only a base register 31828 31829 `Y' 31830 Vector zero 31831 31832 31833_SPU--`config/spu/spu.h'_ 31834 31835 `a' 31836 An immediate which can be loaded with the il/ila/ilh/ilhu 31837 instructions. const_int is treated as a 64 bit value. 31838 31839 `c' 31840 An immediate for and/xor/or instructions. const_int is 31841 treated as a 64 bit value. 31842 31843 `d' 31844 An immediate for the `iohl' instruction. const_int is 31845 treated as a 64 bit value. 31846 31847 `f' 31848 An immediate which can be loaded with `fsmbi'. 31849 31850 `A' 31851 An immediate which can be loaded with the il/ila/ilh/ilhu 31852 instructions. const_int is treated as a 32 bit value. 31853 31854 `B' 31855 An immediate for most arithmetic instructions. const_int is 31856 treated as a 32 bit value. 31857 31858 `C' 31859 An immediate for and/xor/or instructions. const_int is 31860 treated as a 32 bit value. 31861 31862 `D' 31863 An immediate for the `iohl' instruction. const_int is 31864 treated as a 32 bit value. 31865 31866 `I' 31867 A constant in the range [-64, 63] for shift/rotate 31868 instructions. 31869 31870 `J' 31871 An unsigned 7-bit constant for conversion/nop/channel 31872 instructions. 31873 31874 `K' 31875 A signed 10-bit constant for most arithmetic instructions. 31876 31877 `M' 31878 A signed 16 bit immediate for `stop'. 31879 31880 `N' 31881 An unsigned 16-bit constant for `iohl' and `fsmbi'. 31882 31883 `O' 31884 An unsigned 7-bit constant whose 3 least significant bits are 31885 0. 31886 31887 `P' 31888 An unsigned 3-bit constant for 16-byte rotates and shifts 31889 31890 `R' 31891 Call operand, reg, for indirect calls 31892 31893 `S' 31894 Call operand, symbol, for relative calls. 31895 31896 `T' 31897 Call operand, const_int, for absolute calls. 31898 31899 `U' 31900 An immediate which can be loaded with the il/ila/ilh/ilhu 31901 instructions. const_int is sign extended to 128 bit. 31902 31903 `W' 31904 An immediate for shift and rotate instructions. const_int is 31905 treated as a 32 bit value. 31906 31907 `Y' 31908 An immediate for and/xor/or instructions. const_int is sign 31909 extended as a 128 bit. 31910 31911 `Z' 31912 An immediate for the `iohl' instruction. const_int is sign 31913 extended to 128 bit. 31914 31915 31916_TI C6X family--`config/c6x/constraints.md'_ 31917 31918 `a' 31919 Register file A (A0-A31). 31920 31921 `b' 31922 Register file B (B0-B31). 31923 31924 `A' 31925 Predicate registers in register file A (A0-A2 on C64X and 31926 higher, A1 and A2 otherwise). 31927 31928 `B' 31929 Predicate registers in register file B (B0-B2). 31930 31931 `C' 31932 A call-used register in register file B (B0-B9, B16-B31). 31933 31934 `Da' 31935 Register file A, excluding predicate registers (A3-A31, plus 31936 A0 if not C64X or higher). 31937 31938 `Db' 31939 Register file B, excluding predicate registers (B3-B31). 31940 31941 `Iu4' 31942 Integer constant in the range 0 ... 15. 31943 31944 `Iu5' 31945 Integer constant in the range 0 ... 31. 31946 31947 `In5' 31948 Integer constant in the range -31 ... 0. 31949 31950 `Is5' 31951 Integer constant in the range -16 ... 15. 31952 31953 `I5x' 31954 Integer constant that can be the operand of an ADDA or a SUBA 31955 insn. 31956 31957 `IuB' 31958 Integer constant in the range 0 ... 65535. 31959 31960 `IsB' 31961 Integer constant in the range -32768 ... 32767. 31962 31963 `IsC' 31964 Integer constant in the range -2^20 ... 2^20 - 1. 31965 31966 `Jc' 31967 Integer constant that is a valid mask for the clr instruction. 31968 31969 `Js' 31970 Integer constant that is a valid mask for the set instruction. 31971 31972 `Q' 31973 Memory location with A base register. 31974 31975 `R' 31976 Memory location with B base register. 31977 31978 `Z' 31979 Register B14 (aka DP). 31980 31981 31982_TILE-Gx--`config/tilegx/constraints.md'_ 31983 31984 `R00' 31985 `R01' 31986 `R02' 31987 `R03' 31988 `R04' 31989 `R05' 31990 `R06' 31991 `R07' 31992 `R08' 31993 `R09' 31994 `R10' 31995 Each of these represents a register constraint for an 31996 individual register, from r0 to r10. 31997 31998 `I' 31999 Signed 8-bit integer constant. 32000 32001 `J' 32002 Signed 16-bit integer constant. 32003 32004 `K' 32005 Unsigned 16-bit integer constant. 32006 32007 `L' 32008 Integer constant that fits in one signed byte when 32009 incremented by one (-129 ... 126). 32010 32011 `m' 32012 Memory operand. If used together with `<' or `>', the 32013 operand can have postincrement which requires printing with 32014 `%In' and `%in' on TILE-Gx. For example: 32015 32016 asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val)); 32017 32018 `M' 32019 A bit mask suitable for the BFINS instruction. 32020 32021 `N' 32022 Integer constant that is a byte tiled out eight times. 32023 32024 `O' 32025 The integer zero constant. 32026 32027 `P' 32028 Integer constant that is a sign-extended byte tiled out as 32029 four shorts. 32030 32031 `Q' 32032 Integer constant that fits in one signed byte when incremented 32033 (-129 ... 126), but excluding -1. 32034 32035 `S' 32036 Integer constant that has all 1 bits consecutive and starting 32037 at bit 0. 32038 32039 `T' 32040 A 16-bit fragment of a got, tls, or pc-relative reference. 32041 32042 `U' 32043 Memory operand except postincrement. This is roughly the 32044 same as `m' when not used together with `<' or `>'. 32045 32046 `W' 32047 An 8-element vector constant with identical elements. 32048 32049 `Y' 32050 A 4-element vector constant with identical elements. 32051 32052 `Z0' 32053 The integer constant 0xffffffff. 32054 32055 `Z1' 32056 The integer constant 0xffffffff00000000. 32057 32058 32059_TILEPro--`config/tilepro/constraints.md'_ 32060 32061 `R00' 32062 `R01' 32063 `R02' 32064 `R03' 32065 `R04' 32066 `R05' 32067 `R06' 32068 `R07' 32069 `R08' 32070 `R09' 32071 `R10' 32072 Each of these represents a register constraint for an 32073 individual register, from r0 to r10. 32074 32075 `I' 32076 Signed 8-bit integer constant. 32077 32078 `J' 32079 Signed 16-bit integer constant. 32080 32081 `K' 32082 Nonzero integer constant with low 16 bits zero. 32083 32084 `L' 32085 Integer constant that fits in one signed byte when 32086 incremented by one (-129 ... 126). 32087 32088 `m' 32089 Memory operand. If used together with `<' or `>', the 32090 operand can have postincrement which requires printing with 32091 `%In' and `%in' on TILEPro. For example: 32092 32093 asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val)); 32094 32095 `M' 32096 A bit mask suitable for the MM instruction. 32097 32098 `N' 32099 Integer constant that is a byte tiled out four times. 32100 32101 `O' 32102 The integer zero constant. 32103 32104 `P' 32105 Integer constant that is a sign-extended byte tiled out as 32106 two shorts. 32107 32108 `Q' 32109 Integer constant that fits in one signed byte when incremented 32110 (-129 ... 126), but excluding -1. 32111 32112 `T' 32113 A symbolic operand, or a 16-bit fragment of a got, tls, or 32114 pc-relative reference. 32115 32116 `U' 32117 Memory operand except postincrement. This is roughly the 32118 same as `m' when not used together with `<' or `>'. 32119 32120 `W' 32121 A 4-element vector constant with identical elements. 32122 32123 `Y' 32124 A 2-element vector constant with identical elements. 32125 32126 32127_Visium--`config/visium/constraints.md'_ 32128 32129 `b' 32130 EAM register `mdb' 32131 32132 `c' 32133 EAM register `mdc' 32134 32135 `f' 32136 Floating point register 32137 32138 `l' 32139 General register, but not `r29', `r30' and `r31' 32140 32141 `t' 32142 Register `r1' 32143 32144 `u' 32145 Register `r2' 32146 32147 `v' 32148 Register `r3' 32149 32150 `G' 32151 Floating-point constant 0.0 32152 32153 `J' 32154 Integer constant in the range 0 .. 65535 (16-bit immediate) 32155 32156 `K' 32157 Integer constant in the range 1 .. 31 (5-bit immediate) 32158 32159 `L' 32160 Integer constant in the range -65535 .. -1 (16-bit negative 32161 immediate) 32162 32163 `M' 32164 Integer constant -1 32165 32166 `O' 32167 Integer constant 0 32168 32169 `P' 32170 Integer constant 32 32171 32172_x86 family--`config/i386/constraints.md'_ 32173 32174 `R' 32175 Legacy register--the eight integer registers available on all 32176 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 32177 32178 `q' 32179 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 32180 `c', and `d'; in 64-bit mode, any integer register. 32181 32182 `Q' 32183 Any register accessible as `Rh': `a', `b', `c', and `d'. 32184 32185 `a' 32186 The `a' register. 32187 32188 `b' 32189 The `b' register. 32190 32191 `c' 32192 The `c' register. 32193 32194 `d' 32195 The `d' register. 32196 32197 `S' 32198 The `si' register. 32199 32200 `D' 32201 The `di' register. 32202 32203 `A' 32204 The `a' and `d' registers. This class is used for 32205 instructions that return double word results in the `ax:dx' 32206 register pair. Single word values will be allocated either 32207 in `ax' or `dx'. For example on i386 the following 32208 implements `rdtsc': 32209 32210 unsigned long long rdtsc (void) 32211 { 32212 unsigned long long tick; 32213 __asm__ __volatile__("rdtsc":"=A"(tick)); 32214 return tick; 32215 } 32216 32217 This is not correct on x86-64 as it would allocate tick in 32218 either `ax' or `dx'. You have to use the following variant 32219 instead: 32220 32221 unsigned long long rdtsc (void) 32222 { 32223 unsigned int tickl, tickh; 32224 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); 32225 return ((unsigned long long)tickh << 32)|tickl; 32226 } 32227 32228 `f' 32229 Any 80387 floating-point (stack) register. 32230 32231 `t' 32232 Top of 80387 floating-point stack (`%st(0)'). 32233 32234 `u' 32235 Second from top of 80387 floating-point stack (`%st(1)'). 32236 32237 `y' 32238 Any MMX register. 32239 32240 `x' 32241 Any SSE register. 32242 32243 `Yz' 32244 First SSE register (`%xmm0'). 32245 32246 `I' 32247 Integer constant in the range 0 ... 31, for 32-bit shifts. 32248 32249 `J' 32250 Integer constant in the range 0 ... 63, for 64-bit shifts. 32251 32252 `K' 32253 Signed 8-bit integer constant. 32254 32255 `L' 32256 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 32257 32258 `M' 32259 0, 1, 2, or 3 (shifts for the `lea' instruction). 32260 32261 `N' 32262 Unsigned 8-bit integer constant (for `in' and `out' 32263 instructions). 32264 32265 `G' 32266 Standard 80387 floating point constant. 32267 32268 `C' 32269 SSE constant zero operand. 32270 32271 `e' 32272 32-bit signed integer constant, or a symbolic reference known 32273 to fit that range (for immediate operands in sign-extending 32274 x86-64 instructions). 32275 32276 `Z' 32277 32-bit unsigned integer constant, or a symbolic reference 32278 known to fit that range (for immediate operands in 32279 zero-extending x86-64 instructions). 32280 32281 32282_Xstormy16--`config/stormy16/stormy16.h'_ 32283 32284 `a' 32285 Register r0. 32286 32287 `b' 32288 Register r1. 32289 32290 `c' 32291 Register r2. 32292 32293 `d' 32294 Register r8. 32295 32296 `e' 32297 Registers r0 through r7. 32298 32299 `t' 32300 Registers r0 and r1. 32301 32302 `y' 32303 The carry register. 32304 32305 `z' 32306 Registers r8 and r9. 32307 32308 `I' 32309 A constant between 0 and 3 inclusive. 32310 32311 `J' 32312 A constant that has exactly one bit set. 32313 32314 `K' 32315 A constant that has exactly one bit clear. 32316 32317 `L' 32318 A constant between 0 and 255 inclusive. 32319 32320 `M' 32321 A constant between -255 and 0 inclusive. 32322 32323 `N' 32324 A constant between -3 and 0 inclusive. 32325 32326 `O' 32327 A constant between 1 and 4 inclusive. 32328 32329 `P' 32330 A constant between -4 and -1 inclusive. 32331 32332 `Q' 32333 A memory reference that is a stack push. 32334 32335 `R' 32336 A memory reference that is a stack pop. 32337 32338 `S' 32339 A memory reference that refers to a constant address of known 32340 value. 32341 32342 `T' 32343 The register indicated by Rx (not implemented yet). 32344 32345 `U' 32346 A constant that is not between 2 and 15 inclusive. 32347 32348 `Z' 32349 The constant 0. 32350 32351 32352_Xtensa--`config/xtensa/constraints.md'_ 32353 32354 `a' 32355 General-purpose 32-bit register 32356 32357 `b' 32358 One-bit boolean register 32359 32360 `A' 32361 MAC16 40-bit accumulator register 32362 32363 `I' 32364 Signed 12-bit integer constant, for use in MOVI instructions 32365 32366 `J' 32367 Signed 8-bit integer constant, for use in ADDI instructions 32368 32369 `K' 32370 Integer constant valid for BccI instructions 32371 32372 `L' 32373 Unsigned constant valid for BccUI instructions 32374 32375 32376 32377 32378File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: Using Assembly Language with C 32379 323806.43.4 Controlling Names Used in Assembler Code 32381----------------------------------------------- 32382 32383You can specify the name to be used in the assembler code for a C 32384function or variable by writing the `asm' (or `__asm__') keyword after 32385the declarator as follows: 32386 32387 int foo asm ("myfoo") = 2; 32388 32389This specifies that the name to be used for the variable `foo' in the 32390assembler code should be `myfoo' rather than the usual `_foo'. 32391 32392 On systems where an underscore is normally prepended to the name of a C 32393function or variable, this feature allows you to define names for the 32394linker that do not start with an underscore. 32395 32396 It does not make sense to use this feature with a non-static local 32397variable since such variables do not have assembler names. If you are 32398trying to put the variable in a particular register, see *Note Explicit 32399Reg Vars::. GCC presently accepts such code with a warning, but will 32400probably be changed to issue an error, rather than a warning, in the 32401future. 32402 32403 You cannot use `asm' in this way in a function _definition_; but you 32404can get the same effect by writing a declaration for the function 32405before its definition and putting `asm' there, like this: 32406 32407 extern func () asm ("FUNC"); 32408 32409 func (x, y) 32410 int x, y; 32411 /* ... */ 32412 32413 It is up to you to make sure that the assembler names you choose do not 32414conflict with any other assembler symbols. Also, you must not use a 32415register name; that would produce completely invalid assembler code. 32416GCC does not as yet have the ability to store static variables in 32417registers. Perhaps that will be added. 32418 32419 32420File: gcc.info, Node: Explicit Reg Vars, Next: Size of an asm, Prev: Asm Labels, Up: Using Assembly Language with C 32421 324226.43.5 Variables in Specified Registers 32423--------------------------------------- 32424 32425GNU C allows you to put a few global variables into specified hardware 32426registers. You can also specify the register in which an ordinary 32427register variable should be allocated. 32428 32429 * Global register variables reserve registers throughout the program. 32430 This may be useful in programs such as programming language 32431 interpreters that have a couple of global variables that are 32432 accessed very often. 32433 32434 * Local register variables in specific registers do not reserve the 32435 registers, except at the point where they are used as input or 32436 output operands in an `asm' statement and the `asm' statement 32437 itself is not deleted. The compiler's data flow analysis is 32438 capable of determining where the specified registers contain live 32439 values, and where they are available for other uses. Stores into 32440 local register variables may be deleted when they appear to be 32441 dead according to dataflow analysis. References to local register 32442 variables may be deleted or moved or simplified. 32443 32444 These local variables are sometimes convenient for use with the 32445 extended `asm' feature (*note Extended Asm::), if you want to 32446 write one output of the assembler instruction directly into a 32447 particular register. (This works provided the register you 32448 specify fits the constraints specified for that operand in the 32449 `asm'.) 32450 32451* Menu: 32452 32453* Global Reg Vars:: 32454* Local Reg Vars:: 32455 32456 32457File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 32458 324596.43.5.1 Defining Global Register Variables 32460........................................... 32461 32462You can define a global register variable in GNU C like this: 32463 32464 register int *foo asm ("a5"); 32465 32466Here `a5' is the name of the register that should be used. Choose a 32467register that is normally saved and restored by function calls on your 32468machine, so that library routines will not clobber it. 32469 32470 Naturally the register name is CPU-dependent, so you need to 32471conditionalize your program according to CPU type. The register `a5' 32472is a good choice on a 68000 for a variable of pointer type. On 32473machines with register windows, be sure to choose a "global" register 32474that is not affected magically by the function call mechanism. 32475 32476 In addition, different operating systems on the same CPU may differ in 32477how they name the registers; then you need additional conditionals. For 32478example, some 68000 operating systems call this register `%a5'. 32479 32480 Eventually there may be a way of asking the compiler to choose a 32481register automatically, but first we need to figure out how it should 32482choose and how to enable you to guide the choice. No solution is 32483evident. 32484 32485 Defining a global register variable in a certain register reserves that 32486register entirely for this use, at least within the current compilation. 32487The register is not allocated for any other purpose in the functions in 32488the current compilation, and is not saved and restored by these 32489functions. Stores into this register are never deleted even if they 32490appear to be dead, but references may be deleted or moved or simplified. 32491 32492 It is not safe to access the global register variables from signal 32493handlers, or from more than one thread of control, because the system 32494library routines may temporarily use the register for other things 32495(unless you recompile them specially for the task at hand). 32496 32497 It is not safe for one function that uses a global register variable to 32498call another such function `foo' by way of a third function `lose' that 32499is compiled without knowledge of this variable (i.e. in a different 32500source file in which the variable isn't declared). This is because 32501`lose' might save the register and put some other value there. For 32502example, you can't expect a global register variable to be available in 32503the comparison-function that you pass to `qsort', since `qsort' might 32504have put something else in that register. (If you are prepared to 32505recompile `qsort' with the same global register variable, you can solve 32506this problem.) 32507 32508 If you want to recompile `qsort' or other source files that do not 32509actually use your global register variable, so that they do not use that 32510register for any other purpose, then it suffices to specify the compiler 32511option `-ffixed-REG'. You need not actually add a global register 32512declaration to their source code. 32513 32514 A function that can alter the value of a global register variable 32515cannot safely be called from a function compiled without this variable, 32516because it could clobber the value the caller expects to find there on 32517return. Therefore, the function that is the entry point into the part 32518of the program that uses the global register variable must explicitly 32519save and restore the value that belongs to its caller. 32520 32521 On most machines, `longjmp' restores to each global register variable 32522the value it had at the time of the `setjmp'. On some machines, 32523however, `longjmp' does not change the value of global register 32524variables. To be portable, the function that called `setjmp' should 32525make other arrangements to save the values of the global register 32526variables, and to restore them in a `longjmp'. This way, the same 32527thing happens regardless of what `longjmp' does. 32528 32529 All global register variable declarations must precede all function 32530definitions. If such a declaration could appear after function 32531definitions, the declaration would be too late to prevent the register 32532from being used for other purposes in the preceding functions. 32533 32534 Global register variables may not have initial values, because an 32535executable file has no means to supply initial contents for a register. 32536 32537 On the SPARC, there are reports that g3 ... g7 are suitable registers, 32538but certain library functions, such as `getwd', as well as the 32539subroutines for division and remainder, modify g3 and g4. g1 and g2 32540are local temporaries. 32541 32542 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 32543course, it does not do to use more than a few of those. 32544 32545 32546File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 32547 325486.43.5.2 Specifying Registers for Local Variables 32549................................................. 32550 32551You can define a local register variable with a specified register like 32552this: 32553 32554 register int *foo asm ("a5"); 32555 32556Here `a5' is the name of the register that should be used. Note that 32557this is the same syntax used for defining global register variables, 32558but for a local variable it appears within a function. 32559 32560 Naturally the register name is CPU-dependent, but this is not a 32561problem, since specific registers are most often useful with explicit 32562assembler instructions (*note Extended Asm::). Both of these things 32563generally require that you conditionalize your program according to CPU 32564type. 32565 32566 In addition, operating systems on one type of CPU may differ in how 32567they name the registers; then you need additional conditionals. For 32568example, some 68000 operating systems call this register `%a5'. 32569 32570 Defining such a register variable does not reserve the register; it 32571remains available for other uses in places where flow control determines 32572the variable's value is not live. 32573 32574 This option does not guarantee that GCC generates code that has this 32575variable in the register you specify at all times. You may not code an 32576explicit reference to this register in the assembler instruction 32577template part of an `asm' statement and assume it always refers to this 32578variable. However, using the variable as an input or output operand to 32579the `asm' guarantees that the specified register is used for that 32580operand. *Note Extended Asm::, for more information. 32581 32582 Stores into local register variables may be deleted when they appear 32583to be dead according to dataflow analysis. References to local 32584register variables may be deleted or moved or simplified. 32585 32586 As with global register variables, it is recommended that you choose a 32587register that is normally saved and restored by function calls on your 32588machine, so that library routines will not clobber it. 32589 32590 Sometimes when writing inline `asm' code, you need to make an operand 32591be a specific register, but there's no matching constraint letter for 32592that register. To force the operand into that register, create a local 32593variable and specify the register in the variable's declaration. Then 32594use the local variable for the asm operand and specify any constraint 32595letter that matches the register: 32596 32597 register int *p1 asm ("r0") = ...; 32598 register int *p2 asm ("r1") = ...; 32599 register int *result asm ("r0"); 32600 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 32601 32602 _Warning:_ In the above example, be aware that a register (for example 32603r0) can be call-clobbered by subsequent code, including function calls 32604and library calls for arithmetic operators on other variables (for 32605example the initialization of p2). In this case, use temporary 32606variables for expressions between the register assignments: 32607 32608 int t1 = ...; 32609 register int *p1 asm ("r0") = ...; 32610 register int *p2 asm ("r1") = t1; 32611 register int *result asm ("r0"); 32612 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 32613 32614 32615File: gcc.info, Node: Size of an asm, Prev: Explicit Reg Vars, Up: Using Assembly Language with C 32616 326176.43.6 Size of an `asm' 32618----------------------- 32619 32620Some targets require that GCC track the size of each instruction used 32621in order to generate correct code. Because the final length of the 32622code produced by an `asm' statement is only known by the assembler, GCC 32623must make an estimate as to how big it will be. It does this by 32624counting the number of instructions in the pattern of the `asm' and 32625multiplying that by the length of the longest instruction supported by 32626that processor. (When working out the number of instructions, it 32627assumes that any occurrence of a newline or of whatever statement 32628separator character is supported by the assembler - typically `;' -- 32629indicates the end of an instruction.) 32630 32631 Normally, GCC's estimate is adequate to ensure that correct code is 32632generated, but it is possible to confuse the compiler if you use pseudo 32633instructions or assembler macros that expand into multiple real 32634instructions, or if you use assembler directives that expand to more 32635space in the object file than is needed for a single instruction. If 32636this happens then the assembler may produce a diagnostic saying that a 32637label is unreachable. 32638 32639 32640File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Using Assembly Language with C, Up: C Extensions 32641 326426.44 Alternate Keywords 32643======================= 32644 32645`-ansi' and the various `-std' options disable certain keywords. This 32646causes trouble when you want to use GNU C extensions, or a 32647general-purpose header file that should be usable by all programs, 32648including ISO C programs. The keywords `asm', `typeof' and `inline' 32649are not available in programs compiled with `-ansi' or `-std' (although 32650`inline' can be used in a program compiled with `-std=c99' or 32651`-std=c11'). The ISO C99 keyword `restrict' is only available when 32652`-std=gnu99' (which will eventually be the default) or `-std=c99' (or 32653the equivalent `-std=iso9899:1999'), or an option for a later standard 32654version, is used. 32655 32656 The way to solve these problems is to put `__' at the beginning and 32657end of each problematical keyword. For example, use `__asm__' instead 32658of `asm', and `__inline__' instead of `inline'. 32659 32660 Other C compilers won't accept these alternative keywords; if you want 32661to compile with another compiler, you can define the alternate keywords 32662as macros to replace them with the customary keywords. It looks like 32663this: 32664 32665 #ifndef __GNUC__ 32666 #define __asm__ asm 32667 #endif 32668 32669 `-pedantic' and other options cause warnings for many GNU C extensions. 32670You can prevent such warnings within one expression by writing 32671`__extension__' before the expression. `__extension__' has no effect 32672aside from this. 32673 32674 32675File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 32676 326776.45 Incomplete `enum' Types 32678============================ 32679 32680You can define an `enum' tag without specifying its possible values. 32681This results in an incomplete type, much like what you get if you write 32682`struct foo' without describing the elements. A later declaration that 32683does specify the possible values completes the type. 32684 32685 You can't allocate variables or storage using the type while it is 32686incomplete. However, you can work with pointers to that type. 32687 32688 This extension may not be very useful, but it makes the handling of 32689`enum' more consistent with the way `struct' and `union' are handled. 32690 32691 This extension is not supported by GNU C++. 32692 32693 32694File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 32695 326966.46 Function Names as Strings 32697============================== 32698 32699GCC provides three magic variables that hold the name of the current 32700function, as a string. The first of these is `__func__', which is part 32701of the C99 standard: 32702 32703 The identifier `__func__' is implicitly declared by the translator as 32704if, immediately following the opening brace of each function 32705definition, the declaration 32706 32707 static const char __func__[] = "function-name"; 32708 32709appeared, where function-name is the name of the lexically-enclosing 32710function. This name is the unadorned name of the function. 32711 32712 `__FUNCTION__' is another name for `__func__', provided for backward 32713compatibility with old versions of GCC. 32714 32715 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 32716However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 32717the function as well as its bare name. For example, this program: 32718 32719 extern "C" { 32720 extern int printf (char *, ...); 32721 } 32722 32723 class a { 32724 public: 32725 void sub (int i) 32726 { 32727 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 32728 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 32729 } 32730 }; 32731 32732 int 32733 main (void) 32734 { 32735 a ax; 32736 ax.sub (0); 32737 return 0; 32738 } 32739 32740gives this output: 32741 32742 __FUNCTION__ = sub 32743 __PRETTY_FUNCTION__ = void a::sub(int) 32744 32745 These identifiers are variables, not preprocessor macros, and may not 32746be used to initialize `char' arrays or be concatenated with other string 32747literals. 32748 32749 32750File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 32751 327526.47 Getting the Return or Frame Address of a Function 32753====================================================== 32754 32755These functions may be used to get information about the callers of a 32756function. 32757 32758 -- Built-in Function: void * __builtin_return_address (unsigned int 32759 LEVEL) 32760 This function returns the return address of the current function, 32761 or of one of its callers. The LEVEL argument is number of frames 32762 to scan up the call stack. A value of `0' yields the return 32763 address of the current function, a value of `1' yields the return 32764 address of the caller of the current function, and so forth. When 32765 inlining the expected behavior is that the function returns the 32766 address of the function that is returned to. To work around this 32767 behavior use the `noinline' function attribute. 32768 32769 The LEVEL argument must be a constant integer. 32770 32771 On some machines it may be impossible to determine the return 32772 address of any function other than the current one; in such cases, 32773 or when the top of the stack has been reached, this function 32774 returns `0' or a random value. In addition, 32775 `__builtin_frame_address' may be used to determine if the top of 32776 the stack has been reached. 32777 32778 Additional post-processing of the returned value may be needed, see 32779 `__builtin_extract_return_addr'. 32780 32781 This function should only be used with a nonzero argument for 32782 debugging purposes. 32783 32784 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR) 32785 The address as returned by `__builtin_return_address' may have to 32786 be fed through this function to get the actual encoded address. 32787 For example, on the 31-bit S/390 platform the highest bit has to 32788 be masked out, or on SPARC platforms an offset has to be added for 32789 the true next instruction to be executed. 32790 32791 If no fixup is needed, this function simply passes through ADDR. 32792 32793 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR) 32794 This function does the reverse of `__builtin_extract_return_addr'. 32795 32796 -- Built-in Function: void * __builtin_frame_address (unsigned int 32797 LEVEL) 32798 This function is similar to `__builtin_return_address', but it 32799 returns the address of the function frame rather than the return 32800 address of the function. Calling `__builtin_frame_address' with a 32801 value of `0' yields the frame address of the current function, a 32802 value of `1' yields the frame address of the caller of the current 32803 function, and so forth. 32804 32805 The frame is the area on the stack that holds local variables and 32806 saved registers. The frame address is normally the address of the 32807 first word pushed on to the stack by the function. However, the 32808 exact definition depends upon the processor and the calling 32809 convention. If the processor has a dedicated frame pointer 32810 register, and the function has a frame, then 32811 `__builtin_frame_address' returns the value of the frame pointer 32812 register. 32813 32814 On some machines it may be impossible to determine the frame 32815 address of any function other than the current one; in such cases, 32816 or when the top of the stack has been reached, this function 32817 returns `0' if the first frame pointer is properly initialized by 32818 the startup code. 32819 32820 This function should only be used with a nonzero argument for 32821 debugging purposes. 32822 32823 32824File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 32825 328266.48 Using Vector Instructions through Built-in Functions 32827========================================================= 32828 32829On some targets, the instruction set contains SIMD vector instructions 32830which operate on multiple values contained in one large register at the 32831same time. For example, on the x86 the MMX, 3DNow! and SSE extensions 32832can be used this way. 32833 32834 The first step in using these extensions is to provide the necessary 32835data types. This should be done using an appropriate `typedef': 32836 32837 typedef int v4si __attribute__ ((vector_size (16))); 32838 32839The `int' type specifies the base type, while the attribute specifies 32840the vector size for the variable, measured in bytes. For example, the 32841declaration above causes the compiler to set the mode for the `v4si' 32842type to be 16 bytes wide and divided into `int' sized units. For a 3284332-bit `int' this means a vector of 4 units of 4 bytes, and the 32844corresponding mode of `foo' is V4SI. 32845 32846 The `vector_size' attribute is only applicable to integral and float 32847scalars, although arrays, pointers, and function return values are 32848allowed in conjunction with this construct. Only sizes that are a power 32849of two are currently allowed. 32850 32851 All the basic integer types can be used as base types, both as signed 32852and as unsigned: `char', `short', `int', `long', `long long'. In 32853addition, `float' and `double' can be used to build floating-point 32854vector types. 32855 32856 Specifying a combination that is not valid for the current architecture 32857causes GCC to synthesize the instructions using a narrower mode. For 32858example, if you specify a variable of type `V4SI' and your architecture 32859does not allow for this specific SIMD type, GCC produces code that uses 328604 `SIs'. 32861 32862 The types defined in this manner can be used with a subset of normal C 32863operations. Currently, GCC allows using the following operators on 32864these types: `+, -, *, /, unary minus, ^, |, &, ~, %'. 32865 32866 The operations behave like C++ `valarrays'. Addition is defined as 32867the addition of the corresponding elements of the operands. For 32868example, in the code below, each of the 4 elements in A is added to the 32869corresponding 4 elements in B and the resulting vector is stored in C. 32870 32871 typedef int v4si __attribute__ ((vector_size (16))); 32872 32873 v4si a, b, c; 32874 32875 c = a + b; 32876 32877 Subtraction, multiplication, division, and the logical operations 32878operate in a similar manner. Likewise, the result of using the unary 32879minus or complement operators on a vector type is a vector whose 32880elements are the negative or complemented values of the corresponding 32881elements in the operand. 32882 32883 It is possible to use shifting operators `<<', `>>' on integer-type 32884vectors. The operation is defined as following: `{a0, a1, ..., an} >> 32885{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector 32886operands must have the same number of elements. 32887 32888 For convenience, it is allowed to use a binary vector operation where 32889one operand is a scalar. In that case the compiler transforms the 32890scalar operand into a vector where each element is the scalar from the 32891operation. The transformation happens only if the scalar could be 32892safely converted to the vector-element type. Consider the following 32893code. 32894 32895 typedef int v4si __attribute__ ((vector_size (16))); 32896 32897 v4si a, b, c; 32898 long l; 32899 32900 a = b + 1; /* a = b + {1,1,1,1}; */ 32901 a = 2 * b; /* a = {2,2,2,2} * b; */ 32902 32903 a = l + a; /* Error, cannot convert long to int. */ 32904 32905 Vectors can be subscripted as if the vector were an array with the 32906same number of elements and base type. Out of bound accesses invoke 32907undefined behavior at run time. Warnings for out of bound accesses for 32908vector subscription can be enabled with `-Warray-bounds'. 32909 32910 Vector comparison is supported with standard comparison operators: 32911`==, !=, <, <=, >, >='. Comparison operands can be vector expressions 32912of integer-type or real-type. Comparison between integer-type vectors 32913and real-type vectors are not supported. The result of the comparison 32914is a vector of the same width and number of elements as the comparison 32915operands with a signed integral element type. 32916 32917 Vectors are compared element-wise producing 0 when comparison is false 32918and -1 (constant of the appropriate type where all bits are set) 32919otherwise. Consider the following example. 32920 32921 typedef int v4si __attribute__ ((vector_size (16))); 32922 32923 v4si a = {1,2,3,4}; 32924 v4si b = {3,2,1,4}; 32925 v4si c; 32926 32927 c = a > b; /* The result would be {0, 0,-1, 0} */ 32928 c = a == b; /* The result would be {0,-1, 0,-1} */ 32929 32930 In C++, the ternary operator `?:' is available. `a?b:c', where `b' and 32931`c' are vectors of the same type and `a' is an integer vector with the 32932same number of elements of the same size as `b' and `c', computes all 32933three arguments and creates a vector `{a[0]?b[0]:c[0], a[1]?b[1]:c[1], 32934...}'. Note that unlike in OpenCL, `a' is thus interpreted as `a != 0' 32935and not `a < 0'. As in the case of binary operations, this syntax is 32936also accepted when one of `b' or `c' is a scalar that is then 32937transformed into a vector. If both `b' and `c' are scalars and the type 32938of `true?b:c' has the same size as the element type of `a', then `b' 32939and `c' are converted to a vector type whose elements have this type 32940and with the same number of elements as `a'. 32941 32942 In C++, the logic operators `!, &&, ||' are available for vectors. 32943`!v' is equivalent to `v == 0', `a && b' is equivalent to `a!=0 & b!=0' 32944and `a || b' is equivalent to `a!=0 | b!=0'. For mixed operations 32945between a scalar `s' and a vector `v', `s && v' is equivalent to 32946`s?v!=0:0' (the evaluation is short-circuit) and `v && s' is equivalent 32947to `v!=0 & (s?-1:0)'. 32948 32949 Vector shuffling is available using functions `__builtin_shuffle (vec, 32950mask)' and `__builtin_shuffle (vec0, vec1, mask)'. Both functions 32951construct a permutation of elements from one or two vectors and return 32952a vector of the same type as the input vector(s). The MASK is an 32953integral vector with the same width (W) and element count (N) as the 32954output vector. 32955 32956 The elements of the input vectors are numbered in memory ordering of 32957VEC0 beginning at 0 and VEC1 beginning at N. The elements of MASK are 32958considered modulo N in the single-operand case and modulo 2*N in the 32959two-operand case. 32960 32961 Consider the following example, 32962 32963 typedef int v4si __attribute__ ((vector_size (16))); 32964 32965 v4si a = {1,2,3,4}; 32966 v4si b = {5,6,7,8}; 32967 v4si mask1 = {0,1,1,3}; 32968 v4si mask2 = {0,4,2,5}; 32969 v4si res; 32970 32971 res = __builtin_shuffle (a, mask1); /* res is {1,2,2,4} */ 32972 res = __builtin_shuffle (a, b, mask2); /* res is {1,5,3,6} */ 32973 32974 Note that `__builtin_shuffle' is intentionally semantically compatible 32975with the OpenCL `shuffle' and `shuffle2' functions. 32976 32977 You can declare variables and use them in function calls and returns, 32978as well as in assignments and some casts. You can specify a vector 32979type as a return type for a function. Vector types can also be used as 32980function arguments. It is possible to cast from one vector type to 32981another, provided they are of the same size (in fact, you can also cast 32982vectors to and from other datatypes of the same size). 32983 32984 You cannot operate between vectors of different lengths or different 32985signedness without a cast. 32986 32987 32988File: gcc.info, Node: Offsetof, Next: __sync Builtins, Prev: Vector Extensions, Up: C Extensions 32989 329906.49 Support for `offsetof' 32991=========================== 32992 32993GCC implements for both C and C++ a syntactic extension to implement 32994the `offsetof' macro. 32995 32996 primary: 32997 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")" 32998 32999 offsetof_member_designator: 33000 `identifier' 33001 | offsetof_member_designator "." `identifier' 33002 | offsetof_member_designator "[" `expr' "]" 33003 33004 This extension is sufficient such that 33005 33006 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 33007 33008is a suitable definition of the `offsetof' macro. In C++, TYPE may be 33009dependent. In either case, MEMBER may consist of a single identifier, 33010or a sequence of member accesses and array references. 33011 33012 33013File: gcc.info, Node: __sync Builtins, Next: __atomic Builtins, Prev: Offsetof, Up: C Extensions 33014 330156.50 Legacy `__sync' Built-in Functions for Atomic Memory Access 33016================================================================ 33017 33018The following built-in functions are intended to be compatible with 33019those described in the `Intel Itanium Processor-specific Application 33020Binary Interface', section 7.4. As such, they depart from the normal 33021GCC practice of using the `__builtin_' prefix, and further that they 33022are overloaded such that they work on multiple types. 33023 33024 The definition given in the Intel documentation allows only for the 33025use of the types `int', `long', `long long' as well as their unsigned 33026counterparts. GCC allows any integral scalar or pointer type that is 330271, 2, 4 or 8 bytes in length. 33028 33029 Not all operations are supported by all target processors. If a 33030particular operation cannot be implemented on the target processor, a 33031warning is generated and a call to an external function is generated. 33032The external function carries the same name as the built-in version, 33033with an additional suffix `_N' where N is the size of the data type. 33034 33035 In most cases, these built-in functions are considered a "full 33036barrier". That is, no memory operand is moved across the operation, 33037either forward or backward. Further, instructions are issued as 33038necessary to prevent the processor from speculating loads across the 33039operation and from queuing stores after the operation. 33040 33041 All of the routines are described in the Intel documentation to take 33042"an optional list of variables protected by the memory barrier". It's 33043not clear what is meant by that; it could mean that _only_ the 33044following variables are protected, or it could mean that these variables 33045should in addition be protected. At present GCC ignores this list and 33046protects all variables that are globally accessible. If in the future 33047we make some use of this list, an empty list will continue to mean all 33048globally accessible variables. 33049 33050`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 33051`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 33052`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 33053`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 33054`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 33055`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 33056 These built-in functions perform the operation suggested by the 33057 name, and returns the value that had previously been in memory. 33058 That is, 33059 33060 { tmp = *ptr; *ptr OP= value; return tmp; } 33061 { tmp = *ptr; *ptr = ~(tmp & value); return tmp; } // nand 33062 33063 _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' as 33064 `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & value'. 33065 33066`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 33067`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 33068`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 33069`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 33070`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 33071`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 33072 These built-in functions perform the operation suggested by the 33073 name, and return the new value. That is, 33074 33075 { *ptr OP= value; return *ptr; } 33076 { *ptr = ~(*ptr & value); return *ptr; } // nand 33077 33078 _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' as 33079 `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & value'. 33080 33081`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' 33082`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' 33083 These built-in functions perform an atomic compare and swap. That 33084 is, if the current value of `*PTR' is OLDVAL, then write NEWVAL 33085 into `*PTR'. 33086 33087 The "bool" version returns true if the comparison is successful and 33088 NEWVAL is written. The "val" version returns the contents of 33089 `*PTR' before the operation. 33090 33091`__sync_synchronize (...)' 33092 This built-in function issues a full memory barrier. 33093 33094`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 33095 This built-in function, as described by Intel, is not a 33096 traditional test-and-set operation, but rather an atomic exchange 33097 operation. It writes VALUE into `*PTR', and returns the previous 33098 contents of `*PTR'. 33099 33100 Many targets have only minimal support for such locks, and do not 33101 support a full exchange operation. In this case, a target may 33102 support reduced functionality here by which the _only_ valid value 33103 to store is the immediate constant 1. The exact value actually 33104 stored in `*PTR' is implementation defined. 33105 33106 This built-in function is not a full barrier, but rather an 33107 "acquire barrier". This means that references after the operation 33108 cannot move to (or be speculated to) before the operation, but 33109 previous memory stores may not be globally visible yet, and 33110 previous memory loads may not yet be satisfied. 33111 33112`void __sync_lock_release (TYPE *ptr, ...)' 33113 This built-in function releases the lock acquired by 33114 `__sync_lock_test_and_set'. Normally this means writing the 33115 constant 0 to `*PTR'. 33116 33117 This built-in function is not a full barrier, but rather a 33118 "release barrier". This means that all previous memory stores are 33119 globally visible, and all previous memory loads have been 33120 satisfied, but following memory reads are not prevented from being 33121 speculated to before the barrier. 33122 33123 33124File: gcc.info, Node: __atomic Builtins, Next: Integer Overflow Builtins, Prev: __sync Builtins, Up: C Extensions 33125 331266.51 Built-in Functions for Memory Model Aware Atomic Operations 33127================================================================ 33128 33129The following built-in functions approximately match the requirements 33130for C++11 memory model. Many are similar to the `__sync' prefixed 33131built-in functions, but all also have a memory model parameter. These 33132are all identified by being prefixed with `__atomic', and most are 33133overloaded such that they work with multiple types. 33134 33135 GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8 33136bytes in length. 16-byte integral types are also allowed if `__int128' 33137(*note __int128::) is supported by the architecture. 33138 33139 Target architectures are encouraged to provide their own patterns for 33140each of these built-in functions. If no target is provided, the 33141original non-memory model set of `__sync' atomic built-in functions are 33142utilized, along with any required synchronization fences surrounding it 33143in order to achieve the proper behavior. Execution in this case is 33144subject to the same restrictions as those built-in functions. 33145 33146 If there is no pattern or mechanism to provide a lock free instruction 33147sequence, a call is made to an external routine with the same parameters 33148to be resolved at run time. 33149 33150 The four non-arithmetic functions (load, store, exchange, and 33151compare_exchange) all have a generic version as well. This generic 33152version works on any data type. If the data type size maps to one of 33153the integral sizes that may have lock free support, the generic version 33154utilizes the lock free built-in function. Otherwise an external call 33155is left to be resolved at run time. This external call is the same 33156format with the addition of a `size_t' parameter inserted as the first 33157parameter indicating the size of the object being pointed to. All 33158objects must be the same size. 33159 33160 There are 6 different memory models that can be specified. These map 33161to the same names in the C++11 standard. Refer there or to the GCC 33162wiki on atomic synchronization 33163(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed 33164definitions. These memory models integrate both barriers to code 33165motion as well as synchronization requirements with other threads. 33166These are listed in approximately ascending order of strength. It is 33167also possible to use target specific flags for memory model flags, like 33168Hardware Lock Elision. 33169 33170`__ATOMIC_RELAXED' 33171 No barriers or synchronization. 33172 33173`__ATOMIC_CONSUME' 33174 Data dependency only for both barrier and synchronization with 33175 another thread. 33176 33177`__ATOMIC_ACQUIRE' 33178 Barrier to hoisting of code and synchronizes with release (or 33179 stronger) semantic stores from another thread. 33180 33181`__ATOMIC_RELEASE' 33182 Barrier to sinking of code and synchronizes with acquire (or 33183 stronger) semantic loads from another thread. 33184 33185`__ATOMIC_ACQ_REL' 33186 Full barrier in both directions and synchronizes with acquire 33187 loads and release stores in another thread. 33188 33189`__ATOMIC_SEQ_CST' 33190 Full barrier in both directions and synchronizes with acquire 33191 loads and release stores in all threads. 33192 33193 When implementing patterns for these built-in functions, the memory 33194model parameter can be ignored as long as the pattern implements the 33195most restrictive `__ATOMIC_SEQ_CST' model. Any of the other memory 33196models execute correctly with this memory model but they may not 33197execute as efficiently as they could with a more appropriate 33198implementation of the relaxed requirements. 33199 33200 Note that the C++11 standard allows for the memory model parameter to 33201be determined at run time rather than at compile time. These built-in 33202functions map any run-time value to `__ATOMIC_SEQ_CST' rather than 33203invoke a runtime library call or inline a switch statement. This is 33204standard compliant, safe, and the simplest approach for now. 33205 33206 The memory model parameter is a signed int, but only the lower 16 bits 33207are reserved for the memory model. The remainder of the signed int is 33208reserved for target use and should be 0. Use of the predefined atomic 33209values ensures proper usage. 33210 33211 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel) 33212 This built-in function implements an atomic load operation. It 33213 returns the contents of `*PTR'. 33214 33215 The valid memory model variants are `__ATOMIC_RELAXED', 33216 `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', and `__ATOMIC_CONSUME'. 33217 33218 33219 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int 33220 memmodel) 33221 This is the generic version of an atomic load. It returns the 33222 contents of `*PTR' in `*RET'. 33223 33224 33225 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int 33226 memmodel) 33227 This built-in function implements an atomic store operation. It 33228 writes `VAL' into `*PTR'. 33229 33230 The valid memory model variants are `__ATOMIC_RELAXED', 33231 `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'. 33232 33233 33234 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int 33235 memmodel) 33236 This is the generic version of an atomic store. It stores the 33237 value of `*VAL' into `*PTR'. 33238 33239 33240 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val, 33241 int memmodel) 33242 This built-in function implements an atomic exchange operation. 33243 It writes VAL into `*PTR', and returns the previous contents of 33244 `*PTR'. 33245 33246 The valid memory model variants are `__ATOMIC_RELAXED', 33247 `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', `__ATOMIC_RELEASE', and 33248 `__ATOMIC_ACQ_REL'. 33249 33250 33251 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val, 33252 TYPE *ret, int memmodel) 33253 This is the generic version of an atomic exchange. It stores the 33254 contents of `*VAL' into `*PTR'. The original value of `*PTR' is 33255 copied into `*RET'. 33256 33257 33258 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, 33259 TYPE *expected, TYPE desired, bool weak, int 33260 success_memmodel, int failure_memmodel) 33261 This built-in function implements an atomic compare and exchange 33262 operation. This compares the contents of `*PTR' with the contents 33263 of `*EXPECTED' and if equal, writes DESIRED into `*PTR'. If they 33264 are not equal, the current contents of `*PTR' is written into 33265 `*EXPECTED'. WEAK is true for weak compare_exchange, and false 33266 for the strong variation. Many targets only offer the strong 33267 variation and ignore the parameter. When in doubt, use the strong 33268 variation. 33269 33270 True is returned if DESIRED is written into `*PTR' and the 33271 execution is considered to conform to the memory model specified 33272 by SUCCESS_MEMMODEL. There are no restrictions on what memory 33273 model can be used here. 33274 33275 False is returned otherwise, and the execution is considered to 33276 conform to FAILURE_MEMMODEL. This memory model cannot be 33277 `__ATOMIC_RELEASE' nor `__ATOMIC_ACQ_REL'. It also cannot be a 33278 stronger model than that specified by SUCCESS_MEMMODEL. 33279 33280 33281 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE 33282 *expected, TYPE *desired, bool weak, int success_memmodel, 33283 int failure_memmodel) 33284 This built-in function implements the generic version of 33285 `__atomic_compare_exchange'. The function is virtually identical 33286 to `__atomic_compare_exchange_n', except the desired value is also 33287 a pointer. 33288 33289 33290 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, 33291 int memmodel) 33292 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, 33293 int memmodel) 33294 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, 33295 int memmodel) 33296 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, 33297 int memmodel) 33298 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int 33299 memmodel) 33300 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val, 33301 int memmodel) 33302 These built-in functions perform the operation suggested by the 33303 name, and return the result of the operation. That is, 33304 33305 { *ptr OP= val; return *ptr; } 33306 33307 All memory models are valid. 33308 33309 33310 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, 33311 int memmodel) 33312 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, 33313 int memmodel) 33314 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, 33315 int memmodel) 33316 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, 33317 int memmodel) 33318 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int 33319 memmodel) 33320 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val, 33321 int memmodel) 33322 These built-in functions perform the operation suggested by the 33323 name, and return the value that had previously been in `*PTR'. 33324 That is, 33325 33326 { tmp = *ptr; *ptr OP= val; return tmp; } 33327 33328 All memory models are valid. 33329 33330 33331 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int 33332 memmodel) 33333 This built-in function performs an atomic test-and-set operation on 33334 the byte at `*PTR'. The byte is set to some implementation 33335 defined nonzero "set" value and the return value is `true' if and 33336 only if the previous contents were "set". It should be only used 33337 for operands of type `bool' or `char'. For other types only part 33338 of the value may be set. 33339 33340 All memory models are valid. 33341 33342 33343 -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel) 33344 This built-in function performs an atomic clear operation on 33345 `*PTR'. After the operation, `*PTR' contains 0. It should be 33346 only used for operands of type `bool' or `char' and in conjunction 33347 with `__atomic_test_and_set'. For other types it may only clear 33348 partially. If the type is not `bool' prefer using `__atomic_store'. 33349 33350 The valid memory model variants are `__ATOMIC_RELAXED', 33351 `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'. 33352 33353 33354 -- Built-in Function: void __atomic_thread_fence (int memmodel) 33355 This built-in function acts as a synchronization fence between 33356 threads based on the specified memory model. 33357 33358 All memory orders are valid. 33359 33360 33361 -- Built-in Function: void __atomic_signal_fence (int memmodel) 33362 This built-in function acts as a synchronization fence between a 33363 thread and signal handlers based in the same thread. 33364 33365 All memory orders are valid. 33366 33367 33368 -- Built-in Function: bool __atomic_always_lock_free (size_t size, 33369 void *ptr) 33370 This built-in function returns true if objects of SIZE bytes always 33371 generate lock free atomic instructions for the target architecture. 33372 SIZE must resolve to a compile-time constant and the result also 33373 resolves to a compile-time constant. 33374 33375 PTR is an optional pointer to the object that may be used to 33376 determine alignment. A value of 0 indicates typical alignment 33377 should be used. The compiler may also ignore this parameter. 33378 33379 if (_atomic_always_lock_free (sizeof (long long), 0)) 33380 33381 33382 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void 33383 *ptr) 33384 This built-in function returns true if objects of SIZE bytes always 33385 generate lock free atomic instructions for the target 33386 architecture. If it is not known to be lock free a call is made 33387 to a runtime routine named `__atomic_is_lock_free'. 33388 33389 PTR is an optional pointer to the object that may be used to 33390 determine alignment. A value of 0 indicates typical alignment 33391 should be used. The compiler may also ignore this parameter. 33392 33393 33394File: gcc.info, Node: Integer Overflow Builtins, Next: x86 specific memory model extensions for transactional memory, Prev: __atomic Builtins, Up: C Extensions 33395 333966.52 Built-in Functions to Perform Arithmetic with Overflow Checking 33397==================================================================== 33398 33399The following built-in functions allow performing simple arithmetic 33400operations together with checking whether the operations overflowed. 33401 33402 -- Built-in Function: bool __builtin_add_overflow (TYPE1 a, TYPE2 b, 33403 TYPE3 *res) 33404 -- Built-in Function: bool __builtin_sadd_overflow (int a, int b, int 33405 *res) 33406 -- Built-in Function: bool __builtin_saddl_overflow (long int a, long 33407 int b, long int *res) 33408 -- Built-in Function: bool __builtin_saddll_overflow (long long int a, 33409 long long int b, long int *res) 33410 -- Built-in Function: bool __builtin_uadd_overflow (unsigned int a, 33411 unsigned int b, unsigned int *res) 33412 -- Built-in Function: bool __builtin_uaddl_overflow (unsigned long int 33413 a, unsigned long int b, unsigned long int *res) 33414 -- Built-in Function: bool __builtin_uaddll_overflow (unsigned long 33415 long int a, unsigned long long int b, unsigned long int *res) 33416 These built-in functions promote the first two operands into 33417 infinite precision signed type and perform addition on those 33418 promoted operands. The result is then cast to the type the third 33419 pointer argument points to and stored there. If the stored result 33420 is equal to the infinite precision result, the built-in functions 33421 return false, otherwise they return true. As the addition is 33422 performed in infinite signed precision, these built-in functions 33423 have fully defined behavior for all argument values. 33424 33425 The first built-in function allows arbitrary integral types for 33426 operands and the result type must be pointer to some integer type, 33427 the rest of the built-in functions have explicit integer types. 33428 33429 The compiler will attempt to use hardware instructions to implement 33430 these built-in functions where possible, like conditional jump on 33431 overflow after addition, conditional jump on carry etc. 33432 33433 33434 -- Built-in Function: bool __builtin_sub_overflow (TYPE1 a, TYPE2 b, 33435 TYPE3 *res) 33436 -- Built-in Function: bool __builtin_ssub_overflow (int a, int b, int 33437 *res) 33438 -- Built-in Function: bool __builtin_ssubl_overflow (long int a, long 33439 int b, long int *res) 33440 -- Built-in Function: bool __builtin_ssubll_overflow (long long int a, 33441 long long int b, long int *res) 33442 -- Built-in Function: bool __builtin_usub_overflow (unsigned int a, 33443 unsigned int b, unsigned int *res) 33444 -- Built-in Function: bool __builtin_usubl_overflow (unsigned long int 33445 a, unsigned long int b, unsigned long int *res) 33446 -- Built-in Function: bool __builtin_usubll_overflow (unsigned long 33447 long int a, unsigned long long int b, unsigned long int *res) 33448 These built-in functions are similar to the add overflow checking 33449 built-in functions above, except they perform subtraction, 33450 subtract the second argument from the first one, instead of 33451 addition. 33452 33453 33454 -- Built-in Function: bool __builtin_mul_overflow (TYPE1 a, TYPE2 b, 33455 TYPE3 *res) 33456 -- Built-in Function: bool __builtin_smul_overflow (int a, int b, int 33457 *res) 33458 -- Built-in Function: bool __builtin_smull_overflow (long int a, long 33459 int b, long int *res) 33460 -- Built-in Function: bool __builtin_smulll_overflow (long long int a, 33461 long long int b, long int *res) 33462 -- Built-in Function: bool __builtin_umul_overflow (unsigned int a, 33463 unsigned int b, unsigned int *res) 33464 -- Built-in Function: bool __builtin_umull_overflow (unsigned long int 33465 a, unsigned long int b, unsigned long int *res) 33466 -- Built-in Function: bool __builtin_umulll_overflow (unsigned long 33467 long int a, unsigned long long int b, unsigned long int *res) 33468 These built-in functions are similar to the add overflow checking 33469 built-in functions above, except they perform multiplication, 33470 instead of addition. 33471 33472 33473 33474File: gcc.info, Node: x86 specific memory model extensions for transactional memory, Next: Object Size Checking, Prev: Integer Overflow Builtins, Up: C Extensions 33475 334766.53 x86-Specific Memory Model Extensions for Transactional Memory 33477================================================================== 33478 33479The x86 architecture supports additional memory ordering flags to mark 33480lock critical sections for hardware lock elision. These must be 33481specified in addition to an existing memory model to atomic intrinsics. 33482 33483`__ATOMIC_HLE_ACQUIRE' 33484 Start lock elision on a lock variable. Memory model must be 33485 `__ATOMIC_ACQUIRE' or stronger. 33486 33487`__ATOMIC_HLE_RELEASE' 33488 End lock elision on a lock variable. Memory model must be 33489 `__ATOMIC_RELEASE' or stronger. 33490 33491 When a lock acquire fails it is required for good performance to abort 33492the transaction quickly. This can be done with a `_mm_pause' 33493 33494 #include <immintrin.h> // For _mm_pause 33495 33496 int lockvar; 33497 33498 /* Acquire lock with lock elision */ 33499 while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE)) 33500 _mm_pause(); /* Abort failed transaction */ 33501 ... 33502 /* Free lock with lock elision */ 33503 __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE); 33504 33505 33506File: gcc.info, Node: Object Size Checking, Next: Pointer Bounds Checker builtins, Prev: x86 specific memory model extensions for transactional memory, Up: C Extensions 33507 335086.54 Object Size Checking Built-in Functions 33509============================================ 33510 33511GCC implements a limited buffer overflow protection mechanism that can 33512prevent some buffer overflow attacks. 33513 33514 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 33515 TYPE) 33516 is a built-in construct that returns a constant number of bytes 33517 from PTR to the end of the object PTR pointer points to (if known 33518 at compile time). `__builtin_object_size' never evaluates its 33519 arguments for side-effects. If there are any side-effects in 33520 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0' 33521 for TYPE 2 or 3. If there are multiple objects PTR can point to 33522 and all of them are known at compile time, the returned number is 33523 the maximum of remaining byte counts in those objects if TYPE & 2 33524 is 0 and minimum if nonzero. If it is not possible to determine 33525 which objects PTR points to at compile time, 33526 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or 33527 1 and `(size_t) 0' for TYPE 2 or 3. 33528 33529 TYPE is an integer constant from 0 to 3. If the least significant 33530 bit is clear, objects are whole variables, if it is set, a closest 33531 surrounding subobject is considered the object a pointer points to. 33532 The second bit determines if maximum or minimum of remaining bytes 33533 is computed. 33534 33535 struct V { char buf1[10]; int b; char buf2[10]; } var; 33536 char *p = &var.buf1[1], *q = &var.b; 33537 33538 /* Here the object p points to is var. */ 33539 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 33540 /* The subobject p points to is var.buf1. */ 33541 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 33542 /* The object q points to is var. */ 33543 assert (__builtin_object_size (q, 0) 33544 == (char *) (&var + 1) - (char *) &var.b); 33545 /* The subobject q points to is var.b. */ 33546 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 33547 33548 There are built-in functions added for many common string operation 33549functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is 33550provided. This built-in has an additional last argument, which is the 33551number of bytes remaining in object the DEST argument points to or 33552`(size_t) -1' if the size is not known. 33553 33554 The built-in functions are optimized into the normal string functions 33555like `memcpy' if the last argument is `(size_t) -1' or if it is known 33556at compile time that the destination object will not be overflown. If 33557the compiler can determine at compile time the object will be always 33558overflown, it issues a warning. 33559 33560 The intended use can be e.g. 33561 33562 #undef memcpy 33563 #define bos0(dest) __builtin_object_size (dest, 0) 33564 #define memcpy(dest, src, n) \ 33565 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 33566 33567 char *volatile p; 33568 char buf[10]; 33569 /* It is unknown what object p points to, so this is optimized 33570 into plain memcpy - no checking is possible. */ 33571 memcpy (p, "abcde", n); 33572 /* Destination is known and length too. It is known at compile 33573 time there will be no overflow. */ 33574 memcpy (&buf[5], "abcde", 5); 33575 /* Destination is known, but the length is not known at compile time. 33576 This will result in __memcpy_chk call that can check for overflow 33577 at run time. */ 33578 memcpy (&buf[5], "abcde", n); 33579 /* Destination is known and it is known at compile time there will 33580 be overflow. There will be a warning and __memcpy_chk call that 33581 will abort the program at run time. */ 33582 memcpy (&buf[6], "abcde", 5); 33583 33584 Such built-in functions are provided for `memcpy', `mempcpy', 33585`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and 33586`strncat'. 33587 33588 There are also checking built-in functions for formatted output 33589functions. 33590 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 33591 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 33592 const char *fmt, ...); 33593 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 33594 va_list ap); 33595 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 33596 const char *fmt, va_list ap); 33597 33598 The added FLAG argument is passed unchanged to `__sprintf_chk' etc. 33599functions and can contain implementation specific flags on what 33600additional security measures the checking function might take, such as 33601handling `%n' differently. 33602 33603 The OS argument is the object size S points to, like in the other 33604built-in functions. There is a small difference in the behavior 33605though, if OS is `(size_t) -1', the built-in functions are optimized 33606into the non-checking functions only if FLAG is 0, otherwise the 33607checking function is called with OS argument set to `(size_t) -1'. 33608 33609 In addition to this, there are checking built-in functions 33610`__builtin___printf_chk', `__builtin___vprintf_chk', 33611`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have 33612just one additional argument, FLAG, right before format string FMT. If 33613the compiler is able to optimize them to `fputc' etc. functions, it 33614does, otherwise the checking function is called and the FLAG argument 33615passed to it. 33616 33617 33618File: gcc.info, Node: Pointer Bounds Checker builtins, Next: Cilk Plus Builtins, Prev: Object Size Checking, Up: C Extensions 33619 336206.55 Pointer Bounds Checker Built-in Functions 33621============================================== 33622 33623GCC provides a set of built-in functions to control Pointer Bounds 33624Checker instrumentation. Note that all Pointer Bounds Checker builtins 33625can be used even if you compile with Pointer Bounds Checker off 33626(`-fno-check-pointer-bounds'). The behavior may differ in such case as 33627documented below. 33628 33629 -- Built-in Function: void * __builtin___bnd_set_ptr_bounds (const 33630 void *Q, size_t SIZE) 33631 This built-in function returns a new pointer with the value of Q, 33632 and associate it with the bounds [Q, Q+SIZE-1]. With Pointer 33633 Bounds Checker off, the built-in function just returns the first 33634 argument. 33635 33636 extern void *__wrap_malloc (size_t n) 33637 { 33638 void *p = (void *)__real_malloc (n); 33639 if (!p) return __builtin___bnd_null_ptr_bounds (p); 33640 return __builtin___bnd_set_ptr_bounds (p, n); 33641 } 33642 33643 33644 -- Built-in Function: void * __builtin___bnd_narrow_ptr_bounds (const 33645 void *P, const void *Q, size_t SIZE) 33646 This built-in function returns a new pointer with the value of P 33647 and associates it with the narrowed bounds formed by the 33648 intersection of bounds associated with Q and the bounds [P, P + 33649 SIZE - 1]. With Pointer Bounds Checker off, the built-in function 33650 just returns the first argument. 33651 33652 void init_objects (object *objs, size_t size) 33653 { 33654 size_t i; 33655 /* Initialize objects one-by-one passing pointers with bounds of 33656 an object, not the full array of objects. */ 33657 for (i = 0; i < size; i++) 33658 init_object (__builtin___bnd_narrow_ptr_bounds (objs + i, objs, 33659 sizeof(object))); 33660 } 33661 33662 33663 -- Built-in Function: void * __builtin___bnd_copy_ptr_bounds (const 33664 void *Q, const void *R) 33665 This built-in function returns a new pointer with the value of Q, 33666 and associates it with the bounds already associated with pointer 33667 R. With Pointer Bounds Checker off, the built-in function just 33668 returns the first argument. 33669 33670 /* Here is a way to get pointer to object's field but 33671 still with the full object's bounds. */ 33672 int *field_ptr = __builtin___bnd_copy_ptr_bounds (&objptr->int_field, 33673 objptr); 33674 33675 33676 -- Built-in Function: void * __builtin___bnd_init_ptr_bounds (const 33677 void *Q) 33678 This built-in function returns a new pointer with the value of Q, 33679 and associates it with INIT (allowing full memory access) bounds. 33680 With Pointer Bounds Checker off, the built-in function just 33681 returns the first argument. 33682 33683 33684 -- Built-in Function: void * __builtin___bnd_null_ptr_bounds (const 33685 void *Q) 33686 This built-in function returns a new pointer with the value of Q, 33687 and associates it with NULL (allowing no memory access) bounds. 33688 With Pointer Bounds Checker off, the built-in function just 33689 returns the first argument. 33690 33691 33692 -- Built-in Function: void __builtin___bnd_store_ptr_bounds (const 33693 void **PTR_ADDR, const void *PTR_VAL) 33694 This built-in function stores the bounds associated with pointer 33695 PTR_VAL and location PTR_ADDR into Bounds Table. This can be 33696 useful to propagate bounds from legacy code without touching the 33697 associated pointer's memory when pointers are copied as integers. 33698 With Pointer Bounds Checker off, the built-in function call is 33699 ignored. 33700 33701 33702 -- Built-in Function: void __builtin___bnd_chk_ptr_lbounds (const void 33703 *Q) 33704 This built-in function checks if the pointer Q is within the lower 33705 bound of its associated bounds. With Pointer Bounds Checker off, 33706 the built-in function call is ignored. 33707 33708 extern void *__wrap_memset (void *dst, int c, size_t len) 33709 { 33710 if (len > 0) 33711 { 33712 __builtin___bnd_chk_ptr_lbounds (dst); 33713 __builtin___bnd_chk_ptr_ubounds ((char *)dst + len - 1); 33714 __real_memset (dst, c, len); 33715 } 33716 return dst; 33717 } 33718 33719 33720 -- Built-in Function: void __builtin___bnd_chk_ptr_ubounds (const void 33721 *Q) 33722 This built-in function checks if the pointer Q is within the upper 33723 bound of its associated bounds. With Pointer Bounds Checker off, 33724 the built-in function call is ignored. 33725 33726 33727 -- Built-in Function: void __builtin___bnd_chk_ptr_bounds (const void 33728 *Q, size_t SIZE) 33729 This built-in function checks if [Q, Q + SIZE - 1] is within the 33730 lower and upper bounds associated with Q. With Pointer Bounds 33731 Checker off, the built-in function call is ignored. 33732 33733 extern void *__wrap_memcpy (void *dst, const void *src, size_t n) 33734 { 33735 if (n > 0) 33736 { 33737 __bnd_chk_ptr_bounds (dst, n); 33738 __bnd_chk_ptr_bounds (src, n); 33739 __real_memcpy (dst, src, n); 33740 } 33741 return dst; 33742 } 33743 33744 33745 -- Built-in Function: const void * __builtin___bnd_get_ptr_lbound 33746 (const void *Q) 33747 This built-in function returns the lower bound associated with the 33748 pointer Q, as a pointer value. This is useful for debugging using 33749 `printf'. With Pointer Bounds Checker off, the built-in function 33750 returns 0. 33751 33752 void *lb = __builtin___bnd_get_ptr_lbound (q); 33753 void *ub = __builtin___bnd_get_ptr_ubound (q); 33754 printf ("q = %p lb(q) = %p ub(q) = %p", q, lb, ub); 33755 33756 33757 -- Built-in Function: const void * __builtin___bnd_get_ptr_ubound 33758 (const void *Q) 33759 This built-in function returns the upper bound (which is a 33760 pointer) associated with the pointer Q. With Pointer Bounds 33761 Checker off, the built-in function returns -1. 33762 33763 33764 33765File: gcc.info, Node: Cilk Plus Builtins, Next: Other Builtins, Prev: Pointer Bounds Checker builtins, Up: C Extensions 33766 337676.56 Cilk Plus C/C++ Language Extension Built-in Functions 33768========================================================== 33769 33770GCC provides support for the following built-in reduction functions if 33771Cilk Plus is enabled. Cilk Plus can be enabled using the `-fcilkplus' 33772flag. 33773 33774 * `__sec_implicit_index' 33775 33776 * `__sec_reduce' 33777 33778 * `__sec_reduce_add' 33779 33780 * `__sec_reduce_all_nonzero' 33781 33782 * `__sec_reduce_all_zero' 33783 33784 * `__sec_reduce_any_nonzero' 33785 33786 * `__sec_reduce_any_zero' 33787 33788 * `__sec_reduce_max' 33789 33790 * `__sec_reduce_min' 33791 33792 * `__sec_reduce_max_ind' 33793 33794 * `__sec_reduce_min_ind' 33795 33796 * `__sec_reduce_mul' 33797 33798 * `__sec_reduce_mutating' 33799 33800 Further details and examples about these built-in functions are 33801described in the Cilk Plus language manual which can be found at 33802`http://www.cilkplus.org'. 33803 33804 33805File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Cilk Plus Builtins, Up: C Extensions 33806 338076.57 Other Built-in Functions Provided by GCC 33808============================================= 33809 33810GCC provides a large number of built-in functions other than the ones 33811mentioned above. Some of these are for internal use in the processing 33812of exceptions or variable-length argument lists and are not documented 33813here because they may change from time to time; we do not recommend 33814general use of these functions. 33815 33816 The remaining functions are provided for optimization purposes. 33817 33818 GCC includes built-in versions of many of the functions in the standard 33819C library. The versions prefixed with `__builtin_' are always treated 33820as having the same meaning as the C library function even if you 33821specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 33822these functions are only optimized in certain cases; if they are not 33823optimized in a particular case, a call to the library function is 33824emitted. 33825 33826 Outside strict ISO C mode (`-ansi', `-std=c90', `-std=c99' or 33827`-std=c11'), the functions `_exit', `alloca', `bcmp', `bzero', 33828`dcgettext', `dgettext', `dremf', `dreml', `drem', `exp10f', `exp10l', 33829`exp10', `ffsll', `ffsl', `ffs', `fprintf_unlocked', `fputs_unlocked', 33830`gammaf', `gammal', `gamma', `gammaf_r', `gammal_r', `gamma_r', 33831`gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1', 33832`jnf', `jnl', `jn', `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy', 33833`pow10f', `pow10l', `pow10', `printf_unlocked', `rindex', `scalbf', 33834`scalbl', `scalb', `signbit', `signbitf', `signbitl', `signbitd32', 33835`signbitd64', `signbitd128', `significandf', `significandl', 33836`significand', `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy', 33837`strcasecmp', `strdup', `strfmon', `strncasecmp', `strndup', `toascii', 33838`y0f', `y0l', `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be 33839handled as built-in functions. All these functions have corresponding 33840versions prefixed with `__builtin_', which may be used even in strict 33841C90 mode. 33842 33843 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 33844`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 33845`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 33846`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 33847`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 33848`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 33849`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 33850`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj', 33851`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow', 33852`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf', 33853`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl', 33854`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan', 33855`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l', 33856`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf', 33857`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin', 33858`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs', 33859`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs', 33860`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 33861`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', 33862`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', 33863`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', 33864`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward', 33865`remainderf', `remainderl', `remainder', `remquof', `remquol', 33866`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round', 33867`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn', 33868`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc', 33869`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in 33870functions except in strict ISO C90 mode (`-ansi' or `-std=c90'). 33871 33872 There are also built-in versions of the ISO C99 functions `acosf', 33873`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 33874`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 33875`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 33876`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 33877`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 33878`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 33879recognized in any mode since ISO C90 reserves these names for the 33880purpose to which ISO C99 puts them. All these functions have 33881corresponding versions prefixed with `__builtin_'. 33882 33883 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit', 33884`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper', 33885`iswxdigit', `towlower' and `towupper' are handled as built-in functions 33886except in strict ISO C90 mode (`-ansi' or `-std=c90'). 33887 33888 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 33889`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 33890`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl', 33891`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace', 33892`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10', 33893`log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow', 33894`printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf', 33895`sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', 33896`strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk', 33897`strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and 33898`vsprintf' are all recognized as built-in functions unless 33899`-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified 33900for an individual function). All of these functions have corresponding 33901versions prefixed with `__builtin_'. 33902 33903 GCC provides built-in versions of the ISO C99 floating-point comparison 33904macros that avoid raising exceptions for unordered operands. They have 33905the same names as the standard macros ( `isgreater', `isgreaterequal', 33906`isless', `islessequal', `islessgreater', and `isunordered') , with 33907`__builtin_' prefixed. We intend for a library implementor to be able 33908to simply `#define' each standard macro to its built-in equivalent. In 33909the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign' 33910and `isnormal' built-ins used with `__builtin_' prefixed. The `isinf' 33911and `isnan' built-in functions appear both with and without the 33912`__builtin_' prefix. 33913 33914 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 33915 You can use the built-in function `__builtin_types_compatible_p' to 33916 determine whether two types are the same. 33917 33918 This built-in function returns 1 if the unqualified versions of the 33919 types TYPE1 and TYPE2 (which are types, not expressions) are 33920 compatible, 0 otherwise. The result of this built-in function can 33921 be used in integer constant expressions. 33922 33923 This built-in function ignores top level qualifiers (e.g., `const', 33924 `volatile'). For example, `int' is equivalent to `const int'. 33925 33926 The type `int[]' and `int[5]' are compatible. On the other hand, 33927 `int' and `char *' are not compatible, even if the size of their 33928 types, on the particular architecture are the same. Also, the 33929 amount of pointer indirection is taken into account when 33930 determining similarity. Consequently, `short *' is not similar to 33931 `short **'. Furthermore, two types that are typedefed are 33932 considered compatible if their underlying types are compatible. 33933 33934 An `enum' type is not considered to be compatible with another 33935 `enum' type even if both are compatible with the same integer 33936 type; this is what the C standard specifies. For example, `enum 33937 {foo, bar}' is not similar to `enum {hot, dog}'. 33938 33939 You typically use this function in code whose execution varies 33940 depending on the arguments' types. For example: 33941 33942 #define foo(x) \ 33943 ({ \ 33944 typeof (x) tmp = (x); \ 33945 if (__builtin_types_compatible_p (typeof (x), long double)) \ 33946 tmp = foo_long_double (tmp); \ 33947 else if (__builtin_types_compatible_p (typeof (x), double)) \ 33948 tmp = foo_double (tmp); \ 33949 else if (__builtin_types_compatible_p (typeof (x), float)) \ 33950 tmp = foo_float (tmp); \ 33951 else \ 33952 abort (); \ 33953 tmp; \ 33954 }) 33955 33956 _Note:_ This construct is only available for C. 33957 33958 33959 -- Built-in Function: TYPE __builtin_call_with_static_chain (CALL_EXP, 33960 POINTER_EXP) 33961 The CALL_EXP expression must be a function call, and the 33962 POINTER_EXP expression must be a pointer. The POINTER_EXP is 33963 passed to the function call in the target's static chain location. 33964 The result of builtin is the result of the function call. 33965 33966 _Note:_ This builtin is only available for C. This builtin can be 33967 used to call Go closures from C. 33968 33969 33970 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 33971 EXP2) 33972 You can use the built-in function `__builtin_choose_expr' to 33973 evaluate code depending on the value of a constant expression. 33974 This built-in function returns EXP1 if CONST_EXP, which is an 33975 integer constant expression, is nonzero. Otherwise it returns 33976 EXP2. 33977 33978 This built-in function is analogous to the `? :' operator in C, 33979 except that the expression returned has its type unaltered by 33980 promotion rules. Also, the built-in function does not evaluate 33981 the expression that is not chosen. For example, if CONST_EXP 33982 evaluates to true, EXP2 is not evaluated even if it has 33983 side-effects. 33984 33985 This built-in function can return an lvalue if the chosen argument 33986 is an lvalue. 33987 33988 If EXP1 is returned, the return type is the same as EXP1's type. 33989 Similarly, if EXP2 is returned, its return type is the same as 33990 EXP2. 33991 33992 Example: 33993 33994 #define foo(x) \ 33995 __builtin_choose_expr ( \ 33996 __builtin_types_compatible_p (typeof (x), double), \ 33997 foo_double (x), \ 33998 __builtin_choose_expr ( \ 33999 __builtin_types_compatible_p (typeof (x), float), \ 34000 foo_float (x), \ 34001 /* The void expression results in a compile-time error \ 34002 when assigning the result to something. */ \ 34003 (void)0)) 34004 34005 _Note:_ This construct is only available for C. Furthermore, the 34006 unused expression (EXP1 or EXP2 depending on the value of 34007 CONST_EXP) may still generate syntax errors. This may change in 34008 future revisions. 34009 34010 34011 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG) 34012 The built-in function `__builtin_complex' is provided for use in 34013 implementing the ISO C11 macros `CMPLXF', `CMPLX' and `CMPLXL'. 34014 REAL and IMAG must have the same type, a real binary 34015 floating-point type, and the result has the corresponding complex 34016 type with real and imaginary parts REAL and IMAG. Unlike `REAL + 34017 I * IMAG', this works even when infinities, NaNs and negative 34018 zeros are involved. 34019 34020 34021 -- Built-in Function: int __builtin_constant_p (EXP) 34022 You can use the built-in function `__builtin_constant_p' to 34023 determine if a value is known to be constant at compile time and 34024 hence that GCC can perform constant-folding on expressions 34025 involving that value. The argument of the function is the value 34026 to test. The function returns the integer 1 if the argument is 34027 known to be a compile-time constant and 0 if it is not known to be 34028 a compile-time constant. A return of 0 does not indicate that the 34029 value is _not_ a constant, but merely that GCC cannot prove it is 34030 a constant with the specified value of the `-O' option. 34031 34032 You typically use this function in an embedded application where 34033 memory is a critical resource. If you have some complex 34034 calculation, you may want it to be folded if it involves 34035 constants, but need to call a function if it does not. For 34036 example: 34037 34038 #define Scale_Value(X) \ 34039 (__builtin_constant_p (X) \ 34040 ? ((X) * SCALE + OFFSET) : Scale (X)) 34041 34042 You may use this built-in function in either a macro or an inline 34043 function. However, if you use it in an inlined function and pass 34044 an argument of the function as the argument to the built-in, GCC 34045 never returns 1 when you call the inline function with a string 34046 constant or compound literal (*note Compound Literals::) and does 34047 not return 1 when you pass a constant numeric value to the inline 34048 function unless you specify the `-O' option. 34049 34050 You may also use `__builtin_constant_p' in initializers for static 34051 data. For instance, you can write 34052 34053 static const int table[] = { 34054 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 34055 /* ... */ 34056 }; 34057 34058 This is an acceptable initializer even if EXPRESSION is not a 34059 constant expression, including the case where 34060 `__builtin_constant_p' returns 1 because EXPRESSION can be folded 34061 to a constant but EXPRESSION contains operands that are not 34062 otherwise permitted in a static initializer (for example, `0 && 34063 foo ()'). GCC must be more conservative about evaluating the 34064 built-in in this case, because it has no opportunity to perform 34065 optimization. 34066 34067 -- Built-in Function: long __builtin_expect (long EXP, long C) 34068 You may use `__builtin_expect' to provide the compiler with branch 34069 prediction information. In general, you should prefer to use 34070 actual profile feedback for this (`-fprofile-arcs'), as 34071 programmers are notoriously bad at predicting how their programs 34072 actually perform. However, there are applications in which this 34073 data is hard to collect. 34074 34075 The return value is the value of EXP, which should be an integral 34076 expression. The semantics of the built-in are that it is expected 34077 that EXP == C. For example: 34078 34079 if (__builtin_expect (x, 0)) 34080 foo (); 34081 34082 indicates that we do not expect to call `foo', since we expect `x' 34083 to be zero. Since you are limited to integral expressions for 34084 EXP, you should use constructions such as 34085 34086 if (__builtin_expect (ptr != NULL, 1)) 34087 foo (*ptr); 34088 34089 when testing pointer or floating-point values. 34090 34091 -- Built-in Function: void __builtin_trap (void) 34092 This function causes the program to exit abnormally. GCC 34093 implements this function by using a target-dependent mechanism 34094 (such as intentionally executing an illegal instruction) or by 34095 calling `abort'. The mechanism used may vary from release to 34096 release so you should not rely on any particular implementation. 34097 34098 -- Built-in Function: void __builtin_unreachable (void) 34099 If control flow reaches the point of the `__builtin_unreachable', 34100 the program is undefined. It is useful in situations where the 34101 compiler cannot deduce the unreachability of the code. 34102 34103 One such case is immediately following an `asm' statement that 34104 either never terminates, or one that transfers control elsewhere 34105 and never returns. In this example, without the 34106 `__builtin_unreachable', GCC issues a warning that control reaches 34107 the end of a non-void function. It also generates code to return 34108 after the `asm'. 34109 34110 int f (int c, int v) 34111 { 34112 if (c) 34113 { 34114 return v; 34115 } 34116 else 34117 { 34118 asm("jmp error_handler"); 34119 __builtin_unreachable (); 34120 } 34121 } 34122 34123 Because the `asm' statement unconditionally transfers control out 34124 of the function, control never reaches the end of the function 34125 body. The `__builtin_unreachable' is in fact unreachable and 34126 communicates this fact to the compiler. 34127 34128 Another use for `__builtin_unreachable' is following a call a 34129 function that never returns but that is not declared 34130 `__attribute__((noreturn))', as in this example: 34131 34132 void function_that_never_returns (void); 34133 34134 int g (int c) 34135 { 34136 if (c) 34137 { 34138 return 1; 34139 } 34140 else 34141 { 34142 function_that_never_returns (); 34143 __builtin_unreachable (); 34144 } 34145 } 34146 34147 34148 -- Built-in Function: void *__builtin_assume_aligned (const void *EXP, 34149 size_t ALIGN, ...) 34150 This function returns its first argument, and allows the compiler 34151 to assume that the returned pointer is at least ALIGN bytes 34152 aligned. This built-in can have either two or three arguments, if 34153 it has three, the third argument should have integer type, and if 34154 it is nonzero means misalignment offset. For example: 34155 34156 void *x = __builtin_assume_aligned (arg, 16); 34157 34158 means that the compiler can assume `x', set to `arg', is at least 34159 16-byte aligned, while: 34160 34161 void *x = __builtin_assume_aligned (arg, 32, 8); 34162 34163 means that the compiler can assume for `x', set to `arg', that 34164 `(char *) x - 8' is 32-byte aligned. 34165 34166 -- Built-in Function: int __builtin_LINE () 34167 This function is the equivalent to the preprocessor `__LINE__' 34168 macro and returns the line number of the invocation of the 34169 built-in. In a C++ default argument for a function F, it gets the 34170 line number of the call to F. 34171 34172 -- Built-in Function: const char * __builtin_FUNCTION () 34173 This function is the equivalent to the preprocessor `__FUNCTION__' 34174 macro and returns the function name the invocation of the built-in 34175 is in. 34176 34177 -- Built-in Function: const char * __builtin_FILE () 34178 This function is the equivalent to the preprocessor `__FILE__' 34179 macro and returns the file name the invocation of the built-in is 34180 in. In a C++ default argument for a function F, it gets the file 34181 name of the call to F. 34182 34183 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char 34184 *END) 34185 This function is used to flush the processor's instruction cache 34186 for the region of memory between BEGIN inclusive and END 34187 exclusive. Some targets require that the instruction cache be 34188 flushed, after modifying memory containing code, in order to obtain 34189 deterministic behavior. 34190 34191 If the target does not require instruction cache flushes, 34192 `__builtin___clear_cache' has no effect. Otherwise either 34193 instructions are emitted in-line to clear the instruction cache or 34194 a call to the `__clear_cache' function in libgcc is made. 34195 34196 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 34197 This function is used to minimize cache-miss latency by moving 34198 data into a cache before it is accessed. You can insert calls to 34199 `__builtin_prefetch' into code for which you know addresses of 34200 data in memory that is likely to be accessed soon. If the target 34201 supports them, data prefetch instructions are generated. If the 34202 prefetch is done early enough before the access then the data will 34203 be in the cache by the time it is accessed. 34204 34205 The value of ADDR is the address of the memory to prefetch. There 34206 are two optional arguments, RW and LOCALITY. The value of RW is a 34207 compile-time constant one or zero; one means that the prefetch is 34208 preparing for a write to the memory address and zero, the default, 34209 means that the prefetch is preparing for a read. The value 34210 LOCALITY must be a compile-time constant integer between zero and 34211 three. A value of zero means that the data has no temporal 34212 locality, so it need not be left in the cache after the access. A 34213 value of three means that the data has a high degree of temporal 34214 locality and should be left in all levels of cache possible. 34215 Values of one and two mean, respectively, a low or moderate degree 34216 of temporal locality. The default is three. 34217 34218 for (i = 0; i < n; i++) 34219 { 34220 a[i] = a[i] + b[i]; 34221 __builtin_prefetch (&a[i+j], 1, 1); 34222 __builtin_prefetch (&b[i+j], 0, 1); 34223 /* ... */ 34224 } 34225 34226 Data prefetch does not generate faults if ADDR is invalid, but the 34227 address expression itself must be valid. For example, a prefetch 34228 of `p->next' does not fault if `p->next' is not a valid address, 34229 but evaluation faults if `p' is not a valid address. 34230 34231 If the target does not support data prefetch, the address 34232 expression is evaluated if it includes side effects but no other 34233 code is generated and GCC does not issue a warning. 34234 34235 -- Built-in Function: double __builtin_huge_val (void) 34236 Returns a positive infinity, if supported by the floating-point 34237 format, else `DBL_MAX'. This function is suitable for 34238 implementing the ISO C macro `HUGE_VAL'. 34239 34240 -- Built-in Function: float __builtin_huge_valf (void) 34241 Similar to `__builtin_huge_val', except the return type is `float'. 34242 34243 -- Built-in Function: long double __builtin_huge_vall (void) 34244 Similar to `__builtin_huge_val', except the return type is `long 34245 double'. 34246 34247 -- Built-in Function: int __builtin_fpclassify (int, int, int, int, 34248 int, ...) 34249 This built-in implements the C99 fpclassify functionality. The 34250 first five int arguments should be the target library's notion of 34251 the possible FP classes and are used for return values. They must 34252 be constant values and they must appear in this order: `FP_NAN', 34253 `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'. The 34254 ellipsis is for exactly one floating-point value to classify. GCC 34255 treats the last argument as type-generic, which means it does not 34256 do default promotion from float to double. 34257 34258 -- Built-in Function: double __builtin_inf (void) 34259 Similar to `__builtin_huge_val', except a warning is generated if 34260 the target floating-point format does not support infinities. 34261 34262 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 34263 Similar to `__builtin_inf', except the return type is `_Decimal32'. 34264 34265 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 34266 Similar to `__builtin_inf', except the return type is `_Decimal64'. 34267 34268 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 34269 Similar to `__builtin_inf', except the return type is 34270 `_Decimal128'. 34271 34272 -- Built-in Function: float __builtin_inff (void) 34273 Similar to `__builtin_inf', except the return type is `float'. 34274 This function is suitable for implementing the ISO C99 macro 34275 `INFINITY'. 34276 34277 -- Built-in Function: long double __builtin_infl (void) 34278 Similar to `__builtin_inf', except the return type is `long 34279 double'. 34280 34281 -- Built-in Function: int __builtin_isinf_sign (...) 34282 Similar to `isinf', except the return value is -1 for an argument 34283 of `-Inf' and 1 for an argument of `+Inf'. Note while the 34284 parameter list is an ellipsis, this function only accepts exactly 34285 one floating-point argument. GCC treats this parameter as 34286 type-generic, which means it does not do default promotion from 34287 float to double. 34288 34289 -- Built-in Function: double __builtin_nan (const char *str) 34290 This is an implementation of the ISO C99 function `nan'. 34291 34292 Since ISO C99 defines this function in terms of `strtod', which we 34293 do not implement, a description of the parsing is in order. The 34294 string is parsed as by `strtol'; that is, the base is recognized by 34295 leading `0' or `0x' prefixes. The number parsed is placed in the 34296 significand such that the least significant bit of the number is 34297 at the least significant bit of the significand. The number is 34298 truncated to fit the significand field provided. The significand 34299 is forced to be a quiet NaN. 34300 34301 This function, if given a string literal all of which would have 34302 been consumed by `strtol', is evaluated early enough that it is 34303 considered a compile-time constant. 34304 34305 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 34306 Similar to `__builtin_nan', except the return type is `_Decimal32'. 34307 34308 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 34309 Similar to `__builtin_nan', except the return type is `_Decimal64'. 34310 34311 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 34312 Similar to `__builtin_nan', except the return type is 34313 `_Decimal128'. 34314 34315 -- Built-in Function: float __builtin_nanf (const char *str) 34316 Similar to `__builtin_nan', except the return type is `float'. 34317 34318 -- Built-in Function: long double __builtin_nanl (const char *str) 34319 Similar to `__builtin_nan', except the return type is `long 34320 double'. 34321 34322 -- Built-in Function: double __builtin_nans (const char *str) 34323 Similar to `__builtin_nan', except the significand is forced to be 34324 a signaling NaN. The `nans' function is proposed by WG14 N965. 34325 34326 -- Built-in Function: float __builtin_nansf (const char *str) 34327 Similar to `__builtin_nans', except the return type is `float'. 34328 34329 -- Built-in Function: long double __builtin_nansl (const char *str) 34330 Similar to `__builtin_nans', except the return type is `long 34331 double'. 34332 34333 -- Built-in Function: int __builtin_ffs (int x) 34334 Returns one plus the index of the least significant 1-bit of X, or 34335 if X is zero, returns zero. 34336 34337 -- Built-in Function: int __builtin_clz (unsigned int x) 34338 Returns the number of leading 0-bits in X, starting at the most 34339 significant bit position. If X is 0, the result is undefined. 34340 34341 -- Built-in Function: int __builtin_ctz (unsigned int x) 34342 Returns the number of trailing 0-bits in X, starting at the least 34343 significant bit position. If X is 0, the result is undefined. 34344 34345 -- Built-in Function: int __builtin_clrsb (int x) 34346 Returns the number of leading redundant sign bits in X, i.e. the 34347 number of bits following the most significant bit that are 34348 identical to it. There are no special cases for 0 or other values. 34349 34350 -- Built-in Function: int __builtin_popcount (unsigned int x) 34351 Returns the number of 1-bits in X. 34352 34353 -- Built-in Function: int __builtin_parity (unsigned int x) 34354 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 34355 34356 -- Built-in Function: int __builtin_ffsl (long) 34357 Similar to `__builtin_ffs', except the argument type is `long'. 34358 34359 -- Built-in Function: int __builtin_clzl (unsigned long) 34360 Similar to `__builtin_clz', except the argument type is `unsigned 34361 long'. 34362 34363 -- Built-in Function: int __builtin_ctzl (unsigned long) 34364 Similar to `__builtin_ctz', except the argument type is `unsigned 34365 long'. 34366 34367 -- Built-in Function: int __builtin_clrsbl (long) 34368 Similar to `__builtin_clrsb', except the argument type is `long'. 34369 34370 -- Built-in Function: int __builtin_popcountl (unsigned long) 34371 Similar to `__builtin_popcount', except the argument type is 34372 `unsigned long'. 34373 34374 -- Built-in Function: int __builtin_parityl (unsigned long) 34375 Similar to `__builtin_parity', except the argument type is 34376 `unsigned long'. 34377 34378 -- Built-in Function: int __builtin_ffsll (long long) 34379 Similar to `__builtin_ffs', except the argument type is `long 34380 long'. 34381 34382 -- Built-in Function: int __builtin_clzll (unsigned long long) 34383 Similar to `__builtin_clz', except the argument type is `unsigned 34384 long long'. 34385 34386 -- Built-in Function: int __builtin_ctzll (unsigned long long) 34387 Similar to `__builtin_ctz', except the argument type is `unsigned 34388 long long'. 34389 34390 -- Built-in Function: int __builtin_clrsbll (long long) 34391 Similar to `__builtin_clrsb', except the argument type is `long 34392 long'. 34393 34394 -- Built-in Function: int __builtin_popcountll (unsigned long long) 34395 Similar to `__builtin_popcount', except the argument type is 34396 `unsigned long long'. 34397 34398 -- Built-in Function: int __builtin_parityll (unsigned long long) 34399 Similar to `__builtin_parity', except the argument type is 34400 `unsigned long long'. 34401 34402 -- Built-in Function: double __builtin_powi (double, int) 34403 Returns the first argument raised to the power of the second. 34404 Unlike the `pow' function no guarantees about precision and 34405 rounding are made. 34406 34407 -- Built-in Function: float __builtin_powif (float, int) 34408 Similar to `__builtin_powi', except the argument and return types 34409 are `float'. 34410 34411 -- Built-in Function: long double __builtin_powil (long double, int) 34412 Similar to `__builtin_powi', except the argument and return types 34413 are `long double'. 34414 34415 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x) 34416 Returns X with the order of the bytes reversed; for example, 34417 `0xaabb' becomes `0xbbaa'. Byte here always means exactly 8 bits. 34418 34419 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x) 34420 Similar to `__builtin_bswap16', except the argument and return 34421 types are 32 bit. 34422 34423 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x) 34424 Similar to `__builtin_bswap32', except the argument and return 34425 types are 64 bit. 34426 34427 34428File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 34429 344306.58 Built-in Functions Specific to Particular Target Machines 34431============================================================== 34432 34433On some target machines, GCC supports many built-in functions specific 34434to those machines. Generally these generate calls to specific machine 34435instructions, but allow the compiler to schedule those calls. 34436 34437* Menu: 34438 34439* AArch64 Built-in Functions:: 34440* Alpha Built-in Functions:: 34441* Altera Nios II Built-in Functions:: 34442* ARC Built-in Functions:: 34443* ARC SIMD Built-in Functions:: 34444* ARM iWMMXt Built-in Functions:: 34445* ARM C Language Extensions (ACLE):: 34446* ARM Floating Point Status and Control Intrinsics:: 34447* AVR Built-in Functions:: 34448* Blackfin Built-in Functions:: 34449* FR-V Built-in Functions:: 34450* MIPS DSP Built-in Functions:: 34451* MIPS Paired-Single Support:: 34452* MIPS Loongson Built-in Functions:: 34453* Other MIPS Built-in Functions:: 34454* MSP430 Built-in Functions:: 34455* NDS32 Built-in Functions:: 34456* picoChip Built-in Functions:: 34457* PowerPC Built-in Functions:: 34458* PowerPC AltiVec/VSX Built-in Functions:: 34459* PowerPC Hardware Transactional Memory Built-in Functions:: 34460* RX Built-in Functions:: 34461* S/390 System z Built-in Functions:: 34462* SH Built-in Functions:: 34463* SPARC VIS Built-in Functions:: 34464* SPU Built-in Functions:: 34465* TI C6X Built-in Functions:: 34466* TILE-Gx Built-in Functions:: 34467* TILEPro Built-in Functions:: 34468* x86 Built-in Functions:: 34469* x86 transactional memory intrinsics:: 34470 34471 34472File: gcc.info, Node: AArch64 Built-in Functions, Next: Alpha Built-in Functions, Up: Target Builtins 34473 344746.58.1 AArch64 Built-in Functions 34475--------------------------------- 34476 34477These built-in functions are available for the AArch64 family of 34478processors. 34479 unsigned int __builtin_aarch64_get_fpcr () 34480 void __builtin_aarch64_set_fpcr (unsigned int) 34481 unsigned int __builtin_aarch64_get_fpsr () 34482 void __builtin_aarch64_set_fpsr (unsigned int) 34483 34484 34485File: gcc.info, Node: Alpha Built-in Functions, Next: Altera Nios II Built-in Functions, Prev: AArch64 Built-in Functions, Up: Target Builtins 34486 344876.58.2 Alpha Built-in Functions 34488------------------------------- 34489 34490These built-in functions are available for the Alpha family of 34491processors, depending on the command-line switches used. 34492 34493 The following built-in functions are always available. They all 34494generate the machine instruction that is part of the name. 34495 34496 long __builtin_alpha_implver (void) 34497 long __builtin_alpha_rpcc (void) 34498 long __builtin_alpha_amask (long) 34499 long __builtin_alpha_cmpbge (long, long) 34500 long __builtin_alpha_extbl (long, long) 34501 long __builtin_alpha_extwl (long, long) 34502 long __builtin_alpha_extll (long, long) 34503 long __builtin_alpha_extql (long, long) 34504 long __builtin_alpha_extwh (long, long) 34505 long __builtin_alpha_extlh (long, long) 34506 long __builtin_alpha_extqh (long, long) 34507 long __builtin_alpha_insbl (long, long) 34508 long __builtin_alpha_inswl (long, long) 34509 long __builtin_alpha_insll (long, long) 34510 long __builtin_alpha_insql (long, long) 34511 long __builtin_alpha_inswh (long, long) 34512 long __builtin_alpha_inslh (long, long) 34513 long __builtin_alpha_insqh (long, long) 34514 long __builtin_alpha_mskbl (long, long) 34515 long __builtin_alpha_mskwl (long, long) 34516 long __builtin_alpha_mskll (long, long) 34517 long __builtin_alpha_mskql (long, long) 34518 long __builtin_alpha_mskwh (long, long) 34519 long __builtin_alpha_msklh (long, long) 34520 long __builtin_alpha_mskqh (long, long) 34521 long __builtin_alpha_umulh (long, long) 34522 long __builtin_alpha_zap (long, long) 34523 long __builtin_alpha_zapnot (long, long) 34524 34525 The following built-in functions are always with `-mmax' or 34526`-mcpu=CPU' where CPU is `pca56' or later. They all generate the 34527machine instruction that is part of the name. 34528 34529 long __builtin_alpha_pklb (long) 34530 long __builtin_alpha_pkwb (long) 34531 long __builtin_alpha_unpkbl (long) 34532 long __builtin_alpha_unpkbw (long) 34533 long __builtin_alpha_minub8 (long, long) 34534 long __builtin_alpha_minsb8 (long, long) 34535 long __builtin_alpha_minuw4 (long, long) 34536 long __builtin_alpha_minsw4 (long, long) 34537 long __builtin_alpha_maxub8 (long, long) 34538 long __builtin_alpha_maxsb8 (long, long) 34539 long __builtin_alpha_maxuw4 (long, long) 34540 long __builtin_alpha_maxsw4 (long, long) 34541 long __builtin_alpha_perr (long, long) 34542 34543 The following built-in functions are always with `-mcix' or 34544`-mcpu=CPU' where CPU is `ev67' or later. They all generate the 34545machine instruction that is part of the name. 34546 34547 long __builtin_alpha_cttz (long) 34548 long __builtin_alpha_ctlz (long) 34549 long __builtin_alpha_ctpop (long) 34550 34551 The following built-in functions are available on systems that use the 34552OSF/1 PALcode. Normally they invoke the `rduniq' and `wruniq' PAL 34553calls, but when invoked with `-mtls-kernel', they invoke `rdval' and 34554`wrval'. 34555 34556 void *__builtin_thread_pointer (void) 34557 void __builtin_set_thread_pointer (void *) 34558 34559 34560File: gcc.info, Node: Altera Nios II Built-in Functions, Next: ARC Built-in Functions, Prev: Alpha Built-in Functions, Up: Target Builtins 34561 345626.58.3 Altera Nios II Built-in Functions 34563---------------------------------------- 34564 34565These built-in functions are available for the Altera Nios II family of 34566processors. 34567 34568 The following built-in functions are always available. They all 34569generate the machine instruction that is part of the name. 34570 34571 int __builtin_ldbio (volatile const void *) 34572 int __builtin_ldbuio (volatile const void *) 34573 int __builtin_ldhio (volatile const void *) 34574 int __builtin_ldhuio (volatile const void *) 34575 int __builtin_ldwio (volatile const void *) 34576 void __builtin_stbio (volatile void *, int) 34577 void __builtin_sthio (volatile void *, int) 34578 void __builtin_stwio (volatile void *, int) 34579 void __builtin_sync (void) 34580 int __builtin_rdctl (int) 34581 void __builtin_wrctl (int, int) 34582 34583 The following built-in functions are always available. They all 34584generate a Nios II Custom Instruction. The name of the function 34585represents the types that the function takes and returns. The letter 34586before the `n' is the return type or void if absent. The `n' represents 34587the first parameter to all the custom instructions, the custom 34588instruction number. The two letters after the `n' represent the up to 34589two parameters to the function. 34590 34591 The letters represent the following data types: 34592`<no letter>' 34593 `void' for return type and no parameter for parameter types. 34594 34595`i' 34596 `int' for return type and parameter type 34597 34598`f' 34599 `float' for return type and parameter type 34600 34601`p' 34602 `void *' for return type and parameter type 34603 34604 34605 And the function names are: 34606 void __builtin_custom_n (void) 34607 void __builtin_custom_ni (int) 34608 void __builtin_custom_nf (float) 34609 void __builtin_custom_np (void *) 34610 void __builtin_custom_nii (int, int) 34611 void __builtin_custom_nif (int, float) 34612 void __builtin_custom_nip (int, void *) 34613 void __builtin_custom_nfi (float, int) 34614 void __builtin_custom_nff (float, float) 34615 void __builtin_custom_nfp (float, void *) 34616 void __builtin_custom_npi (void *, int) 34617 void __builtin_custom_npf (void *, float) 34618 void __builtin_custom_npp (void *, void *) 34619 int __builtin_custom_in (void) 34620 int __builtin_custom_ini (int) 34621 int __builtin_custom_inf (float) 34622 int __builtin_custom_inp (void *) 34623 int __builtin_custom_inii (int, int) 34624 int __builtin_custom_inif (int, float) 34625 int __builtin_custom_inip (int, void *) 34626 int __builtin_custom_infi (float, int) 34627 int __builtin_custom_inff (float, float) 34628 int __builtin_custom_infp (float, void *) 34629 int __builtin_custom_inpi (void *, int) 34630 int __builtin_custom_inpf (void *, float) 34631 int __builtin_custom_inpp (void *, void *) 34632 float __builtin_custom_fn (void) 34633 float __builtin_custom_fni (int) 34634 float __builtin_custom_fnf (float) 34635 float __builtin_custom_fnp (void *) 34636 float __builtin_custom_fnii (int, int) 34637 float __builtin_custom_fnif (int, float) 34638 float __builtin_custom_fnip (int, void *) 34639 float __builtin_custom_fnfi (float, int) 34640 float __builtin_custom_fnff (float, float) 34641 float __builtin_custom_fnfp (float, void *) 34642 float __builtin_custom_fnpi (void *, int) 34643 float __builtin_custom_fnpf (void *, float) 34644 float __builtin_custom_fnpp (void *, void *) 34645 void * __builtin_custom_pn (void) 34646 void * __builtin_custom_pni (int) 34647 void * __builtin_custom_pnf (float) 34648 void * __builtin_custom_pnp (void *) 34649 void * __builtin_custom_pnii (int, int) 34650 void * __builtin_custom_pnif (int, float) 34651 void * __builtin_custom_pnip (int, void *) 34652 void * __builtin_custom_pnfi (float, int) 34653 void * __builtin_custom_pnff (float, float) 34654 void * __builtin_custom_pnfp (float, void *) 34655 void * __builtin_custom_pnpi (void *, int) 34656 void * __builtin_custom_pnpf (void *, float) 34657 void * __builtin_custom_pnpp (void *, void *) 34658 34659 34660File: gcc.info, Node: ARC Built-in Functions, Next: ARC SIMD Built-in Functions, Prev: Altera Nios II Built-in Functions, Up: Target Builtins 34661 346626.58.4 ARC Built-in Functions 34663----------------------------- 34664 34665The following built-in functions are provided for ARC targets. The 34666built-ins generate the corresponding assembly instructions. In the 34667examples given below, the generated code often requires an operand or 34668result to be in a register. Where necessary further code will be 34669generated to ensure this is true, but for brevity this is not described 34670in each case. 34671 34672 _Note:_ Using a built-in to generate an instruction not supported by a 34673target may cause problems. At present the compiler is not guaranteed to 34674detect such misuse, and as a result an internal compiler error may be 34675generated. 34676 34677 -- Built-in Function: int __builtin_arc_aligned (void *VAL, int 34678 ALIGNVAL) 34679 Return 1 if VAL is known to have the byte alignment given by 34680 ALIGNVAL, otherwise return 0. Note that this is different from 34681 __alignof__(*(char *)VAL) >= alignval 34682 because __alignof__ sees only the type of the dereference, whereas 34683 __builtin_arc_align uses alignment information from the pointer as 34684 well as from the pointed-to type. The information available will 34685 depend on optimization level. 34686 34687 -- Built-in Function: void __builtin_arc_brk (void) 34688 Generates 34689 brk 34690 34691 -- Built-in Function: unsigned int __builtin_arc_core_read (unsigned 34692 int REGNO) 34693 The operand is the number of a register to be read. Generates: 34694 mov DEST, rREGNO 34695 where the value in DEST will be the result returned from the 34696 built-in. 34697 34698 -- Built-in Function: void __builtin_arc_core_write (unsigned int 34699 REGNO, unsigned int VAL) 34700 The first operand is the number of a register to be written, the 34701 second operand is a compile time constant to write into that 34702 register. Generates: 34703 mov rREGNO, VAL 34704 34705 -- Built-in Function: int __builtin_arc_divaw (int A, int B) 34706 Only available if either `-mcpu=ARC700' or `-meA' is set. 34707 Generates: 34708 divaw DEST, A, B 34709 where the value in DEST will be the result returned from the 34710 built-in. 34711 34712 -- Built-in Function: void __builtin_arc_flag (unsigned int A) 34713 Generates 34714 flag A 34715 34716 -- Built-in Function: unsigned int __builtin_arc_lr (unsigned int AUXR) 34717 The operand, AUXV, is the address of an auxiliary register and 34718 must be a compile time constant. Generates: 34719 lr DEST, [AUXR] 34720 Where the value in DEST will be the result returned from the 34721 built-in. 34722 34723 -- Built-in Function: void __builtin_arc_mul64 (int A, int B) 34724 Only available with `-mmul64'. Generates: 34725 mul64 A, B 34726 34727 -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A, 34728 unsigned int B) 34729 Only available with `-mmul64'. Generates: 34730 mulu64 A, B 34731 34732 -- Built-in Function: void __builtin_arc_nop (void) 34733 Generates: 34734 nop 34735 34736 -- Built-in Function: int __builtin_arc_norm (int SRC) 34737 Only valid if the `norm' instruction is available through the 34738 `-mnorm' option or by default with `-mcpu=ARC700'. Generates: 34739 norm DEST, SRC 34740 Where the value in DEST will be the result returned from the 34741 built-in. 34742 34743 -- Built-in Function: short int __builtin_arc_normw (short int SRC) 34744 Only valid if the `normw' instruction is available through the 34745 `-mnorm' option or by default with `-mcpu=ARC700'. Generates: 34746 normw DEST, SRC 34747 Where the value in DEST will be the result returned from the 34748 built-in. 34749 34750 -- Built-in Function: void __builtin_arc_rtie (void) 34751 Generates: 34752 rtie 34753 34754 -- Built-in Function: void __builtin_arc_sleep (int A 34755 Generates: 34756 sleep A 34757 34758 -- Built-in Function: void __builtin_arc_sr (unsigned int AUXR, 34759 unsigned int VAL) 34760 The first argument, AUXV, is the address of an auxiliary register, 34761 the second argument, VAL, is a compile time constant to be written 34762 to the register. Generates: 34763 sr AUXR, [VAL] 34764 34765 -- Built-in Function: int __builtin_arc_swap (int SRC) 34766 Only valid with `-mswap'. Generates: 34767 swap DEST, SRC 34768 Where the value in DEST will be the result returned from the 34769 built-in. 34770 34771 -- Built-in Function: void __builtin_arc_swi (void) 34772 Generates: 34773 swi 34774 34775 -- Built-in Function: void __builtin_arc_sync (void) 34776 Only available with `-mcpu=ARC700'. Generates: 34777 sync 34778 34779 -- Built-in Function: void __builtin_arc_trap_s (unsigned int C) 34780 Only available with `-mcpu=ARC700'. Generates: 34781 trap_s C 34782 34783 -- Built-in Function: void __builtin_arc_unimp_s (void) 34784 Only available with `-mcpu=ARC700'. Generates: 34785 unimp_s 34786 34787 The instructions generated by the following builtins are not 34788considered as candidates for scheduling. They are not moved around by 34789the compiler during scheduling, and thus can be expected to appear 34790where they are put in the C code: 34791 __builtin_arc_brk() 34792 __builtin_arc_core_read() 34793 __builtin_arc_core_write() 34794 __builtin_arc_flag() 34795 __builtin_arc_lr() 34796 __builtin_arc_sleep() 34797 __builtin_arc_sr() 34798 __builtin_arc_swi() 34799 34800 34801File: gcc.info, Node: ARC SIMD Built-in Functions, Next: ARM iWMMXt Built-in Functions, Prev: ARC Built-in Functions, Up: Target Builtins 34802 348036.58.5 ARC SIMD Built-in Functions 34804---------------------------------- 34805 34806SIMD builtins provided by the compiler can be used to generate the 34807vector instructions. This section describes the available builtins and 34808their usage in programs. With the `-msimd' option, the compiler 34809provides 128-bit vector types, which can be specified using the 34810`vector_size' attribute. The header file `arc-simd.h' can be included 34811to use the following predefined types: 34812 typedef int __v4si __attribute__((vector_size(16))); 34813 typedef short __v8hi __attribute__((vector_size(16))); 34814 34815 These types can be used to define 128-bit variables. The built-in 34816functions listed in the following section can be used on these 34817variables to generate the vector operations. 34818 34819 For all builtins, `__builtin_arc_SOMEINSN', the header file 34820`arc-simd.h' also provides equivalent macros called `_SOMEINSN' that 34821can be used for programming ease and improved readability. The 34822following macros for DMA control are also provided: 34823 #define _setup_dma_in_channel_reg _vdiwr 34824 #define _setup_dma_out_channel_reg _vdowr 34825 34826 The following is a complete list of all the SIMD built-ins provided 34827for ARC, grouped by calling signature. 34828 34829 The following take two `__v8hi' arguments and return a `__v8hi' result: 34830 __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi) 34831 __v8hi __builtin_arc_vaddw (__v8hi, __v8hi) 34832 __v8hi __builtin_arc_vand (__v8hi, __v8hi) 34833 __v8hi __builtin_arc_vandaw (__v8hi, __v8hi) 34834 __v8hi __builtin_arc_vavb (__v8hi, __v8hi) 34835 __v8hi __builtin_arc_vavrb (__v8hi, __v8hi) 34836 __v8hi __builtin_arc_vbic (__v8hi, __v8hi) 34837 __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi) 34838 __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi) 34839 __v8hi __builtin_arc_vdifw (__v8hi, __v8hi) 34840 __v8hi __builtin_arc_veqw (__v8hi, __v8hi) 34841 __v8hi __builtin_arc_vh264f (__v8hi, __v8hi) 34842 __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi) 34843 __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi) 34844 __v8hi __builtin_arc_vlew (__v8hi, __v8hi) 34845 __v8hi __builtin_arc_vltw (__v8hi, __v8hi) 34846 __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi) 34847 __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi) 34848 __v8hi __builtin_arc_vminaw (__v8hi, __v8hi) 34849 __v8hi __builtin_arc_vminw (__v8hi, __v8hi) 34850 __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi) 34851 __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi) 34852 __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi) 34853 __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi) 34854 __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi) 34855 __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi) 34856 __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi) 34857 __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi) 34858 __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi) 34859 __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi) 34860 __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi) 34861 __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi) 34862 __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi) 34863 __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi) 34864 __v8hi __builtin_arc_vmrb (__v8hi, __v8hi) 34865 __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi) 34866 __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi) 34867 __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi) 34868 __v8hi __builtin_arc_vmulw (__v8hi, __v8hi) 34869 __v8hi __builtin_arc_vnew (__v8hi, __v8hi) 34870 __v8hi __builtin_arc_vor (__v8hi, __v8hi) 34871 __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi) 34872 __v8hi __builtin_arc_vsubw (__v8hi, __v8hi) 34873 __v8hi __builtin_arc_vsummw (__v8hi, __v8hi) 34874 __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi) 34875 __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi) 34876 __v8hi __builtin_arc_vxor (__v8hi, __v8hi) 34877 __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi) 34878 34879 The following take one `__v8hi' and one `int' argument and return a 34880`__v8hi' result: 34881 34882 __v8hi __builtin_arc_vbaddw (__v8hi, int) 34883 __v8hi __builtin_arc_vbmaxw (__v8hi, int) 34884 __v8hi __builtin_arc_vbminw (__v8hi, int) 34885 __v8hi __builtin_arc_vbmulaw (__v8hi, int) 34886 __v8hi __builtin_arc_vbmulfw (__v8hi, int) 34887 __v8hi __builtin_arc_vbmulw (__v8hi, int) 34888 __v8hi __builtin_arc_vbrsubw (__v8hi, int) 34889 __v8hi __builtin_arc_vbsubw (__v8hi, int) 34890 34891 The following take one `__v8hi' argument and one `int' argument which 34892must be a 3-bit compile time constant indicating a register number 34893I0-I7. They return a `__v8hi' result. 34894 __v8hi __builtin_arc_vasrw (__v8hi, const int) 34895 __v8hi __builtin_arc_vsr8 (__v8hi, const int) 34896 __v8hi __builtin_arc_vsr8aw (__v8hi, const int) 34897 34898 The following take one `__v8hi' argument and one `int' argument which 34899must be a 6-bit compile time constant. They return a `__v8hi' result. 34900 __v8hi __builtin_arc_vasrpwbi (__v8hi, const int) 34901 __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int) 34902 __v8hi __builtin_arc_vasrrwi (__v8hi, const int) 34903 __v8hi __builtin_arc_vasrsrwi (__v8hi, const int) 34904 __v8hi __builtin_arc_vasrwi (__v8hi, const int) 34905 __v8hi __builtin_arc_vsr8awi (__v8hi, const int) 34906 __v8hi __builtin_arc_vsr8i (__v8hi, const int) 34907 34908 The following take one `__v8hi' argument and one `int' argument which 34909must be a 8-bit compile time constant. They return a `__v8hi' result. 34910 __v8hi __builtin_arc_vd6tapf (__v8hi, const int) 34911 __v8hi __builtin_arc_vmvaw (__v8hi, const int) 34912 __v8hi __builtin_arc_vmvw (__v8hi, const int) 34913 __v8hi __builtin_arc_vmvzw (__v8hi, const int) 34914 34915 The following take two `int' arguments, the second of which which must 34916be a 8-bit compile time constant. They return a `__v8hi' result: 34917 __v8hi __builtin_arc_vmovaw (int, const int) 34918 __v8hi __builtin_arc_vmovw (int, const int) 34919 __v8hi __builtin_arc_vmovzw (int, const int) 34920 34921 The following take a single `__v8hi' argument and return a `__v8hi' 34922result: 34923 __v8hi __builtin_arc_vabsaw (__v8hi) 34924 __v8hi __builtin_arc_vabsw (__v8hi) 34925 __v8hi __builtin_arc_vaddsuw (__v8hi) 34926 __v8hi __builtin_arc_vexch1 (__v8hi) 34927 __v8hi __builtin_arc_vexch2 (__v8hi) 34928 __v8hi __builtin_arc_vexch4 (__v8hi) 34929 __v8hi __builtin_arc_vsignw (__v8hi) 34930 __v8hi __builtin_arc_vupbaw (__v8hi) 34931 __v8hi __builtin_arc_vupbw (__v8hi) 34932 __v8hi __builtin_arc_vupsbaw (__v8hi) 34933 __v8hi __builtin_arc_vupsbw (__v8hi) 34934 34935 The following take two `int' arguments and return no result: 34936 void __builtin_arc_vdirun (int, int) 34937 void __builtin_arc_vdorun (int, int) 34938 34939 The following take two `int' arguments and return no result. The 34940first argument must a 3-bit compile time constant indicating one of the 34941DR0-DR7 DMA setup channels: 34942 void __builtin_arc_vdiwr (const int, int) 34943 void __builtin_arc_vdowr (const int, int) 34944 34945 The following take an `int' argument and return no result: 34946 void __builtin_arc_vendrec (int) 34947 void __builtin_arc_vrec (int) 34948 void __builtin_arc_vrecrun (int) 34949 void __builtin_arc_vrun (int) 34950 34951 The following take a `__v8hi' argument and two `int' arguments and 34952return a `__v8hi' result. The second argument must be a 3-bit compile 34953time constants, indicating one the registers I0-I7, and the third 34954argument must be an 8-bit compile time constant. 34955 34956 _Note:_ Although the equivalent hardware instructions do not take an 34957SIMD register as an operand, these builtins overwrite the relevant bits 34958of the `__v8hi' register provided as the first argument with the value 34959loaded from the `[Ib, u8]' location in the SDM. 34960 34961 __v8hi __builtin_arc_vld32 (__v8hi, const int, const int) 34962 __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int) 34963 __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int) 34964 __v8hi __builtin_arc_vld64 (__v8hi, const int, const int) 34965 34966 The following take two `int' arguments and return a `__v8hi' result. 34967The first argument must be a 3-bit compile time constants, indicating 34968one the registers I0-I7, and the second argument must be an 8-bit 34969compile time constant. 34970 34971 __v8hi __builtin_arc_vld128 (const int, const int) 34972 __v8hi __builtin_arc_vld64w (const int, const int) 34973 34974 The following take a `__v8hi' argument and two `int' arguments and 34975return no result. The second argument must be a 3-bit compile time 34976constants, indicating one the registers I0-I7, and the third argument 34977must be an 8-bit compile time constant. 34978 34979 void __builtin_arc_vst128 (__v8hi, const int, const int) 34980 void __builtin_arc_vst64 (__v8hi, const int, const int) 34981 34982 The following take a `__v8hi' argument and three `int' arguments and 34983return no result. The second argument must be a 3-bit compile-time 34984constant, identifying the 16-bit sub-register to be stored, the third 34985argument must be a 3-bit compile time constants, indicating one the 34986registers I0-I7, and the fourth argument must be an 8-bit compile time 34987constant. 34988 34989 void __builtin_arc_vst16_n (__v8hi, const int, const int, const int) 34990 void __builtin_arc_vst32_n (__v8hi, const int, const int, const int) 34991 34992 34993File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM C Language Extensions (ACLE), Prev: ARC SIMD Built-in Functions, Up: Target Builtins 34994 349956.58.6 ARM iWMMXt Built-in Functions 34996------------------------------------ 34997 34998These built-in functions are available for the ARM family of processors 34999when the `-mcpu=iwmmxt' switch is used: 35000 35001 typedef int v2si __attribute__ ((vector_size (8))); 35002 typedef short v4hi __attribute__ ((vector_size (8))); 35003 typedef char v8qi __attribute__ ((vector_size (8))); 35004 35005 int __builtin_arm_getwcgr0 (void) 35006 void __builtin_arm_setwcgr0 (int) 35007 int __builtin_arm_getwcgr1 (void) 35008 void __builtin_arm_setwcgr1 (int) 35009 int __builtin_arm_getwcgr2 (void) 35010 void __builtin_arm_setwcgr2 (int) 35011 int __builtin_arm_getwcgr3 (void) 35012 void __builtin_arm_setwcgr3 (int) 35013 int __builtin_arm_textrmsb (v8qi, int) 35014 int __builtin_arm_textrmsh (v4hi, int) 35015 int __builtin_arm_textrmsw (v2si, int) 35016 int __builtin_arm_textrmub (v8qi, int) 35017 int __builtin_arm_textrmuh (v4hi, int) 35018 int __builtin_arm_textrmuw (v2si, int) 35019 v8qi __builtin_arm_tinsrb (v8qi, int, int) 35020 v4hi __builtin_arm_tinsrh (v4hi, int, int) 35021 v2si __builtin_arm_tinsrw (v2si, int, int) 35022 long long __builtin_arm_tmia (long long, int, int) 35023 long long __builtin_arm_tmiabb (long long, int, int) 35024 long long __builtin_arm_tmiabt (long long, int, int) 35025 long long __builtin_arm_tmiaph (long long, int, int) 35026 long long __builtin_arm_tmiatb (long long, int, int) 35027 long long __builtin_arm_tmiatt (long long, int, int) 35028 int __builtin_arm_tmovmskb (v8qi) 35029 int __builtin_arm_tmovmskh (v4hi) 35030 int __builtin_arm_tmovmskw (v2si) 35031 long long __builtin_arm_waccb (v8qi) 35032 long long __builtin_arm_wacch (v4hi) 35033 long long __builtin_arm_waccw (v2si) 35034 v8qi __builtin_arm_waddb (v8qi, v8qi) 35035 v8qi __builtin_arm_waddbss (v8qi, v8qi) 35036 v8qi __builtin_arm_waddbus (v8qi, v8qi) 35037 v4hi __builtin_arm_waddh (v4hi, v4hi) 35038 v4hi __builtin_arm_waddhss (v4hi, v4hi) 35039 v4hi __builtin_arm_waddhus (v4hi, v4hi) 35040 v2si __builtin_arm_waddw (v2si, v2si) 35041 v2si __builtin_arm_waddwss (v2si, v2si) 35042 v2si __builtin_arm_waddwus (v2si, v2si) 35043 v8qi __builtin_arm_walign (v8qi, v8qi, int) 35044 long long __builtin_arm_wand(long long, long long) 35045 long long __builtin_arm_wandn (long long, long long) 35046 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 35047 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 35048 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 35049 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 35050 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 35051 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 35052 v2si __builtin_arm_wcmpeqw (v2si, v2si) 35053 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 35054 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 35055 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 35056 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 35057 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 35058 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 35059 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 35060 long long __builtin_arm_wmacsz (v4hi, v4hi) 35061 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 35062 long long __builtin_arm_wmacuz (v4hi, v4hi) 35063 v4hi __builtin_arm_wmadds (v4hi, v4hi) 35064 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 35065 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 35066 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 35067 v2si __builtin_arm_wmaxsw (v2si, v2si) 35068 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 35069 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 35070 v2si __builtin_arm_wmaxuw (v2si, v2si) 35071 v8qi __builtin_arm_wminsb (v8qi, v8qi) 35072 v4hi __builtin_arm_wminsh (v4hi, v4hi) 35073 v2si __builtin_arm_wminsw (v2si, v2si) 35074 v8qi __builtin_arm_wminub (v8qi, v8qi) 35075 v4hi __builtin_arm_wminuh (v4hi, v4hi) 35076 v2si __builtin_arm_wminuw (v2si, v2si) 35077 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 35078 v4hi __builtin_arm_wmulul (v4hi, v4hi) 35079 v4hi __builtin_arm_wmulum (v4hi, v4hi) 35080 long long __builtin_arm_wor (long long, long long) 35081 v2si __builtin_arm_wpackdss (long long, long long) 35082 v2si __builtin_arm_wpackdus (long long, long long) 35083 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 35084 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 35085 v4hi __builtin_arm_wpackwss (v2si, v2si) 35086 v4hi __builtin_arm_wpackwus (v2si, v2si) 35087 long long __builtin_arm_wrord (long long, long long) 35088 long long __builtin_arm_wrordi (long long, int) 35089 v4hi __builtin_arm_wrorh (v4hi, long long) 35090 v4hi __builtin_arm_wrorhi (v4hi, int) 35091 v2si __builtin_arm_wrorw (v2si, long long) 35092 v2si __builtin_arm_wrorwi (v2si, int) 35093 v2si __builtin_arm_wsadb (v2si, v8qi, v8qi) 35094 v2si __builtin_arm_wsadbz (v8qi, v8qi) 35095 v2si __builtin_arm_wsadh (v2si, v4hi, v4hi) 35096 v2si __builtin_arm_wsadhz (v4hi, v4hi) 35097 v4hi __builtin_arm_wshufh (v4hi, int) 35098 long long __builtin_arm_wslld (long long, long long) 35099 long long __builtin_arm_wslldi (long long, int) 35100 v4hi __builtin_arm_wsllh (v4hi, long long) 35101 v4hi __builtin_arm_wsllhi (v4hi, int) 35102 v2si __builtin_arm_wsllw (v2si, long long) 35103 v2si __builtin_arm_wsllwi (v2si, int) 35104 long long __builtin_arm_wsrad (long long, long long) 35105 long long __builtin_arm_wsradi (long long, int) 35106 v4hi __builtin_arm_wsrah (v4hi, long long) 35107 v4hi __builtin_arm_wsrahi (v4hi, int) 35108 v2si __builtin_arm_wsraw (v2si, long long) 35109 v2si __builtin_arm_wsrawi (v2si, int) 35110 long long __builtin_arm_wsrld (long long, long long) 35111 long long __builtin_arm_wsrldi (long long, int) 35112 v4hi __builtin_arm_wsrlh (v4hi, long long) 35113 v4hi __builtin_arm_wsrlhi (v4hi, int) 35114 v2si __builtin_arm_wsrlw (v2si, long long) 35115 v2si __builtin_arm_wsrlwi (v2si, int) 35116 v8qi __builtin_arm_wsubb (v8qi, v8qi) 35117 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 35118 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 35119 v4hi __builtin_arm_wsubh (v4hi, v4hi) 35120 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 35121 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 35122 v2si __builtin_arm_wsubw (v2si, v2si) 35123 v2si __builtin_arm_wsubwss (v2si, v2si) 35124 v2si __builtin_arm_wsubwus (v2si, v2si) 35125 v4hi __builtin_arm_wunpckehsb (v8qi) 35126 v2si __builtin_arm_wunpckehsh (v4hi) 35127 long long __builtin_arm_wunpckehsw (v2si) 35128 v4hi __builtin_arm_wunpckehub (v8qi) 35129 v2si __builtin_arm_wunpckehuh (v4hi) 35130 long long __builtin_arm_wunpckehuw (v2si) 35131 v4hi __builtin_arm_wunpckelsb (v8qi) 35132 v2si __builtin_arm_wunpckelsh (v4hi) 35133 long long __builtin_arm_wunpckelsw (v2si) 35134 v4hi __builtin_arm_wunpckelub (v8qi) 35135 v2si __builtin_arm_wunpckeluh (v4hi) 35136 long long __builtin_arm_wunpckeluw (v2si) 35137 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 35138 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 35139 v2si __builtin_arm_wunpckihw (v2si, v2si) 35140 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 35141 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 35142 v2si __builtin_arm_wunpckilw (v2si, v2si) 35143 long long __builtin_arm_wxor (long long, long long) 35144 long long __builtin_arm_wzero () 35145 35146 35147File: 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 35148 351496.58.7 ARM C Language Extensions (ACLE) 35150--------------------------------------- 35151 35152GCC implements extensions for C as described in the ARM C Language 35153Extensions (ACLE) specification, which can be found at 35154`http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf'. 35155 35156 As a part of ACLE, GCC implements extensions for Advanced SIMD as 35157described in the ARM C Language Extensions Specification. The complete 35158list of Advanced SIMD intrinsics can be found at 35159`http://infocenter.arm.com/help/topic/com.arm.doc.ihi0073a/IHI0073A_arm_neon_intrinsics_ref.pdf'. 35160The built-in intrinsics for the Advanced SIMD extension are available 35161when NEON is enabled. 35162 35163 Currently, ARM and AArch64 back ends do not support ACLE 2.0 fully. 35164Both back ends support CRC32 intrinsics from `arm_acle.h'. The ARM 35165back end's 16-bit floating-point Advanced SIMD intrinsics currently 35166comply to ACLE v1.1. AArch64's back end does not have support for 3516716-bit floating point Advanced SIMD intrinsics yet. 35168 35169 See *Note ARM Options:: and *Note AArch64 Options:: for more 35170information on the availability of extensions. 35171 35172 35173File: gcc.info, Node: ARM Floating Point Status and Control Intrinsics, Next: AVR Built-in Functions, Prev: ARM C Language Extensions (ACLE), Up: Target Builtins 35174 351756.58.8 ARM Floating Point Status and Control Intrinsics 35176------------------------------------------------------- 35177 35178These built-in functions are available for the ARM family of processors 35179with floating-point unit. 35180 35181 unsigned int __builtin_arm_get_fpscr () 35182 void __builtin_arm_set_fpscr (unsigned int) 35183 35184 35185File: gcc.info, Node: AVR Built-in Functions, Next: Blackfin Built-in Functions, Prev: ARM Floating Point Status and Control Intrinsics, Up: Target Builtins 35186 351876.58.9 AVR Built-in Functions 35188----------------------------- 35189 35190For each built-in function for AVR, there is an equally named, 35191uppercase built-in macro defined. That way users can easily query if or 35192if not a specific built-in is implemented or not. For example, if 35193`__builtin_avr_nop' is available the macro `__BUILTIN_AVR_NOP' is 35194defined to `1' and undefined otherwise. 35195 35196 The following built-in functions map to the respective machine 35197instruction, i.e. `nop', `sei', `cli', `sleep', `wdr', `swap', `fmul', 35198`fmuls' resp. `fmulsu'. The three `fmul*' built-ins are implemented as 35199library call if no hardware multiplier is available. 35200 35201 void __builtin_avr_nop (void) 35202 void __builtin_avr_sei (void) 35203 void __builtin_avr_cli (void) 35204 void __builtin_avr_sleep (void) 35205 void __builtin_avr_wdr (void) 35206 unsigned char __builtin_avr_swap (unsigned char) 35207 unsigned int __builtin_avr_fmul (unsigned char, unsigned char) 35208 int __builtin_avr_fmuls (char, char) 35209 int __builtin_avr_fmulsu (char, unsigned char) 35210 35211 In order to delay execution for a specific number of cycles, GCC 35212implements 35213 void __builtin_avr_delay_cycles (unsigned long ticks) 35214 35215`ticks' is the number of ticks to delay execution. Note that this 35216built-in does not take into account the effect of interrupts that might 35217increase delay time. `ticks' must be a compile-time integer constant; 35218delays with a variable number of cycles are not supported. 35219 35220 char __builtin_avr_flash_segment (const __memx void*) 35221 35222This built-in takes a byte address to the 24-bit *Note address space: 35223AVR Named Address Spaces. `__memx' and returns the number of the flash 35224segment (the 64 KiB chunk) where the address points to. Counting 35225starts at `0'. If the address does not point to flash memory, return 35226`-1'. 35227 35228 unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val) 35229 35230Insert bits from BITS into VAL and return the resulting value. The 35231nibbles of MAP determine how the insertion is performed: Let X be the 35232N-th nibble of MAP 35233 1. If X is `0xf', then the N-th bit of VAL is returned unaltered. 35234 35235 2. If X is in the range 0...7, then the N-th result bit is set to the 35236 X-th bit of BITS 35237 35238 3. If X is in the range 8...`0xe', then the N-th result bit is 35239 undefined. 35240 35241One typical use case for this built-in is adjusting input and output 35242values to non-contiguous port layouts. Some examples: 35243 35244 // same as val, bits is unused 35245 __builtin_avr_insert_bits (0xffffffff, bits, val) 35246 35247 // same as bits, val is unused 35248 __builtin_avr_insert_bits (0x76543210, bits, val) 35249 35250 // same as rotating bits by 4 35251 __builtin_avr_insert_bits (0x32107654, bits, 0) 35252 35253 // high nibble of result is the high nibble of val 35254 // low nibble of result is the low nibble of bits 35255 __builtin_avr_insert_bits (0xffff3210, bits, val) 35256 35257 // reverse the bit order of bits 35258 __builtin_avr_insert_bits (0x01234567, bits, 0) 35259 35260 35261File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: AVR Built-in Functions, Up: Target Builtins 35262 352636.58.10 Blackfin Built-in Functions 35264----------------------------------- 35265 35266Currently, there are two Blackfin-specific built-in functions. These 35267are used for generating `CSYNC' and `SSYNC' machine insns without using 35268inline assembly; by using these built-in functions the compiler can 35269automatically add workarounds for hardware errata involving these 35270instructions. These functions are named as follows: 35271 35272 void __builtin_bfin_csync (void) 35273 void __builtin_bfin_ssync (void) 35274 35275 35276File: gcc.info, Node: FR-V Built-in Functions, Next: MIPS DSP Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 35277 352786.58.11 FR-V Built-in Functions 35279------------------------------- 35280 35281GCC provides many FR-V-specific built-in functions. In general, these 35282functions are intended to be compatible with those described by `FR-V 35283Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. 35284The two exceptions are `__MDUNPACKH' and `__MBTOHE', the GCC forms of 35285which pass 128-bit values by pointer rather than by value. 35286 35287 Most of the functions are named after specific FR-V instructions. 35288Such functions are said to be "directly mapped" and are summarized here 35289in tabular form. 35290 35291* Menu: 35292 35293* Argument Types:: 35294* Directly-mapped Integer Functions:: 35295* Directly-mapped Media Functions:: 35296* Raw read/write Functions:: 35297* Other Built-in Functions:: 35298 35299 35300File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 35301 353026.58.11.1 Argument Types 35303........................ 35304 35305The arguments to the built-in functions can be divided into three 35306groups: register numbers, compile-time constants and run-time values. 35307In order to make this classification clear at a glance, the arguments 35308and return values are given the following pseudo types: 35309 35310Pseudo type Real C type Constant? Description 35311`uh' `unsigned short' No an unsigned halfword 35312`uw1' `unsigned int' No an unsigned word 35313`sw1' `int' No a signed word 35314`uw2' `unsigned long long' No an unsigned doubleword 35315`sw2' `long long' No a signed doubleword 35316`const' `int' Yes an integer constant 35317`acc' `int' Yes an ACC register number 35318`iacc' `int' Yes an IACC register number 35319 35320 These pseudo types are not defined by GCC, they are simply a notational 35321convenience used in this manual. 35322 35323 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at 35324run time. They correspond to register operands in the underlying FR-V 35325instructions. 35326 35327 `const' arguments represent immediate operands in the underlying FR-V 35328instructions. They must be compile-time constants. 35329 35330 `acc' arguments are evaluated at compile time and specify the number 35331of an accumulator register. For example, an `acc' argument of 2 35332selects the ACC2 register. 35333 35334 `iacc' arguments are similar to `acc' arguments but specify the number 35335of an IACC register. See *note Other Built-in Functions:: for more 35336details. 35337 35338 35339File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 35340 353416.58.11.2 Directly-Mapped Integer Functions 35342........................................... 35343 35344The functions listed below map directly to FR-V I-type instructions. 35345 35346Function prototype Example usage Assembly output 35347`sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C' 35348`sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C' 35349`sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B' 35350`sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C' 35351`void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B' 35352`void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B' 35353`void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B' 35354`sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C' 35355`sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C' 35356`uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C' 35357 35358 35359File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 35360 353616.58.11.3 Directly-Mapped Media Functions 35362......................................... 35363 35364The functions listed below map directly to FR-V M-type instructions. 35365 35366Function prototype Example usage Assembly output 35367`uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B' 35368`void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B' 35369`sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C' 35370`uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C' 35371`uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C' 35372`void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B' 35373`uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C' 35374`uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B' 35375`void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B' 35376`void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A' 35377`void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA' 35378`uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C' 35379`uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C' 35380`uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C' 35381`uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C' 35382`void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C' 35383`void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C' 35384`void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C' 35385`void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C' 35386`uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C' 35387`uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C' 35388`void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B' 35389`void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B' 35390`uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C' 35391`uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C' 35392`uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C' 35393`void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B' 35394`void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B' 35395`uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C' 35396`uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C' 35397`uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C' 35398`sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B' 35399`uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B' 35400`sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B' 35401`uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B' 35402`sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B' 35403`uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B' 35404`void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C' 35405`void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C' 35406`void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C' 35407`void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C' 35408`void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C' 35409`void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C' 35410`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C' 35411`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C' 35412`uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B' 35413`uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C' 35414`uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C' 35415`sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C' 35416`uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C' 35417`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C' 35418`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C' 35419`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C' 35420`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C' 35421`sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C' 35422`sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C' 35423`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C' 35424`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C' 35425`void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C' 35426sw2)' 35427`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C' 35428`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C' 35429`void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C' 35430sw2)' 35431`void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C' 35432uw2)' 35433`sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C' 35434`uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C' 35435`sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C' 35436`sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C' 35437`uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C' 35438`void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C' 35439sw2)' 35440`void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C' 35441sw2)' 35442`uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B' 35443`uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B' 35444`uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C' 35445`uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C' 35446`sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C' 35447`uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C' 35448`uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C' 35449`sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C' 35450`uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C' 35451`void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B' 35452`sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C' 35453`uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C' 35454`void __MTRAP (void)' `__MTRAP ()' `MTRAP' 35455`uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B' 35456`uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C' 35457`void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B' 35458`void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B' 35459`uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C' 35460 35461 35462File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 35463 354646.58.11.4 Raw Read/Write Functions 35465.................................. 35466 35467This sections describes built-in functions related to read and write 35468instructions to access memory. These functions generate `membar' 35469instructions to flush the I/O load and stores where appropriate, as 35470described in Fujitsu's manual described above. 35471 35472`unsigned char __builtin_read8 (void *DATA)' 35473 35474`unsigned short __builtin_read16 (void *DATA)' 35475 35476`unsigned long __builtin_read32 (void *DATA)' 35477 35478`unsigned long long __builtin_read64 (void *DATA)' 35479 35480`void __builtin_write8 (void *DATA, unsigned char DATUM)' 35481 35482`void __builtin_write16 (void *DATA, unsigned short DATUM)' 35483 35484`void __builtin_write32 (void *DATA, unsigned long DATUM)' 35485 35486`void __builtin_write64 (void *DATA, unsigned long long DATUM)' 35487 35488 35489File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 35490 354916.58.11.5 Other Built-in Functions 35492.................................. 35493 35494This section describes built-in functions that are not named after a 35495specific FR-V instruction. 35496 35497`sw2 __IACCreadll (iacc REG)' 35498 Return the full 64-bit value of IACC0. The REG argument is 35499 reserved for future expansion and must be 0. 35500 35501`sw1 __IACCreadl (iacc REG)' 35502 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 35503 Other values of REG are rejected as invalid. 35504 35505`void __IACCsetll (iacc REG, sw2 X)' 35506 Set the full 64-bit value of IACC0 to X. The REG argument is 35507 reserved for future expansion and must be 0. 35508 35509`void __IACCsetl (iacc REG, sw1 X)' 35510 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 35511 values of REG are rejected as invalid. 35512 35513`void __data_prefetch0 (const void *X)' 35514 Use the `dcpl' instruction to load the contents of address X into 35515 the data cache. 35516 35517`void __data_prefetch (const void *X)' 35518 Use the `nldub' instruction to load the contents of address X into 35519 the data cache. The instruction is issued in slot I1. 35520 35521 35522File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: FR-V Built-in Functions, Up: Target Builtins 35523 355246.58.12 MIPS DSP Built-in Functions 35525----------------------------------- 35526 35527The MIPS DSP Application-Specific Extension (ASE) includes new 35528instructions that are designed to improve the performance of DSP and 35529media applications. It provides instructions that operate on packed 355308-bit/16-bit integer data, Q7, Q15 and Q31 fractional data. 35531 35532 GCC supports MIPS DSP operations using both the generic vector 35533extensions (*note Vector Extensions::) and a collection of 35534MIPS-specific built-in functions. Both kinds of support are enabled by 35535the `-mdsp' command-line option. 35536 35537 Revision 2 of the ASE was introduced in the second half of 2006. This 35538revision adds extra instructions to the original ASE, but is otherwise 35539backwards-compatible with it. You can select revision 2 using the 35540command-line option `-mdspr2'; this option implies `-mdsp'. 35541 35542 The SCOUNT and POS bits of the DSP control register are global. The 35543WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and 35544POS bits. During optimization, the compiler does not delete these 35545instructions and it does not delete calls to functions containing these 35546instructions. 35547 35548 At present, GCC only provides support for operations on 32-bit 35549vectors. The vector type associated with 8-bit integer data is usually 35550called `v4i8', the vector type associated with Q7 is usually called 35551`v4q7', the vector type associated with 16-bit integer data is usually 35552called `v2i16', and the vector type associated with Q15 is usually 35553called `v2q15'. They can be defined in C as follows: 35554 35555 typedef signed char v4i8 __attribute__ ((vector_size(4))); 35556 typedef signed char v4q7 __attribute__ ((vector_size(4))); 35557 typedef short v2i16 __attribute__ ((vector_size(4))); 35558 typedef short v2q15 __attribute__ ((vector_size(4))); 35559 35560 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same 35561way as aggregates. For example: 35562 35563 v4i8 a = {1, 2, 3, 4}; 35564 v4i8 b; 35565 b = (v4i8) {5, 6, 7, 8}; 35566 35567 v2q15 c = {0x0fcb, 0x3a75}; 35568 v2q15 d; 35569 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 35570 35571 _Note:_ The CPU's endianness determines the order in which values are 35572packed. On little-endian targets, the first value is the least 35573significant and the last value is the most significant. The opposite 35574order applies to big-endian targets. For example, the code above sets 35575the lowest byte of `a' to `1' on little-endian targets and `4' on 35576big-endian targets. 35577 35578 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer 35579representation. As shown in this example, the integer representation 35580of a Q7 value can be obtained by multiplying the fractional value by 35581`0x1.0p7'. The equivalent for Q15 values is to multiply by `0x1.0p15'. 35582The equivalent for Q31 values is to multiply by `0x1.0p31'. 35583 35584 The table below lists the `v4i8' and `v2q15' operations for which 35585hardware support exists. `a' and `b' are `v4i8' values, and `c' and 35586`d' are `v2q15' values. 35587 35588C code MIPS instruction 35589`a + b' `addu.qb' 35590`c + d' `addq.ph' 35591`a - b' `subu.qb' 35592`c - d' `subq.ph' 35593 35594 The table below lists the `v2i16' operation for which hardware support 35595exists for the DSP ASE REV 2. `e' and `f' are `v2i16' values. 35596 35597C code MIPS instruction 35598`e * f' `mul.ph' 35599 35600 It is easier to describe the DSP built-in functions if we first define 35601the following types: 35602 35603 typedef int q31; 35604 typedef int i32; 35605 typedef unsigned int ui32; 35606 typedef long long a64; 35607 35608 `q31' and `i32' are actually the same as `int', but we use `q31' to 35609indicate a Q31 fractional value and `i32' to indicate a 32-bit integer 35610value. Similarly, `a64' is the same as `long long', but we use `a64' 35611to indicate values that are placed in one of the four DSP accumulators 35612(`$ac0', `$ac1', `$ac2' or `$ac3'). 35613 35614 Also, some built-in functions prefer or require immediate numbers as 35615parameters, because the corresponding DSP instructions accept both 35616immediate numbers and register operands, or accept immediate numbers 35617only. The immediate parameters are listed as follows. 35618 35619 imm0_3: 0 to 3. 35620 imm0_7: 0 to 7. 35621 imm0_15: 0 to 15. 35622 imm0_31: 0 to 31. 35623 imm0_63: 0 to 63. 35624 imm0_255: 0 to 255. 35625 imm_n32_31: -32 to 31. 35626 imm_n512_511: -512 to 511. 35627 35628 The following built-in functions map directly to a particular MIPS DSP 35629instruction. Please refer to the architecture specification for 35630details on what each instruction does. 35631 35632 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 35633 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 35634 q31 __builtin_mips_addq_s_w (q31, q31) 35635 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 35636 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 35637 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 35638 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 35639 q31 __builtin_mips_subq_s_w (q31, q31) 35640 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 35641 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 35642 i32 __builtin_mips_addsc (i32, i32) 35643 i32 __builtin_mips_addwc (i32, i32) 35644 i32 __builtin_mips_modsub (i32, i32) 35645 i32 __builtin_mips_raddu_w_qb (v4i8) 35646 v2q15 __builtin_mips_absq_s_ph (v2q15) 35647 q31 __builtin_mips_absq_s_w (q31) 35648 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 35649 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 35650 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 35651 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 35652 q31 __builtin_mips_preceq_w_phl (v2q15) 35653 q31 __builtin_mips_preceq_w_phr (v2q15) 35654 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 35655 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 35656 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 35657 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 35658 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 35659 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 35660 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 35661 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 35662 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 35663 v4i8 __builtin_mips_shll_qb (v4i8, i32) 35664 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 35665 v2q15 __builtin_mips_shll_ph (v2q15, i32) 35666 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 35667 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 35668 q31 __builtin_mips_shll_s_w (q31, imm0_31) 35669 q31 __builtin_mips_shll_s_w (q31, i32) 35670 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 35671 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 35672 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 35673 v2q15 __builtin_mips_shra_ph (v2q15, i32) 35674 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 35675 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 35676 q31 __builtin_mips_shra_r_w (q31, imm0_31) 35677 q31 __builtin_mips_shra_r_w (q31, i32) 35678 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 35679 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 35680 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 35681 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 35682 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 35683 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 35684 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 35685 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 35686 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 35687 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 35688 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 35689 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 35690 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 35691 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 35692 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 35693 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 35694 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 35695 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 35696 i32 __builtin_mips_bitrev (i32) 35697 i32 __builtin_mips_insv (i32, i32) 35698 v4i8 __builtin_mips_repl_qb (imm0_255) 35699 v4i8 __builtin_mips_repl_qb (i32) 35700 v2q15 __builtin_mips_repl_ph (imm_n512_511) 35701 v2q15 __builtin_mips_repl_ph (i32) 35702 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 35703 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 35704 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 35705 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 35706 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 35707 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 35708 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 35709 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 35710 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 35711 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 35712 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 35713 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 35714 i32 __builtin_mips_extr_w (a64, imm0_31) 35715 i32 __builtin_mips_extr_w (a64, i32) 35716 i32 __builtin_mips_extr_r_w (a64, imm0_31) 35717 i32 __builtin_mips_extr_s_h (a64, i32) 35718 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 35719 i32 __builtin_mips_extr_rs_w (a64, i32) 35720 i32 __builtin_mips_extr_s_h (a64, imm0_31) 35721 i32 __builtin_mips_extr_r_w (a64, i32) 35722 i32 __builtin_mips_extp (a64, imm0_31) 35723 i32 __builtin_mips_extp (a64, i32) 35724 i32 __builtin_mips_extpdp (a64, imm0_31) 35725 i32 __builtin_mips_extpdp (a64, i32) 35726 a64 __builtin_mips_shilo (a64, imm_n32_31) 35727 a64 __builtin_mips_shilo (a64, i32) 35728 a64 __builtin_mips_mthlip (a64, i32) 35729 void __builtin_mips_wrdsp (i32, imm0_63) 35730 i32 __builtin_mips_rddsp (imm0_63) 35731 i32 __builtin_mips_lbux (void *, i32) 35732 i32 __builtin_mips_lhx (void *, i32) 35733 i32 __builtin_mips_lwx (void *, i32) 35734 a64 __builtin_mips_ldx (void *, i32) [MIPS64 only] 35735 i32 __builtin_mips_bposge32 (void) 35736 a64 __builtin_mips_madd (a64, i32, i32); 35737 a64 __builtin_mips_maddu (a64, ui32, ui32); 35738 a64 __builtin_mips_msub (a64, i32, i32); 35739 a64 __builtin_mips_msubu (a64, ui32, ui32); 35740 a64 __builtin_mips_mult (i32, i32); 35741 a64 __builtin_mips_multu (ui32, ui32); 35742 35743 The following built-in functions map directly to a particular MIPS DSP 35744REV 2 instruction. Please refer to the architecture specification for 35745details on what each instruction does. 35746 35747 v4q7 __builtin_mips_absq_s_qb (v4q7); 35748 v2i16 __builtin_mips_addu_ph (v2i16, v2i16); 35749 v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16); 35750 v4i8 __builtin_mips_adduh_qb (v4i8, v4i8); 35751 v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8); 35752 i32 __builtin_mips_append (i32, i32, imm0_31); 35753 i32 __builtin_mips_balign (i32, i32, imm0_3); 35754 i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8); 35755 i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8); 35756 i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8); 35757 a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16); 35758 a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16); 35759 v2i16 __builtin_mips_mul_ph (v2i16, v2i16); 35760 v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16); 35761 q31 __builtin_mips_mulq_rs_w (q31, q31); 35762 v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15); 35763 q31 __builtin_mips_mulq_s_w (q31, q31); 35764 a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16); 35765 v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16); 35766 v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31); 35767 v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31); 35768 i32 __builtin_mips_prepend (i32, i32, imm0_31); 35769 v4i8 __builtin_mips_shra_qb (v4i8, imm0_7); 35770 v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7); 35771 v4i8 __builtin_mips_shra_qb (v4i8, i32); 35772 v4i8 __builtin_mips_shra_r_qb (v4i8, i32); 35773 v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15); 35774 v2i16 __builtin_mips_shrl_ph (v2i16, i32); 35775 v2i16 __builtin_mips_subu_ph (v2i16, v2i16); 35776 v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16); 35777 v4i8 __builtin_mips_subuh_qb (v4i8, v4i8); 35778 v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8); 35779 v2q15 __builtin_mips_addqh_ph (v2q15, v2q15); 35780 v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15); 35781 q31 __builtin_mips_addqh_w (q31, q31); 35782 q31 __builtin_mips_addqh_r_w (q31, q31); 35783 v2q15 __builtin_mips_subqh_ph (v2q15, v2q15); 35784 v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15); 35785 q31 __builtin_mips_subqh_w (q31, q31); 35786 q31 __builtin_mips_subqh_r_w (q31, q31); 35787 a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16); 35788 a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16); 35789 a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15); 35790 a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15); 35791 a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15); 35792 a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15); 35793 35794 35795File: gcc.info, Node: MIPS Paired-Single Support, Next: MIPS Loongson Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 35796 357976.58.13 MIPS Paired-Single Support 35798---------------------------------- 35799 35800The MIPS64 architecture includes a number of instructions that operate 35801on pairs of single-precision floating-point values. Each pair is 35802packed into a 64-bit floating-point register, with one element being 35803designated the "upper half" and the other being designated the "lower 35804half". 35805 35806 GCC supports paired-single operations using both the generic vector 35807extensions (*note Vector Extensions::) and a collection of 35808MIPS-specific built-in functions. Both kinds of support are enabled by 35809the `-mpaired-single' command-line option. 35810 35811 The vector type associated with paired-single values is usually called 35812`v2sf'. It can be defined in C as follows: 35813 35814 typedef float v2sf __attribute__ ((vector_size (8))); 35815 35816 `v2sf' values are initialized in the same way as aggregates. For 35817example: 35818 35819 v2sf a = {1.5, 9.1}; 35820 v2sf b; 35821 float e, f; 35822 b = (v2sf) {e, f}; 35823 35824 _Note:_ The CPU's endianness determines which value is stored in the 35825upper half of a register and which value is stored in the lower half. 35826On little-endian targets, the first value is the lower one and the 35827second value is the upper one. The opposite order applies to 35828big-endian targets. For example, the code above sets the lower half of 35829`a' to `1.5' on little-endian targets and `9.1' on big-endian targets. 35830 35831 35832File: gcc.info, Node: MIPS Loongson Built-in Functions, Next: Other MIPS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 35833 358346.58.14 MIPS Loongson Built-in Functions 35835---------------------------------------- 35836 35837GCC provides intrinsics to access the SIMD instructions provided by the 35838ST Microelectronics Loongson-2E and -2F processors. These intrinsics, 35839available after inclusion of the `loongson.h' header file, operate on 35840the following 64-bit vector types: 35841 35842 * `uint8x8_t', a vector of eight unsigned 8-bit integers; 35843 35844 * `uint16x4_t', a vector of four unsigned 16-bit integers; 35845 35846 * `uint32x2_t', a vector of two unsigned 32-bit integers; 35847 35848 * `int8x8_t', a vector of eight signed 8-bit integers; 35849 35850 * `int16x4_t', a vector of four signed 16-bit integers; 35851 35852 * `int32x2_t', a vector of two signed 32-bit integers. 35853 35854 The intrinsics provided are listed below; each is named after the 35855machine instruction to which it corresponds, with suffixes added as 35856appropriate to distinguish intrinsics that expand to the same machine 35857instruction yet have different argument types. Refer to the 35858architecture documentation for a description of the functionality of 35859each instruction. 35860 35861 int16x4_t packsswh (int32x2_t s, int32x2_t t); 35862 int8x8_t packsshb (int16x4_t s, int16x4_t t); 35863 uint8x8_t packushb (uint16x4_t s, uint16x4_t t); 35864 uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t); 35865 uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t); 35866 uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t); 35867 int32x2_t paddw_s (int32x2_t s, int32x2_t t); 35868 int16x4_t paddh_s (int16x4_t s, int16x4_t t); 35869 int8x8_t paddb_s (int8x8_t s, int8x8_t t); 35870 uint64_t paddd_u (uint64_t s, uint64_t t); 35871 int64_t paddd_s (int64_t s, int64_t t); 35872 int16x4_t paddsh (int16x4_t s, int16x4_t t); 35873 int8x8_t paddsb (int8x8_t s, int8x8_t t); 35874 uint16x4_t paddush (uint16x4_t s, uint16x4_t t); 35875 uint8x8_t paddusb (uint8x8_t s, uint8x8_t t); 35876 uint64_t pandn_ud (uint64_t s, uint64_t t); 35877 uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t); 35878 uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t); 35879 uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t); 35880 int64_t pandn_sd (int64_t s, int64_t t); 35881 int32x2_t pandn_sw (int32x2_t s, int32x2_t t); 35882 int16x4_t pandn_sh (int16x4_t s, int16x4_t t); 35883 int8x8_t pandn_sb (int8x8_t s, int8x8_t t); 35884 uint16x4_t pavgh (uint16x4_t s, uint16x4_t t); 35885 uint8x8_t pavgb (uint8x8_t s, uint8x8_t t); 35886 uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t); 35887 uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t); 35888 uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t); 35889 int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t); 35890 int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t); 35891 int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t); 35892 uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t); 35893 uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t); 35894 uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t); 35895 int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t); 35896 int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t); 35897 int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t); 35898 uint16x4_t pextrh_u (uint16x4_t s, int field); 35899 int16x4_t pextrh_s (int16x4_t s, int field); 35900 uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t); 35901 uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t); 35902 uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t); 35903 uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t); 35904 int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t); 35905 int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t); 35906 int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t); 35907 int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t); 35908 int32x2_t pmaddhw (int16x4_t s, int16x4_t t); 35909 int16x4_t pmaxsh (int16x4_t s, int16x4_t t); 35910 uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t); 35911 int16x4_t pminsh (int16x4_t s, int16x4_t t); 35912 uint8x8_t pminub (uint8x8_t s, uint8x8_t t); 35913 uint8x8_t pmovmskb_u (uint8x8_t s); 35914 int8x8_t pmovmskb_s (int8x8_t s); 35915 uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t); 35916 int16x4_t pmulhh (int16x4_t s, int16x4_t t); 35917 int16x4_t pmullh (int16x4_t s, int16x4_t t); 35918 int64_t pmuluw (uint32x2_t s, uint32x2_t t); 35919 uint8x8_t pasubub (uint8x8_t s, uint8x8_t t); 35920 uint16x4_t biadd (uint8x8_t s); 35921 uint16x4_t psadbh (uint8x8_t s, uint8x8_t t); 35922 uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order); 35923 int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order); 35924 uint16x4_t psllh_u (uint16x4_t s, uint8_t amount); 35925 int16x4_t psllh_s (int16x4_t s, uint8_t amount); 35926 uint32x2_t psllw_u (uint32x2_t s, uint8_t amount); 35927 int32x2_t psllw_s (int32x2_t s, uint8_t amount); 35928 uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount); 35929 int16x4_t psrlh_s (int16x4_t s, uint8_t amount); 35930 uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount); 35931 int32x2_t psrlw_s (int32x2_t s, uint8_t amount); 35932 uint16x4_t psrah_u (uint16x4_t s, uint8_t amount); 35933 int16x4_t psrah_s (int16x4_t s, uint8_t amount); 35934 uint32x2_t psraw_u (uint32x2_t s, uint8_t amount); 35935 int32x2_t psraw_s (int32x2_t s, uint8_t amount); 35936 uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t); 35937 uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t); 35938 uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t); 35939 int32x2_t psubw_s (int32x2_t s, int32x2_t t); 35940 int16x4_t psubh_s (int16x4_t s, int16x4_t t); 35941 int8x8_t psubb_s (int8x8_t s, int8x8_t t); 35942 uint64_t psubd_u (uint64_t s, uint64_t t); 35943 int64_t psubd_s (int64_t s, int64_t t); 35944 int16x4_t psubsh (int16x4_t s, int16x4_t t); 35945 int8x8_t psubsb (int8x8_t s, int8x8_t t); 35946 uint16x4_t psubush (uint16x4_t s, uint16x4_t t); 35947 uint8x8_t psubusb (uint8x8_t s, uint8x8_t t); 35948 uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t); 35949 uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t); 35950 uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t); 35951 int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t); 35952 int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t); 35953 int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t); 35954 uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t); 35955 uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t); 35956 uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t); 35957 int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t); 35958 int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t); 35959 int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t); 35960 35961* Menu: 35962 35963* Paired-Single Arithmetic:: 35964* Paired-Single Built-in Functions:: 35965* MIPS-3D Built-in Functions:: 35966 35967 35968File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 35969 359706.58.14.1 Paired-Single Arithmetic 35971.................................. 35972 35973The table below lists the `v2sf' operations for which hardware support 35974exists. `a', `b' and `c' are `v2sf' values and `x' is an integral 35975value. 35976 35977C code MIPS instruction 35978`a + b' `add.ps' 35979`a - b' `sub.ps' 35980`-a' `neg.ps' 35981`a * b' `mul.ps' 35982`a * b + c' `madd.ps' 35983`a * b - c' `msub.ps' 35984`-(a * b + c)' `nmadd.ps' 35985`-(a * b - c)' `nmsub.ps' 35986`x ? a : b' `movn.ps'/`movz.ps' 35987 35988 Note that the multiply-accumulate instructions can be disabled using 35989the command-line option `-mno-fused-madd'. 35990 35991 35992File: gcc.info, Node: Paired-Single Built-in Functions, Next: MIPS-3D Built-in Functions, Prev: Paired-Single Arithmetic, Up: MIPS Loongson Built-in Functions 35993 359946.58.14.2 Paired-Single Built-in Functions 35995.......................................... 35996 35997The following paired-single functions map directly to a particular MIPS 35998instruction. Please refer to the architecture specification for 35999details on what each instruction does. 36000 36001`v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 36002 Pair lower lower (`pll.ps'). 36003 36004`v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 36005 Pair upper lower (`pul.ps'). 36006 36007`v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 36008 Pair lower upper (`plu.ps'). 36009 36010`v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 36011 Pair upper upper (`puu.ps'). 36012 36013`v2sf __builtin_mips_cvt_ps_s (float, float)' 36014 Convert pair to paired single (`cvt.ps.s'). 36015 36016`float __builtin_mips_cvt_s_pl (v2sf)' 36017 Convert pair lower to single (`cvt.s.pl'). 36018 36019`float __builtin_mips_cvt_s_pu (v2sf)' 36020 Convert pair upper to single (`cvt.s.pu'). 36021 36022`v2sf __builtin_mips_abs_ps (v2sf)' 36023 Absolute value (`abs.ps'). 36024 36025`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 36026 Align variable (`alnv.ps'). 36027 36028 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 36029 otherwise the result is unpredictable. Please read the 36030 instruction description for details. 36031 36032 The following multi-instruction functions are also available. In each 36033case, COND can be any of the 16 floating-point conditions: `f', `un', 36034`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 36035`lt', `nge', `le' or `ngt'. 36036 36037`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 36038`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 36039 Conditional move based on floating-point comparison (`c.COND.ps', 36040 `movt.ps'/`movf.ps'). 36041 36042 The `movt' functions return the value X computed by: 36043 36044 c.COND.ps CC,A,B 36045 mov.ps X,C 36046 movt.ps X,D,CC 36047 36048 The `movf' functions are similar but use `movf.ps' instead of 36049 `movt.ps'. 36050 36051`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 36052`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 36053 Comparison of two paired-single values (`c.COND.ps', 36054 `bc1t'/`bc1f'). 36055 36056 These functions compare A and B using `c.COND.ps' and return 36057 either the upper or lower half of the result. For example: 36058 36059 v2sf a, b; 36060 if (__builtin_mips_upper_c_eq_ps (a, b)) 36061 upper_halves_are_equal (); 36062 else 36063 upper_halves_are_unequal (); 36064 36065 if (__builtin_mips_lower_c_eq_ps (a, b)) 36066 lower_halves_are_equal (); 36067 else 36068 lower_halves_are_unequal (); 36069 36070 36071File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 36072 360736.58.14.3 MIPS-3D Built-in Functions 36074.................................... 36075 36076The MIPS-3D Application-Specific Extension (ASE) includes additional 36077paired-single instructions that are designed to improve the performance 36078of 3D graphics operations. Support for these instructions is controlled 36079by the `-mips3d' command-line option. 36080 36081 The functions listed below map directly to a particular MIPS-3D 36082instruction. Please refer to the architecture specification for more 36083details on what each instruction does. 36084 36085`v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 36086 Reduction add (`addr.ps'). 36087 36088`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 36089 Reduction multiply (`mulr.ps'). 36090 36091`v2sf __builtin_mips_cvt_pw_ps (v2sf)' 36092 Convert paired single to paired word (`cvt.pw.ps'). 36093 36094`v2sf __builtin_mips_cvt_ps_pw (v2sf)' 36095 Convert paired word to paired single (`cvt.ps.pw'). 36096 36097`float __builtin_mips_recip1_s (float)' 36098`double __builtin_mips_recip1_d (double)' 36099`v2sf __builtin_mips_recip1_ps (v2sf)' 36100 Reduced-precision reciprocal (sequence step 1) (`recip1.FMT'). 36101 36102`float __builtin_mips_recip2_s (float, float)' 36103`double __builtin_mips_recip2_d (double, double)' 36104`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 36105 Reduced-precision reciprocal (sequence step 2) (`recip2.FMT'). 36106 36107`float __builtin_mips_rsqrt1_s (float)' 36108`double __builtin_mips_rsqrt1_d (double)' 36109`v2sf __builtin_mips_rsqrt1_ps (v2sf)' 36110 Reduced-precision reciprocal square root (sequence step 1) 36111 (`rsqrt1.FMT'). 36112 36113`float __builtin_mips_rsqrt2_s (float, float)' 36114`double __builtin_mips_rsqrt2_d (double, double)' 36115`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 36116 Reduced-precision reciprocal square root (sequence step 2) 36117 (`rsqrt2.FMT'). 36118 36119 The following multi-instruction functions are also available. In each 36120case, COND can be any of the 16 floating-point conditions: `f', `un', 36121`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 36122`lt', `nge', `le' or `ngt'. 36123 36124`int __builtin_mips_cabs_COND_s (float A, float B)' 36125`int __builtin_mips_cabs_COND_d (double A, double B)' 36126 Absolute comparison of two scalar values (`cabs.COND.FMT', 36127 `bc1t'/`bc1f'). 36128 36129 These functions compare A and B using `cabs.COND.s' or 36130 `cabs.COND.d' and return the result as a boolean value. For 36131 example: 36132 36133 float a, b; 36134 if (__builtin_mips_cabs_eq_s (a, b)) 36135 true (); 36136 else 36137 false (); 36138 36139`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 36140`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 36141 Absolute comparison of two paired-single values (`cabs.COND.ps', 36142 `bc1t'/`bc1f'). 36143 36144 These functions compare A and B using `cabs.COND.ps' and return 36145 either the upper or lower half of the result. For example: 36146 36147 v2sf a, b; 36148 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 36149 upper_halves_are_equal (); 36150 else 36151 upper_halves_are_unequal (); 36152 36153 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 36154 lower_halves_are_equal (); 36155 else 36156 lower_halves_are_unequal (); 36157 36158`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 36159`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 36160 Conditional move based on absolute comparison (`cabs.COND.ps', 36161 `movt.ps'/`movf.ps'). 36162 36163 The `movt' functions return the value X computed by: 36164 36165 cabs.COND.ps CC,A,B 36166 mov.ps X,C 36167 movt.ps X,D,CC 36168 36169 The `movf' functions are similar but use `movf.ps' instead of 36170 `movt.ps'. 36171 36172`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 36173`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 36174`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 36175`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 36176 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps', 36177 `bc1any2t'/`bc1any2f'). 36178 36179 These functions compare A and B using `c.COND.ps' or 36180 `cabs.COND.ps'. The `any' forms return true if either result is 36181 true and the `all' forms return true if both results are true. 36182 For example: 36183 36184 v2sf a, b; 36185 if (__builtin_mips_any_c_eq_ps (a, b)) 36186 one_is_true (); 36187 else 36188 both_are_false (); 36189 36190 if (__builtin_mips_all_c_eq_ps (a, b)) 36191 both_are_true (); 36192 else 36193 one_is_false (); 36194 36195`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 36196`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 36197`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 36198`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 36199 Comparison of four paired-single values 36200 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f'). 36201 36202 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A 36203 with B and to compare C with D. The `any' forms return true if 36204 any of the four results are true and the `all' forms return true 36205 if all four results are true. For example: 36206 36207 v2sf a, b, c, d; 36208 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 36209 some_are_true (); 36210 else 36211 all_are_false (); 36212 36213 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 36214 all_are_true (); 36215 else 36216 some_are_false (); 36217 36218 36219File: gcc.info, Node: Other MIPS Built-in Functions, Next: MSP430 Built-in Functions, Prev: MIPS Loongson Built-in Functions, Up: Target Builtins 36220 362216.58.15 Other MIPS Built-in Functions 36222------------------------------------- 36223 36224GCC provides other MIPS-specific built-in functions: 36225 36226`void __builtin_mips_cache (int OP, const volatile void *ADDR)' 36227 Insert a `cache' instruction with operands OP and ADDR. GCC 36228 defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE' 36229 when this function is available. 36230 36231`unsigned int __builtin_mips_get_fcsr (void)' 36232`void __builtin_mips_set_fcsr (unsigned int VALUE)' 36233 Get and set the contents of the floating-point control and status 36234 register (FPU control register 31). These functions are only 36235 available in hard-float code but can be called in both MIPS16 and 36236 non-MIPS16 contexts. 36237 36238 `__builtin_mips_set_fcsr' can be used to change any bit of the 36239 register except the condition codes, which GCC assumes are 36240 preserved. 36241 36242 36243File: gcc.info, Node: MSP430 Built-in Functions, Next: NDS32 Built-in Functions, Prev: Other MIPS Built-in Functions, Up: Target Builtins 36244 362456.58.16 MSP430 Built-in Functions 36246--------------------------------- 36247 36248GCC provides a couple of special builtin functions to aid in the 36249writing of interrupt handlers in C. 36250 36251`__bic_SR_register_on_exit (int MASK)' 36252 This clears the indicated bits in the saved copy of the status 36253 register currently residing on the stack. This only works inside 36254 interrupt handlers and the changes to the status register will 36255 only take affect once the handler returns. 36256 36257`__bis_SR_register_on_exit (int MASK)' 36258 This sets the indicated bits in the saved copy of the status 36259 register currently residing on the stack. This only works inside 36260 interrupt handlers and the changes to the status register will 36261 only take affect once the handler returns. 36262 36263`__delay_cycles (long long CYCLES)' 36264 This inserts an instruction sequence that takes exactly CYCLES 36265 cycles (between 0 and about 17E9) to complete. The inserted 36266 sequence may use jumps, loops, or no-ops, and does not interfere 36267 with any other instructions. Note that CYCLES must be a 36268 compile-time constant integer - that is, you must pass a number, 36269 not a variable that may be optimized to a constant later. The 36270 number of cycles delayed by this builtin is exact. 36271 36272 36273File: gcc.info, Node: NDS32 Built-in Functions, Next: picoChip Built-in Functions, Prev: MSP430 Built-in Functions, Up: Target Builtins 36274 362756.58.17 NDS32 Built-in Functions 36276-------------------------------- 36277 36278These built-in functions are available for the NDS32 target: 36279 36280 -- Built-in Function: void __builtin_nds32_isync (int *ADDR) 36281 Insert an ISYNC instruction into the instruction stream where ADDR 36282 is an instruction address for serialization. 36283 36284 -- Built-in Function: void __builtin_nds32_isb (void) 36285 Insert an ISB instruction into the instruction stream. 36286 36287 -- Built-in Function: int __builtin_nds32_mfsr (int SR) 36288 Return the content of a system register which is mapped by SR. 36289 36290 -- Built-in Function: int __builtin_nds32_mfusr (int USR) 36291 Return the content of a user space register which is mapped by USR. 36292 36293 -- Built-in Function: void __builtin_nds32_mtsr (int VALUE, int SR) 36294 Move the VALUE to a system register which is mapped by SR. 36295 36296 -- Built-in Function: void __builtin_nds32_mtusr (int VALUE, int USR) 36297 Move the VALUE to a user space register which is mapped by USR. 36298 36299 -- Built-in Function: void __builtin_nds32_setgie_en (void) 36300 Enable global interrupt. 36301 36302 -- Built-in Function: void __builtin_nds32_setgie_dis (void) 36303 Disable global interrupt. 36304 36305 36306File: gcc.info, Node: picoChip Built-in Functions, Next: PowerPC Built-in Functions, Prev: NDS32 Built-in Functions, Up: Target Builtins 36307 363086.58.18 picoChip Built-in Functions 36309----------------------------------- 36310 36311GCC provides an interface to selected machine instructions from the 36312picoChip instruction set. 36313 36314`int __builtin_sbc (int VALUE)' 36315 Sign bit count. Return the number of consecutive bits in VALUE 36316 that have the same value as the sign bit. The result is the 36317 number of leading sign bits minus one, giving the number of 36318 redundant sign bits in VALUE. 36319 36320`int __builtin_byteswap (int VALUE)' 36321 Byte swap. Return the result of swapping the upper and lower 36322 bytes of VALUE. 36323 36324`int __builtin_brev (int VALUE)' 36325 Bit reversal. Return the result of reversing the bits in VALUE. 36326 Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so 36327 on. 36328 36329`int __builtin_adds (int X, int Y)' 36330 Saturating addition. Return the result of adding X and Y, storing 36331 the value 32767 if the result overflows. 36332 36333`int __builtin_subs (int X, int Y)' 36334 Saturating subtraction. Return the result of subtracting Y from 36335 X, storing the value -32768 if the result overflows. 36336 36337`void __builtin_halt (void)' 36338 Halt. The processor stops execution. This built-in is useful for 36339 implementing assertions. 36340 36341 36342 36343File: gcc.info, Node: PowerPC Built-in Functions, Next: PowerPC AltiVec/VSX Built-in Functions, Prev: picoChip Built-in Functions, Up: Target Builtins 36344 363456.58.19 PowerPC Built-in Functions 36346---------------------------------- 36347 36348These built-in functions are available for the PowerPC family of 36349processors: 36350 float __builtin_recipdivf (float, float); 36351 float __builtin_rsqrtf (float); 36352 double __builtin_recipdiv (double, double); 36353 double __builtin_rsqrt (double); 36354 uint64_t __builtin_ppc_get_timebase (); 36355 unsigned long __builtin_ppc_mftb (); 36356 double __builtin_unpack_longdouble (long double, int); 36357 long double __builtin_pack_longdouble (double, double); 36358 36359 The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions 36360generate multiple instructions to implement the reciprocal sqrt 36361functionality using reciprocal sqrt estimate instructions. 36362 36363 The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate 36364multiple instructions to implement division using the reciprocal 36365estimate instructions. 36366 36367 The `__builtin_ppc_get_timebase' and `__builtin_ppc_mftb' functions 36368generate instructions to read the Time Base Register. The 36369`__builtin_ppc_get_timebase' function may generate multiple 36370instructions and always returns the 64 bits of the Time Base Register. 36371The `__builtin_ppc_mftb' function always generates one instruction and 36372returns the Time Base Register value as an unsigned long, throwing away 36373the most significant word on 32-bit environments. 36374 36375 The following built-in functions are available for the PowerPC family 36376of processors, starting with ISA 2.06 or later (`-mcpu=power7' or 36377`-mpopcntd'): 36378 long __builtin_bpermd (long, long); 36379 int __builtin_divwe (int, int); 36380 int __builtin_divweo (int, int); 36381 unsigned int __builtin_divweu (unsigned int, unsigned int); 36382 unsigned int __builtin_divweuo (unsigned int, unsigned int); 36383 long __builtin_divde (long, long); 36384 long __builtin_divdeo (long, long); 36385 unsigned long __builtin_divdeu (unsigned long, unsigned long); 36386 unsigned long __builtin_divdeuo (unsigned long, unsigned long); 36387 unsigned int cdtbcd (unsigned int); 36388 unsigned int cbcdtd (unsigned int); 36389 unsigned int addg6s (unsigned int, unsigned int); 36390 36391 The `__builtin_divde', `__builtin_divdeo', `__builtin_divdeu', 36392`__builtin_divdeou' functions require a 64-bit environment support ISA 363932.06 or later. 36394 36395 The following built-in functions are available for the PowerPC family 36396of processors when hardware decimal floating point (`-mhard-dfp') is 36397available: 36398 _Decimal64 __builtin_dxex (_Decimal64); 36399 _Decimal128 __builtin_dxexq (_Decimal128); 36400 _Decimal64 __builtin_ddedpd (int, _Decimal64); 36401 _Decimal128 __builtin_ddedpdq (int, _Decimal128); 36402 _Decimal64 __builtin_denbcd (int, _Decimal64); 36403 _Decimal128 __builtin_denbcdq (int, _Decimal128); 36404 _Decimal64 __builtin_diex (_Decimal64, _Decimal64); 36405 _Decimal128 _builtin_diexq (_Decimal128, _Decimal128); 36406 _Decimal64 __builtin_dscli (_Decimal64, int); 36407 _Decimal128 __builtin_dscliq (_Decimal128, int); 36408 _Decimal64 __builtin_dscri (_Decimal64, int); 36409 _Decimal128 __builtin_dscriq (_Decimal128, int); 36410 unsigned long long __builtin_unpack_dec128 (_Decimal128, int); 36411 _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long); 36412 36413 The following built-in functions are available for the PowerPC family 36414of processors when the Vector Scalar (vsx) instruction set is available: 36415 unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int); 36416 vector __int128_t __builtin_pack_vector_int128 (unsigned long long, 36417 unsigned long long); 36418 36419 36420File: 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 36421 364226.58.20 PowerPC AltiVec Built-in Functions 36423------------------------------------------ 36424 36425GCC provides an interface for the PowerPC family of processors to access 36426the AltiVec operations described in Motorola's AltiVec Programming 36427Interface Manual. The interface is made available by including 36428`<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 36429supports the following vector types. 36430 36431 vector unsigned char 36432 vector signed char 36433 vector bool char 36434 36435 vector unsigned short 36436 vector signed short 36437 vector bool short 36438 vector pixel 36439 36440 vector unsigned int 36441 vector signed int 36442 vector bool int 36443 vector float 36444 36445 If `-mvsx' is used the following additional vector types are 36446implemented. 36447 36448 vector unsigned long 36449 vector signed long 36450 vector double 36451 36452 The long types are only implemented for 64-bit code generation, and 36453the long type is only used in the floating point/integer conversion 36454instructions. 36455 36456 GCC's implementation of the high-level language interface available 36457from C and C++ code differs from Motorola's documentation in several 36458ways. 36459 36460 * A vector constant is a list of constant expressions within curly 36461 braces. 36462 36463 * A vector initializer requires no cast if the vector constant is of 36464 the same type as the variable it is initializing. 36465 36466 * If `signed' or `unsigned' is omitted, the signedness of the vector 36467 type is the default signedness of the base type. The default 36468 varies depending on the operating system, so a portable program 36469 should always specify the signedness. 36470 36471 * Compiling with `-maltivec' adds keywords `__vector', `vector', 36472 `__pixel', `pixel', `__bool' and `bool'. When compiling ISO C, 36473 the context-sensitive substitution of the keywords `vector', 36474 `pixel' and `bool' is disabled. To use them, you must include 36475 `<altivec.h>' instead. 36476 36477 * GCC allows using a `typedef' name as the type specifier for a 36478 vector type. 36479 36480 * For C, overloaded functions are implemented with macros so the 36481 following does not work: 36482 36483 vec_add ((vector signed int){1, 2, 3, 4}, foo); 36484 36485 Since `vec_add' is a macro, the vector constant in the example is 36486 treated as four separate arguments. Wrap the entire argument in 36487 parentheses for this to work. 36488 36489 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 36490GCC uses built-in functions to achieve the functionality in the 36491aforementioned header file, but they are not supported and are subject 36492to change without notice. 36493 36494 The following interfaces are supported for the generic and specific 36495AltiVec operations and the AltiVec predicates. In cases where there is 36496a direct mapping between generic and specific operations, only the 36497generic names are shown here, although the specific operations can also 36498be used. 36499 36500 Arguments that are documented as `const int' require literal integral 36501values within the range required for that operation. 36502 36503 vector signed char vec_abs (vector signed char); 36504 vector signed short vec_abs (vector signed short); 36505 vector signed int vec_abs (vector signed int); 36506 vector float vec_abs (vector float); 36507 36508 vector signed char vec_abss (vector signed char); 36509 vector signed short vec_abss (vector signed short); 36510 vector signed int vec_abss (vector signed int); 36511 36512 vector signed char vec_add (vector bool char, vector signed char); 36513 vector signed char vec_add (vector signed char, vector bool char); 36514 vector signed char vec_add (vector signed char, vector signed char); 36515 vector unsigned char vec_add (vector bool char, vector unsigned char); 36516 vector unsigned char vec_add (vector unsigned char, vector bool char); 36517 vector unsigned char vec_add (vector unsigned char, 36518 vector unsigned char); 36519 vector signed short vec_add (vector bool short, vector signed short); 36520 vector signed short vec_add (vector signed short, vector bool short); 36521 vector signed short vec_add (vector signed short, vector signed short); 36522 vector unsigned short vec_add (vector bool short, 36523 vector unsigned short); 36524 vector unsigned short vec_add (vector unsigned short, 36525 vector bool short); 36526 vector unsigned short vec_add (vector unsigned short, 36527 vector unsigned short); 36528 vector signed int vec_add (vector bool int, vector signed int); 36529 vector signed int vec_add (vector signed int, vector bool int); 36530 vector signed int vec_add (vector signed int, vector signed int); 36531 vector unsigned int vec_add (vector bool int, vector unsigned int); 36532 vector unsigned int vec_add (vector unsigned int, vector bool int); 36533 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 36534 vector float vec_add (vector float, vector float); 36535 36536 vector float vec_vaddfp (vector float, vector float); 36537 36538 vector signed int vec_vadduwm (vector bool int, vector signed int); 36539 vector signed int vec_vadduwm (vector signed int, vector bool int); 36540 vector signed int vec_vadduwm (vector signed int, vector signed int); 36541 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 36542 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 36543 vector unsigned int vec_vadduwm (vector unsigned int, 36544 vector unsigned int); 36545 36546 vector signed short vec_vadduhm (vector bool short, 36547 vector signed short); 36548 vector signed short vec_vadduhm (vector signed short, 36549 vector bool short); 36550 vector signed short vec_vadduhm (vector signed short, 36551 vector signed short); 36552 vector unsigned short vec_vadduhm (vector bool short, 36553 vector unsigned short); 36554 vector unsigned short vec_vadduhm (vector unsigned short, 36555 vector bool short); 36556 vector unsigned short vec_vadduhm (vector unsigned short, 36557 vector unsigned short); 36558 36559 vector signed char vec_vaddubm (vector bool char, vector signed char); 36560 vector signed char vec_vaddubm (vector signed char, vector bool char); 36561 vector signed char vec_vaddubm (vector signed char, vector signed char); 36562 vector unsigned char vec_vaddubm (vector bool char, 36563 vector unsigned char); 36564 vector unsigned char vec_vaddubm (vector unsigned char, 36565 vector bool char); 36566 vector unsigned char vec_vaddubm (vector unsigned char, 36567 vector unsigned char); 36568 36569 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 36570 36571 vector unsigned char vec_adds (vector bool char, vector unsigned char); 36572 vector unsigned char vec_adds (vector unsigned char, vector bool char); 36573 vector unsigned char vec_adds (vector unsigned char, 36574 vector unsigned char); 36575 vector signed char vec_adds (vector bool char, vector signed char); 36576 vector signed char vec_adds (vector signed char, vector bool char); 36577 vector signed char vec_adds (vector signed char, vector signed char); 36578 vector unsigned short vec_adds (vector bool short, 36579 vector unsigned short); 36580 vector unsigned short vec_adds (vector unsigned short, 36581 vector bool short); 36582 vector unsigned short vec_adds (vector unsigned short, 36583 vector unsigned short); 36584 vector signed short vec_adds (vector bool short, vector signed short); 36585 vector signed short vec_adds (vector signed short, vector bool short); 36586 vector signed short vec_adds (vector signed short, vector signed short); 36587 vector unsigned int vec_adds (vector bool int, vector unsigned int); 36588 vector unsigned int vec_adds (vector unsigned int, vector bool int); 36589 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 36590 vector signed int vec_adds (vector bool int, vector signed int); 36591 vector signed int vec_adds (vector signed int, vector bool int); 36592 vector signed int vec_adds (vector signed int, vector signed int); 36593 36594 vector signed int vec_vaddsws (vector bool int, vector signed int); 36595 vector signed int vec_vaddsws (vector signed int, vector bool int); 36596 vector signed int vec_vaddsws (vector signed int, vector signed int); 36597 36598 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 36599 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 36600 vector unsigned int vec_vadduws (vector unsigned int, 36601 vector unsigned int); 36602 36603 vector signed short vec_vaddshs (vector bool short, 36604 vector signed short); 36605 vector signed short vec_vaddshs (vector signed short, 36606 vector bool short); 36607 vector signed short vec_vaddshs (vector signed short, 36608 vector signed short); 36609 36610 vector unsigned short vec_vadduhs (vector bool short, 36611 vector unsigned short); 36612 vector unsigned short vec_vadduhs (vector unsigned short, 36613 vector bool short); 36614 vector unsigned short vec_vadduhs (vector unsigned short, 36615 vector unsigned short); 36616 36617 vector signed char vec_vaddsbs (vector bool char, vector signed char); 36618 vector signed char vec_vaddsbs (vector signed char, vector bool char); 36619 vector signed char vec_vaddsbs (vector signed char, vector signed char); 36620 36621 vector unsigned char vec_vaddubs (vector bool char, 36622 vector unsigned char); 36623 vector unsigned char vec_vaddubs (vector unsigned char, 36624 vector bool char); 36625 vector unsigned char vec_vaddubs (vector unsigned char, 36626 vector unsigned char); 36627 36628 vector float vec_and (vector float, vector float); 36629 vector float vec_and (vector float, vector bool int); 36630 vector float vec_and (vector bool int, vector float); 36631 vector bool int vec_and (vector bool int, vector bool int); 36632 vector signed int vec_and (vector bool int, vector signed int); 36633 vector signed int vec_and (vector signed int, vector bool int); 36634 vector signed int vec_and (vector signed int, vector signed int); 36635 vector unsigned int vec_and (vector bool int, vector unsigned int); 36636 vector unsigned int vec_and (vector unsigned int, vector bool int); 36637 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 36638 vector bool short vec_and (vector bool short, vector bool short); 36639 vector signed short vec_and (vector bool short, vector signed short); 36640 vector signed short vec_and (vector signed short, vector bool short); 36641 vector signed short vec_and (vector signed short, vector signed short); 36642 vector unsigned short vec_and (vector bool short, 36643 vector unsigned short); 36644 vector unsigned short vec_and (vector unsigned short, 36645 vector bool short); 36646 vector unsigned short vec_and (vector unsigned short, 36647 vector unsigned short); 36648 vector signed char vec_and (vector bool char, vector signed char); 36649 vector bool char vec_and (vector bool char, vector bool char); 36650 vector signed char vec_and (vector signed char, vector bool char); 36651 vector signed char vec_and (vector signed char, vector signed char); 36652 vector unsigned char vec_and (vector bool char, vector unsigned char); 36653 vector unsigned char vec_and (vector unsigned char, vector bool char); 36654 vector unsigned char vec_and (vector unsigned char, 36655 vector unsigned char); 36656 36657 vector float vec_andc (vector float, vector float); 36658 vector float vec_andc (vector float, vector bool int); 36659 vector float vec_andc (vector bool int, vector float); 36660 vector bool int vec_andc (vector bool int, vector bool int); 36661 vector signed int vec_andc (vector bool int, vector signed int); 36662 vector signed int vec_andc (vector signed int, vector bool int); 36663 vector signed int vec_andc (vector signed int, vector signed int); 36664 vector unsigned int vec_andc (vector bool int, vector unsigned int); 36665 vector unsigned int vec_andc (vector unsigned int, vector bool int); 36666 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 36667 vector bool short vec_andc (vector bool short, vector bool short); 36668 vector signed short vec_andc (vector bool short, vector signed short); 36669 vector signed short vec_andc (vector signed short, vector bool short); 36670 vector signed short vec_andc (vector signed short, vector signed short); 36671 vector unsigned short vec_andc (vector bool short, 36672 vector unsigned short); 36673 vector unsigned short vec_andc (vector unsigned short, 36674 vector bool short); 36675 vector unsigned short vec_andc (vector unsigned short, 36676 vector unsigned short); 36677 vector signed char vec_andc (vector bool char, vector signed char); 36678 vector bool char vec_andc (vector bool char, vector bool char); 36679 vector signed char vec_andc (vector signed char, vector bool char); 36680 vector signed char vec_andc (vector signed char, vector signed char); 36681 vector unsigned char vec_andc (vector bool char, vector unsigned char); 36682 vector unsigned char vec_andc (vector unsigned char, vector bool char); 36683 vector unsigned char vec_andc (vector unsigned char, 36684 vector unsigned char); 36685 36686 vector unsigned char vec_avg (vector unsigned char, 36687 vector unsigned char); 36688 vector signed char vec_avg (vector signed char, vector signed char); 36689 vector unsigned short vec_avg (vector unsigned short, 36690 vector unsigned short); 36691 vector signed short vec_avg (vector signed short, vector signed short); 36692 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 36693 vector signed int vec_avg (vector signed int, vector signed int); 36694 36695 vector signed int vec_vavgsw (vector signed int, vector signed int); 36696 36697 vector unsigned int vec_vavguw (vector unsigned int, 36698 vector unsigned int); 36699 36700 vector signed short vec_vavgsh (vector signed short, 36701 vector signed short); 36702 36703 vector unsigned short vec_vavguh (vector unsigned short, 36704 vector unsigned short); 36705 36706 vector signed char vec_vavgsb (vector signed char, vector signed char); 36707 36708 vector unsigned char vec_vavgub (vector unsigned char, 36709 vector unsigned char); 36710 36711 vector float vec_copysign (vector float); 36712 36713 vector float vec_ceil (vector float); 36714 36715 vector signed int vec_cmpb (vector float, vector float); 36716 36717 vector bool char vec_cmpeq (vector signed char, vector signed char); 36718 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 36719 vector bool short vec_cmpeq (vector signed short, vector signed short); 36720 vector bool short vec_cmpeq (vector unsigned short, 36721 vector unsigned short); 36722 vector bool int vec_cmpeq (vector signed int, vector signed int); 36723 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 36724 vector bool int vec_cmpeq (vector float, vector float); 36725 36726 vector bool int vec_vcmpeqfp (vector float, vector float); 36727 36728 vector bool int vec_vcmpequw (vector signed int, vector signed int); 36729 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 36730 36731 vector bool short vec_vcmpequh (vector signed short, 36732 vector signed short); 36733 vector bool short vec_vcmpequh (vector unsigned short, 36734 vector unsigned short); 36735 36736 vector bool char vec_vcmpequb (vector signed char, vector signed char); 36737 vector bool char vec_vcmpequb (vector unsigned char, 36738 vector unsigned char); 36739 36740 vector bool int vec_cmpge (vector float, vector float); 36741 36742 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 36743 vector bool char vec_cmpgt (vector signed char, vector signed char); 36744 vector bool short vec_cmpgt (vector unsigned short, 36745 vector unsigned short); 36746 vector bool short vec_cmpgt (vector signed short, vector signed short); 36747 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 36748 vector bool int vec_cmpgt (vector signed int, vector signed int); 36749 vector bool int vec_cmpgt (vector float, vector float); 36750 36751 vector bool int vec_vcmpgtfp (vector float, vector float); 36752 36753 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 36754 36755 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 36756 36757 vector bool short vec_vcmpgtsh (vector signed short, 36758 vector signed short); 36759 36760 vector bool short vec_vcmpgtuh (vector unsigned short, 36761 vector unsigned short); 36762 36763 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 36764 36765 vector bool char vec_vcmpgtub (vector unsigned char, 36766 vector unsigned char); 36767 36768 vector bool int vec_cmple (vector float, vector float); 36769 36770 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 36771 vector bool char vec_cmplt (vector signed char, vector signed char); 36772 vector bool short vec_cmplt (vector unsigned short, 36773 vector unsigned short); 36774 vector bool short vec_cmplt (vector signed short, vector signed short); 36775 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 36776 vector bool int vec_cmplt (vector signed int, vector signed int); 36777 vector bool int vec_cmplt (vector float, vector float); 36778 36779 vector float vec_cpsgn (vector float, vector float); 36780 36781 vector float vec_ctf (vector unsigned int, const int); 36782 vector float vec_ctf (vector signed int, const int); 36783 vector double vec_ctf (vector unsigned long, const int); 36784 vector double vec_ctf (vector signed long, const int); 36785 36786 vector float vec_vcfsx (vector signed int, const int); 36787 36788 vector float vec_vcfux (vector unsigned int, const int); 36789 36790 vector signed int vec_cts (vector float, const int); 36791 vector signed long vec_cts (vector double, const int); 36792 36793 vector unsigned int vec_ctu (vector float, const int); 36794 vector unsigned long vec_ctu (vector double, const int); 36795 36796 void vec_dss (const int); 36797 36798 void vec_dssall (void); 36799 36800 void vec_dst (const vector unsigned char *, int, const int); 36801 void vec_dst (const vector signed char *, int, const int); 36802 void vec_dst (const vector bool char *, int, const int); 36803 void vec_dst (const vector unsigned short *, int, const int); 36804 void vec_dst (const vector signed short *, int, const int); 36805 void vec_dst (const vector bool short *, int, const int); 36806 void vec_dst (const vector pixel *, int, const int); 36807 void vec_dst (const vector unsigned int *, int, const int); 36808 void vec_dst (const vector signed int *, int, const int); 36809 void vec_dst (const vector bool int *, int, const int); 36810 void vec_dst (const vector float *, int, const int); 36811 void vec_dst (const unsigned char *, int, const int); 36812 void vec_dst (const signed char *, int, const int); 36813 void vec_dst (const unsigned short *, int, const int); 36814 void vec_dst (const short *, int, const int); 36815 void vec_dst (const unsigned int *, int, const int); 36816 void vec_dst (const int *, int, const int); 36817 void vec_dst (const unsigned long *, int, const int); 36818 void vec_dst (const long *, int, const int); 36819 void vec_dst (const float *, int, const int); 36820 36821 void vec_dstst (const vector unsigned char *, int, const int); 36822 void vec_dstst (const vector signed char *, int, const int); 36823 void vec_dstst (const vector bool char *, int, const int); 36824 void vec_dstst (const vector unsigned short *, int, const int); 36825 void vec_dstst (const vector signed short *, int, const int); 36826 void vec_dstst (const vector bool short *, int, const int); 36827 void vec_dstst (const vector pixel *, int, const int); 36828 void vec_dstst (const vector unsigned int *, int, const int); 36829 void vec_dstst (const vector signed int *, int, const int); 36830 void vec_dstst (const vector bool int *, int, const int); 36831 void vec_dstst (const vector float *, int, const int); 36832 void vec_dstst (const unsigned char *, int, const int); 36833 void vec_dstst (const signed char *, int, const int); 36834 void vec_dstst (const unsigned short *, int, const int); 36835 void vec_dstst (const short *, int, const int); 36836 void vec_dstst (const unsigned int *, int, const int); 36837 void vec_dstst (const int *, int, const int); 36838 void vec_dstst (const unsigned long *, int, const int); 36839 void vec_dstst (const long *, int, const int); 36840 void vec_dstst (const float *, int, const int); 36841 36842 void vec_dststt (const vector unsigned char *, int, const int); 36843 void vec_dststt (const vector signed char *, int, const int); 36844 void vec_dststt (const vector bool char *, int, const int); 36845 void vec_dststt (const vector unsigned short *, int, const int); 36846 void vec_dststt (const vector signed short *, int, const int); 36847 void vec_dststt (const vector bool short *, int, const int); 36848 void vec_dststt (const vector pixel *, int, const int); 36849 void vec_dststt (const vector unsigned int *, int, const int); 36850 void vec_dststt (const vector signed int *, int, const int); 36851 void vec_dststt (const vector bool int *, int, const int); 36852 void vec_dststt (const vector float *, int, const int); 36853 void vec_dststt (const unsigned char *, int, const int); 36854 void vec_dststt (const signed char *, int, const int); 36855 void vec_dststt (const unsigned short *, int, const int); 36856 void vec_dststt (const short *, int, const int); 36857 void vec_dststt (const unsigned int *, int, const int); 36858 void vec_dststt (const int *, int, const int); 36859 void vec_dststt (const unsigned long *, int, const int); 36860 void vec_dststt (const long *, int, const int); 36861 void vec_dststt (const float *, int, const int); 36862 36863 void vec_dstt (const vector unsigned char *, int, const int); 36864 void vec_dstt (const vector signed char *, int, const int); 36865 void vec_dstt (const vector bool char *, int, const int); 36866 void vec_dstt (const vector unsigned short *, int, const int); 36867 void vec_dstt (const vector signed short *, int, const int); 36868 void vec_dstt (const vector bool short *, int, const int); 36869 void vec_dstt (const vector pixel *, int, const int); 36870 void vec_dstt (const vector unsigned int *, int, const int); 36871 void vec_dstt (const vector signed int *, int, const int); 36872 void vec_dstt (const vector bool int *, int, const int); 36873 void vec_dstt (const vector float *, int, const int); 36874 void vec_dstt (const unsigned char *, int, const int); 36875 void vec_dstt (const signed char *, int, const int); 36876 void vec_dstt (const unsigned short *, int, const int); 36877 void vec_dstt (const short *, int, const int); 36878 void vec_dstt (const unsigned int *, int, const int); 36879 void vec_dstt (const int *, int, const int); 36880 void vec_dstt (const unsigned long *, int, const int); 36881 void vec_dstt (const long *, int, const int); 36882 void vec_dstt (const float *, int, const int); 36883 36884 vector float vec_expte (vector float); 36885 36886 vector float vec_floor (vector float); 36887 36888 vector float vec_ld (int, const vector float *); 36889 vector float vec_ld (int, const float *); 36890 vector bool int vec_ld (int, const vector bool int *); 36891 vector signed int vec_ld (int, const vector signed int *); 36892 vector signed int vec_ld (int, const int *); 36893 vector signed int vec_ld (int, const long *); 36894 vector unsigned int vec_ld (int, const vector unsigned int *); 36895 vector unsigned int vec_ld (int, const unsigned int *); 36896 vector unsigned int vec_ld (int, const unsigned long *); 36897 vector bool short vec_ld (int, const vector bool short *); 36898 vector pixel vec_ld (int, const vector pixel *); 36899 vector signed short vec_ld (int, const vector signed short *); 36900 vector signed short vec_ld (int, const short *); 36901 vector unsigned short vec_ld (int, const vector unsigned short *); 36902 vector unsigned short vec_ld (int, const unsigned short *); 36903 vector bool char vec_ld (int, const vector bool char *); 36904 vector signed char vec_ld (int, const vector signed char *); 36905 vector signed char vec_ld (int, const signed char *); 36906 vector unsigned char vec_ld (int, const vector unsigned char *); 36907 vector unsigned char vec_ld (int, const unsigned char *); 36908 36909 vector signed char vec_lde (int, const signed char *); 36910 vector unsigned char vec_lde (int, const unsigned char *); 36911 vector signed short vec_lde (int, const short *); 36912 vector unsigned short vec_lde (int, const unsigned short *); 36913 vector float vec_lde (int, const float *); 36914 vector signed int vec_lde (int, const int *); 36915 vector unsigned int vec_lde (int, const unsigned int *); 36916 vector signed int vec_lde (int, const long *); 36917 vector unsigned int vec_lde (int, const unsigned long *); 36918 36919 vector float vec_lvewx (int, float *); 36920 vector signed int vec_lvewx (int, int *); 36921 vector unsigned int vec_lvewx (int, unsigned int *); 36922 vector signed int vec_lvewx (int, long *); 36923 vector unsigned int vec_lvewx (int, unsigned long *); 36924 36925 vector signed short vec_lvehx (int, short *); 36926 vector unsigned short vec_lvehx (int, unsigned short *); 36927 36928 vector signed char vec_lvebx (int, char *); 36929 vector unsigned char vec_lvebx (int, unsigned char *); 36930 36931 vector float vec_ldl (int, const vector float *); 36932 vector float vec_ldl (int, const float *); 36933 vector bool int vec_ldl (int, const vector bool int *); 36934 vector signed int vec_ldl (int, const vector signed int *); 36935 vector signed int vec_ldl (int, const int *); 36936 vector signed int vec_ldl (int, const long *); 36937 vector unsigned int vec_ldl (int, const vector unsigned int *); 36938 vector unsigned int vec_ldl (int, const unsigned int *); 36939 vector unsigned int vec_ldl (int, const unsigned long *); 36940 vector bool short vec_ldl (int, const vector bool short *); 36941 vector pixel vec_ldl (int, const vector pixel *); 36942 vector signed short vec_ldl (int, const vector signed short *); 36943 vector signed short vec_ldl (int, const short *); 36944 vector unsigned short vec_ldl (int, const vector unsigned short *); 36945 vector unsigned short vec_ldl (int, const unsigned short *); 36946 vector bool char vec_ldl (int, const vector bool char *); 36947 vector signed char vec_ldl (int, const vector signed char *); 36948 vector signed char vec_ldl (int, const signed char *); 36949 vector unsigned char vec_ldl (int, const vector unsigned char *); 36950 vector unsigned char vec_ldl (int, const unsigned char *); 36951 36952 vector float vec_loge (vector float); 36953 36954 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 36955 vector unsigned char vec_lvsl (int, const volatile signed char *); 36956 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 36957 vector unsigned char vec_lvsl (int, const volatile short *); 36958 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 36959 vector unsigned char vec_lvsl (int, const volatile int *); 36960 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 36961 vector unsigned char vec_lvsl (int, const volatile long *); 36962 vector unsigned char vec_lvsl (int, const volatile float *); 36963 36964 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 36965 vector unsigned char vec_lvsr (int, const volatile signed char *); 36966 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 36967 vector unsigned char vec_lvsr (int, const volatile short *); 36968 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 36969 vector unsigned char vec_lvsr (int, const volatile int *); 36970 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 36971 vector unsigned char vec_lvsr (int, const volatile long *); 36972 vector unsigned char vec_lvsr (int, const volatile float *); 36973 36974 vector float vec_madd (vector float, vector float, vector float); 36975 36976 vector signed short vec_madds (vector signed short, 36977 vector signed short, 36978 vector signed short); 36979 36980 vector unsigned char vec_max (vector bool char, vector unsigned char); 36981 vector unsigned char vec_max (vector unsigned char, vector bool char); 36982 vector unsigned char vec_max (vector unsigned char, 36983 vector unsigned char); 36984 vector signed char vec_max (vector bool char, vector signed char); 36985 vector signed char vec_max (vector signed char, vector bool char); 36986 vector signed char vec_max (vector signed char, vector signed char); 36987 vector unsigned short vec_max (vector bool short, 36988 vector unsigned short); 36989 vector unsigned short vec_max (vector unsigned short, 36990 vector bool short); 36991 vector unsigned short vec_max (vector unsigned short, 36992 vector unsigned short); 36993 vector signed short vec_max (vector bool short, vector signed short); 36994 vector signed short vec_max (vector signed short, vector bool short); 36995 vector signed short vec_max (vector signed short, vector signed short); 36996 vector unsigned int vec_max (vector bool int, vector unsigned int); 36997 vector unsigned int vec_max (vector unsigned int, vector bool int); 36998 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 36999 vector signed int vec_max (vector bool int, vector signed int); 37000 vector signed int vec_max (vector signed int, vector bool int); 37001 vector signed int vec_max (vector signed int, vector signed int); 37002 vector float vec_max (vector float, vector float); 37003 37004 vector float vec_vmaxfp (vector float, vector float); 37005 37006 vector signed int vec_vmaxsw (vector bool int, vector signed int); 37007 vector signed int vec_vmaxsw (vector signed int, vector bool int); 37008 vector signed int vec_vmaxsw (vector signed int, vector signed int); 37009 37010 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 37011 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 37012 vector unsigned int vec_vmaxuw (vector unsigned int, 37013 vector unsigned int); 37014 37015 vector signed short vec_vmaxsh (vector bool short, vector signed short); 37016 vector signed short vec_vmaxsh (vector signed short, vector bool short); 37017 vector signed short vec_vmaxsh (vector signed short, 37018 vector signed short); 37019 37020 vector unsigned short vec_vmaxuh (vector bool short, 37021 vector unsigned short); 37022 vector unsigned short vec_vmaxuh (vector unsigned short, 37023 vector bool short); 37024 vector unsigned short vec_vmaxuh (vector unsigned short, 37025 vector unsigned short); 37026 37027 vector signed char vec_vmaxsb (vector bool char, vector signed char); 37028 vector signed char vec_vmaxsb (vector signed char, vector bool char); 37029 vector signed char vec_vmaxsb (vector signed char, vector signed char); 37030 37031 vector unsigned char vec_vmaxub (vector bool char, 37032 vector unsigned char); 37033 vector unsigned char vec_vmaxub (vector unsigned char, 37034 vector bool char); 37035 vector unsigned char vec_vmaxub (vector unsigned char, 37036 vector unsigned char); 37037 37038 vector bool char vec_mergeh (vector bool char, vector bool char); 37039 vector signed char vec_mergeh (vector signed char, vector signed char); 37040 vector unsigned char vec_mergeh (vector unsigned char, 37041 vector unsigned char); 37042 vector bool short vec_mergeh (vector bool short, vector bool short); 37043 vector pixel vec_mergeh (vector pixel, vector pixel); 37044 vector signed short vec_mergeh (vector signed short, 37045 vector signed short); 37046 vector unsigned short vec_mergeh (vector unsigned short, 37047 vector unsigned short); 37048 vector float vec_mergeh (vector float, vector float); 37049 vector bool int vec_mergeh (vector bool int, vector bool int); 37050 vector signed int vec_mergeh (vector signed int, vector signed int); 37051 vector unsigned int vec_mergeh (vector unsigned int, 37052 vector unsigned int); 37053 37054 vector float vec_vmrghw (vector float, vector float); 37055 vector bool int vec_vmrghw (vector bool int, vector bool int); 37056 vector signed int vec_vmrghw (vector signed int, vector signed int); 37057 vector unsigned int vec_vmrghw (vector unsigned int, 37058 vector unsigned int); 37059 37060 vector bool short vec_vmrghh (vector bool short, vector bool short); 37061 vector signed short vec_vmrghh (vector signed short, 37062 vector signed short); 37063 vector unsigned short vec_vmrghh (vector unsigned short, 37064 vector unsigned short); 37065 vector pixel vec_vmrghh (vector pixel, vector pixel); 37066 37067 vector bool char vec_vmrghb (vector bool char, vector bool char); 37068 vector signed char vec_vmrghb (vector signed char, vector signed char); 37069 vector unsigned char vec_vmrghb (vector unsigned char, 37070 vector unsigned char); 37071 37072 vector bool char vec_mergel (vector bool char, vector bool char); 37073 vector signed char vec_mergel (vector signed char, vector signed char); 37074 vector unsigned char vec_mergel (vector unsigned char, 37075 vector unsigned char); 37076 vector bool short vec_mergel (vector bool short, vector bool short); 37077 vector pixel vec_mergel (vector pixel, vector pixel); 37078 vector signed short vec_mergel (vector signed short, 37079 vector signed short); 37080 vector unsigned short vec_mergel (vector unsigned short, 37081 vector unsigned short); 37082 vector float vec_mergel (vector float, vector float); 37083 vector bool int vec_mergel (vector bool int, vector bool int); 37084 vector signed int vec_mergel (vector signed int, vector signed int); 37085 vector unsigned int vec_mergel (vector unsigned int, 37086 vector unsigned int); 37087 37088 vector float vec_vmrglw (vector float, vector float); 37089 vector signed int vec_vmrglw (vector signed int, vector signed int); 37090 vector unsigned int vec_vmrglw (vector unsigned int, 37091 vector unsigned int); 37092 vector bool int vec_vmrglw (vector bool int, vector bool int); 37093 37094 vector bool short vec_vmrglh (vector bool short, vector bool short); 37095 vector signed short vec_vmrglh (vector signed short, 37096 vector signed short); 37097 vector unsigned short vec_vmrglh (vector unsigned short, 37098 vector unsigned short); 37099 vector pixel vec_vmrglh (vector pixel, vector pixel); 37100 37101 vector bool char vec_vmrglb (vector bool char, vector bool char); 37102 vector signed char vec_vmrglb (vector signed char, vector signed char); 37103 vector unsigned char vec_vmrglb (vector unsigned char, 37104 vector unsigned char); 37105 37106 vector unsigned short vec_mfvscr (void); 37107 37108 vector unsigned char vec_min (vector bool char, vector unsigned char); 37109 vector unsigned char vec_min (vector unsigned char, vector bool char); 37110 vector unsigned char vec_min (vector unsigned char, 37111 vector unsigned char); 37112 vector signed char vec_min (vector bool char, vector signed char); 37113 vector signed char vec_min (vector signed char, vector bool char); 37114 vector signed char vec_min (vector signed char, vector signed char); 37115 vector unsigned short vec_min (vector bool short, 37116 vector unsigned short); 37117 vector unsigned short vec_min (vector unsigned short, 37118 vector bool short); 37119 vector unsigned short vec_min (vector unsigned short, 37120 vector unsigned short); 37121 vector signed short vec_min (vector bool short, vector signed short); 37122 vector signed short vec_min (vector signed short, vector bool short); 37123 vector signed short vec_min (vector signed short, vector signed short); 37124 vector unsigned int vec_min (vector bool int, vector unsigned int); 37125 vector unsigned int vec_min (vector unsigned int, vector bool int); 37126 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 37127 vector signed int vec_min (vector bool int, vector signed int); 37128 vector signed int vec_min (vector signed int, vector bool int); 37129 vector signed int vec_min (vector signed int, vector signed int); 37130 vector float vec_min (vector float, vector float); 37131 37132 vector float vec_vminfp (vector float, vector float); 37133 37134 vector signed int vec_vminsw (vector bool int, vector signed int); 37135 vector signed int vec_vminsw (vector signed int, vector bool int); 37136 vector signed int vec_vminsw (vector signed int, vector signed int); 37137 37138 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 37139 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 37140 vector unsigned int vec_vminuw (vector unsigned int, 37141 vector unsigned int); 37142 37143 vector signed short vec_vminsh (vector bool short, vector signed short); 37144 vector signed short vec_vminsh (vector signed short, vector bool short); 37145 vector signed short vec_vminsh (vector signed short, 37146 vector signed short); 37147 37148 vector unsigned short vec_vminuh (vector bool short, 37149 vector unsigned short); 37150 vector unsigned short vec_vminuh (vector unsigned short, 37151 vector bool short); 37152 vector unsigned short vec_vminuh (vector unsigned short, 37153 vector unsigned short); 37154 37155 vector signed char vec_vminsb (vector bool char, vector signed char); 37156 vector signed char vec_vminsb (vector signed char, vector bool char); 37157 vector signed char vec_vminsb (vector signed char, vector signed char); 37158 37159 vector unsigned char vec_vminub (vector bool char, 37160 vector unsigned char); 37161 vector unsigned char vec_vminub (vector unsigned char, 37162 vector bool char); 37163 vector unsigned char vec_vminub (vector unsigned char, 37164 vector unsigned char); 37165 37166 vector signed short vec_mladd (vector signed short, 37167 vector signed short, 37168 vector signed short); 37169 vector signed short vec_mladd (vector signed short, 37170 vector unsigned short, 37171 vector unsigned short); 37172 vector signed short vec_mladd (vector unsigned short, 37173 vector signed short, 37174 vector signed short); 37175 vector unsigned short vec_mladd (vector unsigned short, 37176 vector unsigned short, 37177 vector unsigned short); 37178 37179 vector signed short vec_mradds (vector signed short, 37180 vector signed short, 37181 vector signed short); 37182 37183 vector unsigned int vec_msum (vector unsigned char, 37184 vector unsigned char, 37185 vector unsigned int); 37186 vector signed int vec_msum (vector signed char, 37187 vector unsigned char, 37188 vector signed int); 37189 vector unsigned int vec_msum (vector unsigned short, 37190 vector unsigned short, 37191 vector unsigned int); 37192 vector signed int vec_msum (vector signed short, 37193 vector signed short, 37194 vector signed int); 37195 37196 vector signed int vec_vmsumshm (vector signed short, 37197 vector signed short, 37198 vector signed int); 37199 37200 vector unsigned int vec_vmsumuhm (vector unsigned short, 37201 vector unsigned short, 37202 vector unsigned int); 37203 37204 vector signed int vec_vmsummbm (vector signed char, 37205 vector unsigned char, 37206 vector signed int); 37207 37208 vector unsigned int vec_vmsumubm (vector unsigned char, 37209 vector unsigned char, 37210 vector unsigned int); 37211 37212 vector unsigned int vec_msums (vector unsigned short, 37213 vector unsigned short, 37214 vector unsigned int); 37215 vector signed int vec_msums (vector signed short, 37216 vector signed short, 37217 vector signed int); 37218 37219 vector signed int vec_vmsumshs (vector signed short, 37220 vector signed short, 37221 vector signed int); 37222 37223 vector unsigned int vec_vmsumuhs (vector unsigned short, 37224 vector unsigned short, 37225 vector unsigned int); 37226 37227 void vec_mtvscr (vector signed int); 37228 void vec_mtvscr (vector unsigned int); 37229 void vec_mtvscr (vector bool int); 37230 void vec_mtvscr (vector signed short); 37231 void vec_mtvscr (vector unsigned short); 37232 void vec_mtvscr (vector bool short); 37233 void vec_mtvscr (vector pixel); 37234 void vec_mtvscr (vector signed char); 37235 void vec_mtvscr (vector unsigned char); 37236 void vec_mtvscr (vector bool char); 37237 37238 vector unsigned short vec_mule (vector unsigned char, 37239 vector unsigned char); 37240 vector signed short vec_mule (vector signed char, 37241 vector signed char); 37242 vector unsigned int vec_mule (vector unsigned short, 37243 vector unsigned short); 37244 vector signed int vec_mule (vector signed short, vector signed short); 37245 37246 vector signed int vec_vmulesh (vector signed short, 37247 vector signed short); 37248 37249 vector unsigned int vec_vmuleuh (vector unsigned short, 37250 vector unsigned short); 37251 37252 vector signed short vec_vmulesb (vector signed char, 37253 vector signed char); 37254 37255 vector unsigned short vec_vmuleub (vector unsigned char, 37256 vector unsigned char); 37257 37258 vector unsigned short vec_mulo (vector unsigned char, 37259 vector unsigned char); 37260 vector signed short vec_mulo (vector signed char, vector signed char); 37261 vector unsigned int vec_mulo (vector unsigned short, 37262 vector unsigned short); 37263 vector signed int vec_mulo (vector signed short, vector signed short); 37264 37265 vector signed int vec_vmulosh (vector signed short, 37266 vector signed short); 37267 37268 vector unsigned int vec_vmulouh (vector unsigned short, 37269 vector unsigned short); 37270 37271 vector signed short vec_vmulosb (vector signed char, 37272 vector signed char); 37273 37274 vector unsigned short vec_vmuloub (vector unsigned char, 37275 vector unsigned char); 37276 37277 vector float vec_nmsub (vector float, vector float, vector float); 37278 37279 vector float vec_nor (vector float, vector float); 37280 vector signed int vec_nor (vector signed int, vector signed int); 37281 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 37282 vector bool int vec_nor (vector bool int, vector bool int); 37283 vector signed short vec_nor (vector signed short, vector signed short); 37284 vector unsigned short vec_nor (vector unsigned short, 37285 vector unsigned short); 37286 vector bool short vec_nor (vector bool short, vector bool short); 37287 vector signed char vec_nor (vector signed char, vector signed char); 37288 vector unsigned char vec_nor (vector unsigned char, 37289 vector unsigned char); 37290 vector bool char vec_nor (vector bool char, vector bool char); 37291 37292 vector float vec_or (vector float, vector float); 37293 vector float vec_or (vector float, vector bool int); 37294 vector float vec_or (vector bool int, vector float); 37295 vector bool int vec_or (vector bool int, vector bool int); 37296 vector signed int vec_or (vector bool int, vector signed int); 37297 vector signed int vec_or (vector signed int, vector bool int); 37298 vector signed int vec_or (vector signed int, vector signed int); 37299 vector unsigned int vec_or (vector bool int, vector unsigned int); 37300 vector unsigned int vec_or (vector unsigned int, vector bool int); 37301 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 37302 vector bool short vec_or (vector bool short, vector bool short); 37303 vector signed short vec_or (vector bool short, vector signed short); 37304 vector signed short vec_or (vector signed short, vector bool short); 37305 vector signed short vec_or (vector signed short, vector signed short); 37306 vector unsigned short vec_or (vector bool short, vector unsigned short); 37307 vector unsigned short vec_or (vector unsigned short, vector bool short); 37308 vector unsigned short vec_or (vector unsigned short, 37309 vector unsigned short); 37310 vector signed char vec_or (vector bool char, vector signed char); 37311 vector bool char vec_or (vector bool char, vector bool char); 37312 vector signed char vec_or (vector signed char, vector bool char); 37313 vector signed char vec_or (vector signed char, vector signed char); 37314 vector unsigned char vec_or (vector bool char, vector unsigned char); 37315 vector unsigned char vec_or (vector unsigned char, vector bool char); 37316 vector unsigned char vec_or (vector unsigned char, 37317 vector unsigned char); 37318 37319 vector signed char vec_pack (vector signed short, vector signed short); 37320 vector unsigned char vec_pack (vector unsigned short, 37321 vector unsigned short); 37322 vector bool char vec_pack (vector bool short, vector bool short); 37323 vector signed short vec_pack (vector signed int, vector signed int); 37324 vector unsigned short vec_pack (vector unsigned int, 37325 vector unsigned int); 37326 vector bool short vec_pack (vector bool int, vector bool int); 37327 37328 vector bool short vec_vpkuwum (vector bool int, vector bool int); 37329 vector signed short vec_vpkuwum (vector signed int, vector signed int); 37330 vector unsigned short vec_vpkuwum (vector unsigned int, 37331 vector unsigned int); 37332 37333 vector bool char vec_vpkuhum (vector bool short, vector bool short); 37334 vector signed char vec_vpkuhum (vector signed short, 37335 vector signed short); 37336 vector unsigned char vec_vpkuhum (vector unsigned short, 37337 vector unsigned short); 37338 37339 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 37340 37341 vector unsigned char vec_packs (vector unsigned short, 37342 vector unsigned short); 37343 vector signed char vec_packs (vector signed short, vector signed short); 37344 vector unsigned short vec_packs (vector unsigned int, 37345 vector unsigned int); 37346 vector signed short vec_packs (vector signed int, vector signed int); 37347 37348 vector signed short vec_vpkswss (vector signed int, vector signed int); 37349 37350 vector unsigned short vec_vpkuwus (vector unsigned int, 37351 vector unsigned int); 37352 37353 vector signed char vec_vpkshss (vector signed short, 37354 vector signed short); 37355 37356 vector unsigned char vec_vpkuhus (vector unsigned short, 37357 vector unsigned short); 37358 37359 vector unsigned char vec_packsu (vector unsigned short, 37360 vector unsigned short); 37361 vector unsigned char vec_packsu (vector signed short, 37362 vector signed short); 37363 vector unsigned short vec_packsu (vector unsigned int, 37364 vector unsigned int); 37365 vector unsigned short vec_packsu (vector signed int, vector signed int); 37366 37367 vector unsigned short vec_vpkswus (vector signed int, 37368 vector signed int); 37369 37370 vector unsigned char vec_vpkshus (vector signed short, 37371 vector signed short); 37372 37373 vector float vec_perm (vector float, 37374 vector float, 37375 vector unsigned char); 37376 vector signed int vec_perm (vector signed int, 37377 vector signed int, 37378 vector unsigned char); 37379 vector unsigned int vec_perm (vector unsigned int, 37380 vector unsigned int, 37381 vector unsigned char); 37382 vector bool int vec_perm (vector bool int, 37383 vector bool int, 37384 vector unsigned char); 37385 vector signed short vec_perm (vector signed short, 37386 vector signed short, 37387 vector unsigned char); 37388 vector unsigned short vec_perm (vector unsigned short, 37389 vector unsigned short, 37390 vector unsigned char); 37391 vector bool short vec_perm (vector bool short, 37392 vector bool short, 37393 vector unsigned char); 37394 vector pixel vec_perm (vector pixel, 37395 vector pixel, 37396 vector unsigned char); 37397 vector signed char vec_perm (vector signed char, 37398 vector signed char, 37399 vector unsigned char); 37400 vector unsigned char vec_perm (vector unsigned char, 37401 vector unsigned char, 37402 vector unsigned char); 37403 vector bool char vec_perm (vector bool char, 37404 vector bool char, 37405 vector unsigned char); 37406 37407 vector float vec_re (vector float); 37408 37409 vector signed char vec_rl (vector signed char, 37410 vector unsigned char); 37411 vector unsigned char vec_rl (vector unsigned char, 37412 vector unsigned char); 37413 vector signed short vec_rl (vector signed short, vector unsigned short); 37414 vector unsigned short vec_rl (vector unsigned short, 37415 vector unsigned short); 37416 vector signed int vec_rl (vector signed int, vector unsigned int); 37417 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 37418 37419 vector signed int vec_vrlw (vector signed int, vector unsigned int); 37420 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 37421 37422 vector signed short vec_vrlh (vector signed short, 37423 vector unsigned short); 37424 vector unsigned short vec_vrlh (vector unsigned short, 37425 vector unsigned short); 37426 37427 vector signed char vec_vrlb (vector signed char, vector unsigned char); 37428 vector unsigned char vec_vrlb (vector unsigned char, 37429 vector unsigned char); 37430 37431 vector float vec_round (vector float); 37432 37433 vector float vec_recip (vector float, vector float); 37434 37435 vector float vec_rsqrt (vector float); 37436 37437 vector float vec_rsqrte (vector float); 37438 37439 vector float vec_sel (vector float, vector float, vector bool int); 37440 vector float vec_sel (vector float, vector float, vector unsigned int); 37441 vector signed int vec_sel (vector signed int, 37442 vector signed int, 37443 vector bool int); 37444 vector signed int vec_sel (vector signed int, 37445 vector signed int, 37446 vector unsigned int); 37447 vector unsigned int vec_sel (vector unsigned int, 37448 vector unsigned int, 37449 vector bool int); 37450 vector unsigned int vec_sel (vector unsigned int, 37451 vector unsigned int, 37452 vector unsigned int); 37453 vector bool int vec_sel (vector bool int, 37454 vector bool int, 37455 vector bool int); 37456 vector bool int vec_sel (vector bool int, 37457 vector bool int, 37458 vector unsigned int); 37459 vector signed short vec_sel (vector signed short, 37460 vector signed short, 37461 vector bool short); 37462 vector signed short vec_sel (vector signed short, 37463 vector signed short, 37464 vector unsigned short); 37465 vector unsigned short vec_sel (vector unsigned short, 37466 vector unsigned short, 37467 vector bool short); 37468 vector unsigned short vec_sel (vector unsigned short, 37469 vector unsigned short, 37470 vector unsigned short); 37471 vector bool short vec_sel (vector bool short, 37472 vector bool short, 37473 vector bool short); 37474 vector bool short vec_sel (vector bool short, 37475 vector bool short, 37476 vector unsigned short); 37477 vector signed char vec_sel (vector signed char, 37478 vector signed char, 37479 vector bool char); 37480 vector signed char vec_sel (vector signed char, 37481 vector signed char, 37482 vector unsigned char); 37483 vector unsigned char vec_sel (vector unsigned char, 37484 vector unsigned char, 37485 vector bool char); 37486 vector unsigned char vec_sel (vector unsigned char, 37487 vector unsigned char, 37488 vector unsigned char); 37489 vector bool char vec_sel (vector bool char, 37490 vector bool char, 37491 vector bool char); 37492 vector bool char vec_sel (vector bool char, 37493 vector bool char, 37494 vector unsigned char); 37495 37496 vector signed char vec_sl (vector signed char, 37497 vector unsigned char); 37498 vector unsigned char vec_sl (vector unsigned char, 37499 vector unsigned char); 37500 vector signed short vec_sl (vector signed short, vector unsigned short); 37501 vector unsigned short vec_sl (vector unsigned short, 37502 vector unsigned short); 37503 vector signed int vec_sl (vector signed int, vector unsigned int); 37504 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 37505 37506 vector signed int vec_vslw (vector signed int, vector unsigned int); 37507 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 37508 37509 vector signed short vec_vslh (vector signed short, 37510 vector unsigned short); 37511 vector unsigned short vec_vslh (vector unsigned short, 37512 vector unsigned short); 37513 37514 vector signed char vec_vslb (vector signed char, vector unsigned char); 37515 vector unsigned char vec_vslb (vector unsigned char, 37516 vector unsigned char); 37517 37518 vector float vec_sld (vector float, vector float, const int); 37519 vector signed int vec_sld (vector signed int, 37520 vector signed int, 37521 const int); 37522 vector unsigned int vec_sld (vector unsigned int, 37523 vector unsigned int, 37524 const int); 37525 vector bool int vec_sld (vector bool int, 37526 vector bool int, 37527 const int); 37528 vector signed short vec_sld (vector signed short, 37529 vector signed short, 37530 const int); 37531 vector unsigned short vec_sld (vector unsigned short, 37532 vector unsigned short, 37533 const int); 37534 vector bool short vec_sld (vector bool short, 37535 vector bool short, 37536 const int); 37537 vector pixel vec_sld (vector pixel, 37538 vector pixel, 37539 const int); 37540 vector signed char vec_sld (vector signed char, 37541 vector signed char, 37542 const int); 37543 vector unsigned char vec_sld (vector unsigned char, 37544 vector unsigned char, 37545 const int); 37546 vector bool char vec_sld (vector bool char, 37547 vector bool char, 37548 const int); 37549 37550 vector signed int vec_sll (vector signed int, 37551 vector unsigned int); 37552 vector signed int vec_sll (vector signed int, 37553 vector unsigned short); 37554 vector signed int vec_sll (vector signed int, 37555 vector unsigned char); 37556 vector unsigned int vec_sll (vector unsigned int, 37557 vector unsigned int); 37558 vector unsigned int vec_sll (vector unsigned int, 37559 vector unsigned short); 37560 vector unsigned int vec_sll (vector unsigned int, 37561 vector unsigned char); 37562 vector bool int vec_sll (vector bool int, 37563 vector unsigned int); 37564 vector bool int vec_sll (vector bool int, 37565 vector unsigned short); 37566 vector bool int vec_sll (vector bool int, 37567 vector unsigned char); 37568 vector signed short vec_sll (vector signed short, 37569 vector unsigned int); 37570 vector signed short vec_sll (vector signed short, 37571 vector unsigned short); 37572 vector signed short vec_sll (vector signed short, 37573 vector unsigned char); 37574 vector unsigned short vec_sll (vector unsigned short, 37575 vector unsigned int); 37576 vector unsigned short vec_sll (vector unsigned short, 37577 vector unsigned short); 37578 vector unsigned short vec_sll (vector unsigned short, 37579 vector unsigned char); 37580 vector bool short vec_sll (vector bool short, vector unsigned int); 37581 vector bool short vec_sll (vector bool short, vector unsigned short); 37582 vector bool short vec_sll (vector bool short, vector unsigned char); 37583 vector pixel vec_sll (vector pixel, vector unsigned int); 37584 vector pixel vec_sll (vector pixel, vector unsigned short); 37585 vector pixel vec_sll (vector pixel, vector unsigned char); 37586 vector signed char vec_sll (vector signed char, vector unsigned int); 37587 vector signed char vec_sll (vector signed char, vector unsigned short); 37588 vector signed char vec_sll (vector signed char, vector unsigned char); 37589 vector unsigned char vec_sll (vector unsigned char, 37590 vector unsigned int); 37591 vector unsigned char vec_sll (vector unsigned char, 37592 vector unsigned short); 37593 vector unsigned char vec_sll (vector unsigned char, 37594 vector unsigned char); 37595 vector bool char vec_sll (vector bool char, vector unsigned int); 37596 vector bool char vec_sll (vector bool char, vector unsigned short); 37597 vector bool char vec_sll (vector bool char, vector unsigned char); 37598 37599 vector float vec_slo (vector float, vector signed char); 37600 vector float vec_slo (vector float, vector unsigned char); 37601 vector signed int vec_slo (vector signed int, vector signed char); 37602 vector signed int vec_slo (vector signed int, vector unsigned char); 37603 vector unsigned int vec_slo (vector unsigned int, vector signed char); 37604 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 37605 vector signed short vec_slo (vector signed short, vector signed char); 37606 vector signed short vec_slo (vector signed short, vector unsigned char); 37607 vector unsigned short vec_slo (vector unsigned short, 37608 vector signed char); 37609 vector unsigned short vec_slo (vector unsigned short, 37610 vector unsigned char); 37611 vector pixel vec_slo (vector pixel, vector signed char); 37612 vector pixel vec_slo (vector pixel, vector unsigned char); 37613 vector signed char vec_slo (vector signed char, vector signed char); 37614 vector signed char vec_slo (vector signed char, vector unsigned char); 37615 vector unsigned char vec_slo (vector unsigned char, vector signed char); 37616 vector unsigned char vec_slo (vector unsigned char, 37617 vector unsigned char); 37618 37619 vector signed char vec_splat (vector signed char, const int); 37620 vector unsigned char vec_splat (vector unsigned char, const int); 37621 vector bool char vec_splat (vector bool char, const int); 37622 vector signed short vec_splat (vector signed short, const int); 37623 vector unsigned short vec_splat (vector unsigned short, const int); 37624 vector bool short vec_splat (vector bool short, const int); 37625 vector pixel vec_splat (vector pixel, const int); 37626 vector float vec_splat (vector float, const int); 37627 vector signed int vec_splat (vector signed int, const int); 37628 vector unsigned int vec_splat (vector unsigned int, const int); 37629 vector bool int vec_splat (vector bool int, const int); 37630 vector signed long vec_splat (vector signed long, const int); 37631 vector unsigned long vec_splat (vector unsigned long, const int); 37632 37633 vector signed char vec_splats (signed char); 37634 vector unsigned char vec_splats (unsigned char); 37635 vector signed short vec_splats (signed short); 37636 vector unsigned short vec_splats (unsigned short); 37637 vector signed int vec_splats (signed int); 37638 vector unsigned int vec_splats (unsigned int); 37639 vector float vec_splats (float); 37640 37641 vector float vec_vspltw (vector float, const int); 37642 vector signed int vec_vspltw (vector signed int, const int); 37643 vector unsigned int vec_vspltw (vector unsigned int, const int); 37644 vector bool int vec_vspltw (vector bool int, const int); 37645 37646 vector bool short vec_vsplth (vector bool short, const int); 37647 vector signed short vec_vsplth (vector signed short, const int); 37648 vector unsigned short vec_vsplth (vector unsigned short, const int); 37649 vector pixel vec_vsplth (vector pixel, const int); 37650 37651 vector signed char vec_vspltb (vector signed char, const int); 37652 vector unsigned char vec_vspltb (vector unsigned char, const int); 37653 vector bool char vec_vspltb (vector bool char, const int); 37654 37655 vector signed char vec_splat_s8 (const int); 37656 37657 vector signed short vec_splat_s16 (const int); 37658 37659 vector signed int vec_splat_s32 (const int); 37660 37661 vector unsigned char vec_splat_u8 (const int); 37662 37663 vector unsigned short vec_splat_u16 (const int); 37664 37665 vector unsigned int vec_splat_u32 (const int); 37666 37667 vector signed char vec_sr (vector signed char, vector unsigned char); 37668 vector unsigned char vec_sr (vector unsigned char, 37669 vector unsigned char); 37670 vector signed short vec_sr (vector signed short, 37671 vector unsigned short); 37672 vector unsigned short vec_sr (vector unsigned short, 37673 vector unsigned short); 37674 vector signed int vec_sr (vector signed int, vector unsigned int); 37675 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 37676 37677 vector signed int vec_vsrw (vector signed int, vector unsigned int); 37678 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 37679 37680 vector signed short vec_vsrh (vector signed short, 37681 vector unsigned short); 37682 vector unsigned short vec_vsrh (vector unsigned short, 37683 vector unsigned short); 37684 37685 vector signed char vec_vsrb (vector signed char, vector unsigned char); 37686 vector unsigned char vec_vsrb (vector unsigned char, 37687 vector unsigned char); 37688 37689 vector signed char vec_sra (vector signed char, vector unsigned char); 37690 vector unsigned char vec_sra (vector unsigned char, 37691 vector unsigned char); 37692 vector signed short vec_sra (vector signed short, 37693 vector unsigned short); 37694 vector unsigned short vec_sra (vector unsigned short, 37695 vector unsigned short); 37696 vector signed int vec_sra (vector signed int, vector unsigned int); 37697 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 37698 37699 vector signed int vec_vsraw (vector signed int, vector unsigned int); 37700 vector unsigned int vec_vsraw (vector unsigned int, 37701 vector unsigned int); 37702 37703 vector signed short vec_vsrah (vector signed short, 37704 vector unsigned short); 37705 vector unsigned short vec_vsrah (vector unsigned short, 37706 vector unsigned short); 37707 37708 vector signed char vec_vsrab (vector signed char, vector unsigned char); 37709 vector unsigned char vec_vsrab (vector unsigned char, 37710 vector unsigned char); 37711 37712 vector signed int vec_srl (vector signed int, vector unsigned int); 37713 vector signed int vec_srl (vector signed int, vector unsigned short); 37714 vector signed int vec_srl (vector signed int, vector unsigned char); 37715 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 37716 vector unsigned int vec_srl (vector unsigned int, 37717 vector unsigned short); 37718 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 37719 vector bool int vec_srl (vector bool int, vector unsigned int); 37720 vector bool int vec_srl (vector bool int, vector unsigned short); 37721 vector bool int vec_srl (vector bool int, vector unsigned char); 37722 vector signed short vec_srl (vector signed short, vector unsigned int); 37723 vector signed short vec_srl (vector signed short, 37724 vector unsigned short); 37725 vector signed short vec_srl (vector signed short, vector unsigned char); 37726 vector unsigned short vec_srl (vector unsigned short, 37727 vector unsigned int); 37728 vector unsigned short vec_srl (vector unsigned short, 37729 vector unsigned short); 37730 vector unsigned short vec_srl (vector unsigned short, 37731 vector unsigned char); 37732 vector bool short vec_srl (vector bool short, vector unsigned int); 37733 vector bool short vec_srl (vector bool short, vector unsigned short); 37734 vector bool short vec_srl (vector bool short, vector unsigned char); 37735 vector pixel vec_srl (vector pixel, vector unsigned int); 37736 vector pixel vec_srl (vector pixel, vector unsigned short); 37737 vector pixel vec_srl (vector pixel, vector unsigned char); 37738 vector signed char vec_srl (vector signed char, vector unsigned int); 37739 vector signed char vec_srl (vector signed char, vector unsigned short); 37740 vector signed char vec_srl (vector signed char, vector unsigned char); 37741 vector unsigned char vec_srl (vector unsigned char, 37742 vector unsigned int); 37743 vector unsigned char vec_srl (vector unsigned char, 37744 vector unsigned short); 37745 vector unsigned char vec_srl (vector unsigned char, 37746 vector unsigned char); 37747 vector bool char vec_srl (vector bool char, vector unsigned int); 37748 vector bool char vec_srl (vector bool char, vector unsigned short); 37749 vector bool char vec_srl (vector bool char, vector unsigned char); 37750 37751 vector float vec_sro (vector float, vector signed char); 37752 vector float vec_sro (vector float, vector unsigned char); 37753 vector signed int vec_sro (vector signed int, vector signed char); 37754 vector signed int vec_sro (vector signed int, vector unsigned char); 37755 vector unsigned int vec_sro (vector unsigned int, vector signed char); 37756 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 37757 vector signed short vec_sro (vector signed short, vector signed char); 37758 vector signed short vec_sro (vector signed short, vector unsigned char); 37759 vector unsigned short vec_sro (vector unsigned short, 37760 vector signed char); 37761 vector unsigned short vec_sro (vector unsigned short, 37762 vector unsigned char); 37763 vector pixel vec_sro (vector pixel, vector signed char); 37764 vector pixel vec_sro (vector pixel, vector unsigned char); 37765 vector signed char vec_sro (vector signed char, vector signed char); 37766 vector signed char vec_sro (vector signed char, vector unsigned char); 37767 vector unsigned char vec_sro (vector unsigned char, vector signed char); 37768 vector unsigned char vec_sro (vector unsigned char, 37769 vector unsigned char); 37770 37771 void vec_st (vector float, int, vector float *); 37772 void vec_st (vector float, int, float *); 37773 void vec_st (vector signed int, int, vector signed int *); 37774 void vec_st (vector signed int, int, int *); 37775 void vec_st (vector unsigned int, int, vector unsigned int *); 37776 void vec_st (vector unsigned int, int, unsigned int *); 37777 void vec_st (vector bool int, int, vector bool int *); 37778 void vec_st (vector bool int, int, unsigned int *); 37779 void vec_st (vector bool int, int, int *); 37780 void vec_st (vector signed short, int, vector signed short *); 37781 void vec_st (vector signed short, int, short *); 37782 void vec_st (vector unsigned short, int, vector unsigned short *); 37783 void vec_st (vector unsigned short, int, unsigned short *); 37784 void vec_st (vector bool short, int, vector bool short *); 37785 void vec_st (vector bool short, int, unsigned short *); 37786 void vec_st (vector pixel, int, vector pixel *); 37787 void vec_st (vector pixel, int, unsigned short *); 37788 void vec_st (vector pixel, int, short *); 37789 void vec_st (vector bool short, int, short *); 37790 void vec_st (vector signed char, int, vector signed char *); 37791 void vec_st (vector signed char, int, signed char *); 37792 void vec_st (vector unsigned char, int, vector unsigned char *); 37793 void vec_st (vector unsigned char, int, unsigned char *); 37794 void vec_st (vector bool char, int, vector bool char *); 37795 void vec_st (vector bool char, int, unsigned char *); 37796 void vec_st (vector bool char, int, signed char *); 37797 37798 void vec_ste (vector signed char, int, signed char *); 37799 void vec_ste (vector unsigned char, int, unsigned char *); 37800 void vec_ste (vector bool char, int, signed char *); 37801 void vec_ste (vector bool char, int, unsigned char *); 37802 void vec_ste (vector signed short, int, short *); 37803 void vec_ste (vector unsigned short, int, unsigned short *); 37804 void vec_ste (vector bool short, int, short *); 37805 void vec_ste (vector bool short, int, unsigned short *); 37806 void vec_ste (vector pixel, int, short *); 37807 void vec_ste (vector pixel, int, unsigned short *); 37808 void vec_ste (vector float, int, float *); 37809 void vec_ste (vector signed int, int, int *); 37810 void vec_ste (vector unsigned int, int, unsigned int *); 37811 void vec_ste (vector bool int, int, int *); 37812 void vec_ste (vector bool int, int, unsigned int *); 37813 37814 void vec_stvewx (vector float, int, float *); 37815 void vec_stvewx (vector signed int, int, int *); 37816 void vec_stvewx (vector unsigned int, int, unsigned int *); 37817 void vec_stvewx (vector bool int, int, int *); 37818 void vec_stvewx (vector bool int, int, unsigned int *); 37819 37820 void vec_stvehx (vector signed short, int, short *); 37821 void vec_stvehx (vector unsigned short, int, unsigned short *); 37822 void vec_stvehx (vector bool short, int, short *); 37823 void vec_stvehx (vector bool short, int, unsigned short *); 37824 void vec_stvehx (vector pixel, int, short *); 37825 void vec_stvehx (vector pixel, int, unsigned short *); 37826 37827 void vec_stvebx (vector signed char, int, signed char *); 37828 void vec_stvebx (vector unsigned char, int, unsigned char *); 37829 void vec_stvebx (vector bool char, int, signed char *); 37830 void vec_stvebx (vector bool char, int, unsigned char *); 37831 37832 void vec_stl (vector float, int, vector float *); 37833 void vec_stl (vector float, int, float *); 37834 void vec_stl (vector signed int, int, vector signed int *); 37835 void vec_stl (vector signed int, int, int *); 37836 void vec_stl (vector unsigned int, int, vector unsigned int *); 37837 void vec_stl (vector unsigned int, int, unsigned int *); 37838 void vec_stl (vector bool int, int, vector bool int *); 37839 void vec_stl (vector bool int, int, unsigned int *); 37840 void vec_stl (vector bool int, int, int *); 37841 void vec_stl (vector signed short, int, vector signed short *); 37842 void vec_stl (vector signed short, int, short *); 37843 void vec_stl (vector unsigned short, int, vector unsigned short *); 37844 void vec_stl (vector unsigned short, int, unsigned short *); 37845 void vec_stl (vector bool short, int, vector bool short *); 37846 void vec_stl (vector bool short, int, unsigned short *); 37847 void vec_stl (vector bool short, int, short *); 37848 void vec_stl (vector pixel, int, vector pixel *); 37849 void vec_stl (vector pixel, int, unsigned short *); 37850 void vec_stl (vector pixel, int, short *); 37851 void vec_stl (vector signed char, int, vector signed char *); 37852 void vec_stl (vector signed char, int, signed char *); 37853 void vec_stl (vector unsigned char, int, vector unsigned char *); 37854 void vec_stl (vector unsigned char, int, unsigned char *); 37855 void vec_stl (vector bool char, int, vector bool char *); 37856 void vec_stl (vector bool char, int, unsigned char *); 37857 void vec_stl (vector bool char, int, signed char *); 37858 37859 vector signed char vec_sub (vector bool char, vector signed char); 37860 vector signed char vec_sub (vector signed char, vector bool char); 37861 vector signed char vec_sub (vector signed char, vector signed char); 37862 vector unsigned char vec_sub (vector bool char, vector unsigned char); 37863 vector unsigned char vec_sub (vector unsigned char, vector bool char); 37864 vector unsigned char vec_sub (vector unsigned char, 37865 vector unsigned char); 37866 vector signed short vec_sub (vector bool short, vector signed short); 37867 vector signed short vec_sub (vector signed short, vector bool short); 37868 vector signed short vec_sub (vector signed short, vector signed short); 37869 vector unsigned short vec_sub (vector bool short, 37870 vector unsigned short); 37871 vector unsigned short vec_sub (vector unsigned short, 37872 vector bool short); 37873 vector unsigned short vec_sub (vector unsigned short, 37874 vector unsigned short); 37875 vector signed int vec_sub (vector bool int, vector signed int); 37876 vector signed int vec_sub (vector signed int, vector bool int); 37877 vector signed int vec_sub (vector signed int, vector signed int); 37878 vector unsigned int vec_sub (vector bool int, vector unsigned int); 37879 vector unsigned int vec_sub (vector unsigned int, vector bool int); 37880 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 37881 vector float vec_sub (vector float, vector float); 37882 37883 vector float vec_vsubfp (vector float, vector float); 37884 37885 vector signed int vec_vsubuwm (vector bool int, vector signed int); 37886 vector signed int vec_vsubuwm (vector signed int, vector bool int); 37887 vector signed int vec_vsubuwm (vector signed int, vector signed int); 37888 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 37889 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 37890 vector unsigned int vec_vsubuwm (vector unsigned int, 37891 vector unsigned int); 37892 37893 vector signed short vec_vsubuhm (vector bool short, 37894 vector signed short); 37895 vector signed short vec_vsubuhm (vector signed short, 37896 vector bool short); 37897 vector signed short vec_vsubuhm (vector signed short, 37898 vector signed short); 37899 vector unsigned short vec_vsubuhm (vector bool short, 37900 vector unsigned short); 37901 vector unsigned short vec_vsubuhm (vector unsigned short, 37902 vector bool short); 37903 vector unsigned short vec_vsubuhm (vector unsigned short, 37904 vector unsigned short); 37905 37906 vector signed char vec_vsububm (vector bool char, vector signed char); 37907 vector signed char vec_vsububm (vector signed char, vector bool char); 37908 vector signed char vec_vsububm (vector signed char, vector signed char); 37909 vector unsigned char vec_vsububm (vector bool char, 37910 vector unsigned char); 37911 vector unsigned char vec_vsububm (vector unsigned char, 37912 vector bool char); 37913 vector unsigned char vec_vsububm (vector unsigned char, 37914 vector unsigned char); 37915 37916 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 37917 37918 vector unsigned char vec_subs (vector bool char, vector unsigned char); 37919 vector unsigned char vec_subs (vector unsigned char, vector bool char); 37920 vector unsigned char vec_subs (vector unsigned char, 37921 vector unsigned char); 37922 vector signed char vec_subs (vector bool char, vector signed char); 37923 vector signed char vec_subs (vector signed char, vector bool char); 37924 vector signed char vec_subs (vector signed char, vector signed char); 37925 vector unsigned short vec_subs (vector bool short, 37926 vector unsigned short); 37927 vector unsigned short vec_subs (vector unsigned short, 37928 vector bool short); 37929 vector unsigned short vec_subs (vector unsigned short, 37930 vector unsigned short); 37931 vector signed short vec_subs (vector bool short, vector signed short); 37932 vector signed short vec_subs (vector signed short, vector bool short); 37933 vector signed short vec_subs (vector signed short, vector signed short); 37934 vector unsigned int vec_subs (vector bool int, vector unsigned int); 37935 vector unsigned int vec_subs (vector unsigned int, vector bool int); 37936 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 37937 vector signed int vec_subs (vector bool int, vector signed int); 37938 vector signed int vec_subs (vector signed int, vector bool int); 37939 vector signed int vec_subs (vector signed int, vector signed int); 37940 37941 vector signed int vec_vsubsws (vector bool int, vector signed int); 37942 vector signed int vec_vsubsws (vector signed int, vector bool int); 37943 vector signed int vec_vsubsws (vector signed int, vector signed int); 37944 37945 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 37946 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 37947 vector unsigned int vec_vsubuws (vector unsigned int, 37948 vector unsigned int); 37949 37950 vector signed short vec_vsubshs (vector bool short, 37951 vector signed short); 37952 vector signed short vec_vsubshs (vector signed short, 37953 vector bool short); 37954 vector signed short vec_vsubshs (vector signed short, 37955 vector signed short); 37956 37957 vector unsigned short vec_vsubuhs (vector bool short, 37958 vector unsigned short); 37959 vector unsigned short vec_vsubuhs (vector unsigned short, 37960 vector bool short); 37961 vector unsigned short vec_vsubuhs (vector unsigned short, 37962 vector unsigned short); 37963 37964 vector signed char vec_vsubsbs (vector bool char, vector signed char); 37965 vector signed char vec_vsubsbs (vector signed char, vector bool char); 37966 vector signed char vec_vsubsbs (vector signed char, vector signed char); 37967 37968 vector unsigned char vec_vsububs (vector bool char, 37969 vector unsigned char); 37970 vector unsigned char vec_vsububs (vector unsigned char, 37971 vector bool char); 37972 vector unsigned char vec_vsububs (vector unsigned char, 37973 vector unsigned char); 37974 37975 vector unsigned int vec_sum4s (vector unsigned char, 37976 vector unsigned int); 37977 vector signed int vec_sum4s (vector signed char, vector signed int); 37978 vector signed int vec_sum4s (vector signed short, vector signed int); 37979 37980 vector signed int vec_vsum4shs (vector signed short, vector signed int); 37981 37982 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 37983 37984 vector unsigned int vec_vsum4ubs (vector unsigned char, 37985 vector unsigned int); 37986 37987 vector signed int vec_sum2s (vector signed int, vector signed int); 37988 37989 vector signed int vec_sums (vector signed int, vector signed int); 37990 37991 vector float vec_trunc (vector float); 37992 37993 vector signed short vec_unpackh (vector signed char); 37994 vector bool short vec_unpackh (vector bool char); 37995 vector signed int vec_unpackh (vector signed short); 37996 vector bool int vec_unpackh (vector bool short); 37997 vector unsigned int vec_unpackh (vector pixel); 37998 37999 vector bool int vec_vupkhsh (vector bool short); 38000 vector signed int vec_vupkhsh (vector signed short); 38001 38002 vector unsigned int vec_vupkhpx (vector pixel); 38003 38004 vector bool short vec_vupkhsb (vector bool char); 38005 vector signed short vec_vupkhsb (vector signed char); 38006 38007 vector signed short vec_unpackl (vector signed char); 38008 vector bool short vec_unpackl (vector bool char); 38009 vector unsigned int vec_unpackl (vector pixel); 38010 vector signed int vec_unpackl (vector signed short); 38011 vector bool int vec_unpackl (vector bool short); 38012 38013 vector unsigned int vec_vupklpx (vector pixel); 38014 38015 vector bool int vec_vupklsh (vector bool short); 38016 vector signed int vec_vupklsh (vector signed short); 38017 38018 vector bool short vec_vupklsb (vector bool char); 38019 vector signed short vec_vupklsb (vector signed char); 38020 38021 vector float vec_xor (vector float, vector float); 38022 vector float vec_xor (vector float, vector bool int); 38023 vector float vec_xor (vector bool int, vector float); 38024 vector bool int vec_xor (vector bool int, vector bool int); 38025 vector signed int vec_xor (vector bool int, vector signed int); 38026 vector signed int vec_xor (vector signed int, vector bool int); 38027 vector signed int vec_xor (vector signed int, vector signed int); 38028 vector unsigned int vec_xor (vector bool int, vector unsigned int); 38029 vector unsigned int vec_xor (vector unsigned int, vector bool int); 38030 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 38031 vector bool short vec_xor (vector bool short, vector bool short); 38032 vector signed short vec_xor (vector bool short, vector signed short); 38033 vector signed short vec_xor (vector signed short, vector bool short); 38034 vector signed short vec_xor (vector signed short, vector signed short); 38035 vector unsigned short vec_xor (vector bool short, 38036 vector unsigned short); 38037 vector unsigned short vec_xor (vector unsigned short, 38038 vector bool short); 38039 vector unsigned short vec_xor (vector unsigned short, 38040 vector unsigned short); 38041 vector signed char vec_xor (vector bool char, vector signed char); 38042 vector bool char vec_xor (vector bool char, vector bool char); 38043 vector signed char vec_xor (vector signed char, vector bool char); 38044 vector signed char vec_xor (vector signed char, vector signed char); 38045 vector unsigned char vec_xor (vector bool char, vector unsigned char); 38046 vector unsigned char vec_xor (vector unsigned char, vector bool char); 38047 vector unsigned char vec_xor (vector unsigned char, 38048 vector unsigned char); 38049 38050 int vec_all_eq (vector signed char, vector bool char); 38051 int vec_all_eq (vector signed char, vector signed char); 38052 int vec_all_eq (vector unsigned char, vector bool char); 38053 int vec_all_eq (vector unsigned char, vector unsigned char); 38054 int vec_all_eq (vector bool char, vector bool char); 38055 int vec_all_eq (vector bool char, vector unsigned char); 38056 int vec_all_eq (vector bool char, vector signed char); 38057 int vec_all_eq (vector signed short, vector bool short); 38058 int vec_all_eq (vector signed short, vector signed short); 38059 int vec_all_eq (vector unsigned short, vector bool short); 38060 int vec_all_eq (vector unsigned short, vector unsigned short); 38061 int vec_all_eq (vector bool short, vector bool short); 38062 int vec_all_eq (vector bool short, vector unsigned short); 38063 int vec_all_eq (vector bool short, vector signed short); 38064 int vec_all_eq (vector pixel, vector pixel); 38065 int vec_all_eq (vector signed int, vector bool int); 38066 int vec_all_eq (vector signed int, vector signed int); 38067 int vec_all_eq (vector unsigned int, vector bool int); 38068 int vec_all_eq (vector unsigned int, vector unsigned int); 38069 int vec_all_eq (vector bool int, vector bool int); 38070 int vec_all_eq (vector bool int, vector unsigned int); 38071 int vec_all_eq (vector bool int, vector signed int); 38072 int vec_all_eq (vector float, vector float); 38073 38074 int vec_all_ge (vector bool char, vector unsigned char); 38075 int vec_all_ge (vector unsigned char, vector bool char); 38076 int vec_all_ge (vector unsigned char, vector unsigned char); 38077 int vec_all_ge (vector bool char, vector signed char); 38078 int vec_all_ge (vector signed char, vector bool char); 38079 int vec_all_ge (vector signed char, vector signed char); 38080 int vec_all_ge (vector bool short, vector unsigned short); 38081 int vec_all_ge (vector unsigned short, vector bool short); 38082 int vec_all_ge (vector unsigned short, vector unsigned short); 38083 int vec_all_ge (vector signed short, vector signed short); 38084 int vec_all_ge (vector bool short, vector signed short); 38085 int vec_all_ge (vector signed short, vector bool short); 38086 int vec_all_ge (vector bool int, vector unsigned int); 38087 int vec_all_ge (vector unsigned int, vector bool int); 38088 int vec_all_ge (vector unsigned int, vector unsigned int); 38089 int vec_all_ge (vector bool int, vector signed int); 38090 int vec_all_ge (vector signed int, vector bool int); 38091 int vec_all_ge (vector signed int, vector signed int); 38092 int vec_all_ge (vector float, vector float); 38093 38094 int vec_all_gt (vector bool char, vector unsigned char); 38095 int vec_all_gt (vector unsigned char, vector bool char); 38096 int vec_all_gt (vector unsigned char, vector unsigned char); 38097 int vec_all_gt (vector bool char, vector signed char); 38098 int vec_all_gt (vector signed char, vector bool char); 38099 int vec_all_gt (vector signed char, vector signed char); 38100 int vec_all_gt (vector bool short, vector unsigned short); 38101 int vec_all_gt (vector unsigned short, vector bool short); 38102 int vec_all_gt (vector unsigned short, vector unsigned short); 38103 int vec_all_gt (vector bool short, vector signed short); 38104 int vec_all_gt (vector signed short, vector bool short); 38105 int vec_all_gt (vector signed short, vector signed short); 38106 int vec_all_gt (vector bool int, vector unsigned int); 38107 int vec_all_gt (vector unsigned int, vector bool int); 38108 int vec_all_gt (vector unsigned int, vector unsigned int); 38109 int vec_all_gt (vector bool int, vector signed int); 38110 int vec_all_gt (vector signed int, vector bool int); 38111 int vec_all_gt (vector signed int, vector signed int); 38112 int vec_all_gt (vector float, vector float); 38113 38114 int vec_all_in (vector float, vector float); 38115 38116 int vec_all_le (vector bool char, vector unsigned char); 38117 int vec_all_le (vector unsigned char, vector bool char); 38118 int vec_all_le (vector unsigned char, vector unsigned char); 38119 int vec_all_le (vector bool char, vector signed char); 38120 int vec_all_le (vector signed char, vector bool char); 38121 int vec_all_le (vector signed char, vector signed char); 38122 int vec_all_le (vector bool short, vector unsigned short); 38123 int vec_all_le (vector unsigned short, vector bool short); 38124 int vec_all_le (vector unsigned short, vector unsigned short); 38125 int vec_all_le (vector bool short, vector signed short); 38126 int vec_all_le (vector signed short, vector bool short); 38127 int vec_all_le (vector signed short, vector signed short); 38128 int vec_all_le (vector bool int, vector unsigned int); 38129 int vec_all_le (vector unsigned int, vector bool int); 38130 int vec_all_le (vector unsigned int, vector unsigned int); 38131 int vec_all_le (vector bool int, vector signed int); 38132 int vec_all_le (vector signed int, vector bool int); 38133 int vec_all_le (vector signed int, vector signed int); 38134 int vec_all_le (vector float, vector float); 38135 38136 int vec_all_lt (vector bool char, vector unsigned char); 38137 int vec_all_lt (vector unsigned char, vector bool char); 38138 int vec_all_lt (vector unsigned char, vector unsigned char); 38139 int vec_all_lt (vector bool char, vector signed char); 38140 int vec_all_lt (vector signed char, vector bool char); 38141 int vec_all_lt (vector signed char, vector signed char); 38142 int vec_all_lt (vector bool short, vector unsigned short); 38143 int vec_all_lt (vector unsigned short, vector bool short); 38144 int vec_all_lt (vector unsigned short, vector unsigned short); 38145 int vec_all_lt (vector bool short, vector signed short); 38146 int vec_all_lt (vector signed short, vector bool short); 38147 int vec_all_lt (vector signed short, vector signed short); 38148 int vec_all_lt (vector bool int, vector unsigned int); 38149 int vec_all_lt (vector unsigned int, vector bool int); 38150 int vec_all_lt (vector unsigned int, vector unsigned int); 38151 int vec_all_lt (vector bool int, vector signed int); 38152 int vec_all_lt (vector signed int, vector bool int); 38153 int vec_all_lt (vector signed int, vector signed int); 38154 int vec_all_lt (vector float, vector float); 38155 38156 int vec_all_nan (vector float); 38157 38158 int vec_all_ne (vector signed char, vector bool char); 38159 int vec_all_ne (vector signed char, vector signed char); 38160 int vec_all_ne (vector unsigned char, vector bool char); 38161 int vec_all_ne (vector unsigned char, vector unsigned char); 38162 int vec_all_ne (vector bool char, vector bool char); 38163 int vec_all_ne (vector bool char, vector unsigned char); 38164 int vec_all_ne (vector bool char, vector signed char); 38165 int vec_all_ne (vector signed short, vector bool short); 38166 int vec_all_ne (vector signed short, vector signed short); 38167 int vec_all_ne (vector unsigned short, vector bool short); 38168 int vec_all_ne (vector unsigned short, vector unsigned short); 38169 int vec_all_ne (vector bool short, vector bool short); 38170 int vec_all_ne (vector bool short, vector unsigned short); 38171 int vec_all_ne (vector bool short, vector signed short); 38172 int vec_all_ne (vector pixel, vector pixel); 38173 int vec_all_ne (vector signed int, vector bool int); 38174 int vec_all_ne (vector signed int, vector signed int); 38175 int vec_all_ne (vector unsigned int, vector bool int); 38176 int vec_all_ne (vector unsigned int, vector unsigned int); 38177 int vec_all_ne (vector bool int, vector bool int); 38178 int vec_all_ne (vector bool int, vector unsigned int); 38179 int vec_all_ne (vector bool int, vector signed int); 38180 int vec_all_ne (vector float, vector float); 38181 38182 int vec_all_nge (vector float, vector float); 38183 38184 int vec_all_ngt (vector float, vector float); 38185 38186 int vec_all_nle (vector float, vector float); 38187 38188 int vec_all_nlt (vector float, vector float); 38189 38190 int vec_all_numeric (vector float); 38191 38192 int vec_any_eq (vector signed char, vector bool char); 38193 int vec_any_eq (vector signed char, vector signed char); 38194 int vec_any_eq (vector unsigned char, vector bool char); 38195 int vec_any_eq (vector unsigned char, vector unsigned char); 38196 int vec_any_eq (vector bool char, vector bool char); 38197 int vec_any_eq (vector bool char, vector unsigned char); 38198 int vec_any_eq (vector bool char, vector signed char); 38199 int vec_any_eq (vector signed short, vector bool short); 38200 int vec_any_eq (vector signed short, vector signed short); 38201 int vec_any_eq (vector unsigned short, vector bool short); 38202 int vec_any_eq (vector unsigned short, vector unsigned short); 38203 int vec_any_eq (vector bool short, vector bool short); 38204 int vec_any_eq (vector bool short, vector unsigned short); 38205 int vec_any_eq (vector bool short, vector signed short); 38206 int vec_any_eq (vector pixel, vector pixel); 38207 int vec_any_eq (vector signed int, vector bool int); 38208 int vec_any_eq (vector signed int, vector signed int); 38209 int vec_any_eq (vector unsigned int, vector bool int); 38210 int vec_any_eq (vector unsigned int, vector unsigned int); 38211 int vec_any_eq (vector bool int, vector bool int); 38212 int vec_any_eq (vector bool int, vector unsigned int); 38213 int vec_any_eq (vector bool int, vector signed int); 38214 int vec_any_eq (vector float, vector float); 38215 38216 int vec_any_ge (vector signed char, vector bool char); 38217 int vec_any_ge (vector unsigned char, vector bool char); 38218 int vec_any_ge (vector unsigned char, vector unsigned char); 38219 int vec_any_ge (vector signed char, vector signed char); 38220 int vec_any_ge (vector bool char, vector unsigned char); 38221 int vec_any_ge (vector bool char, vector signed char); 38222 int vec_any_ge (vector unsigned short, vector bool short); 38223 int vec_any_ge (vector unsigned short, vector unsigned short); 38224 int vec_any_ge (vector signed short, vector signed short); 38225 int vec_any_ge (vector signed short, vector bool short); 38226 int vec_any_ge (vector bool short, vector unsigned short); 38227 int vec_any_ge (vector bool short, vector signed short); 38228 int vec_any_ge (vector signed int, vector bool int); 38229 int vec_any_ge (vector unsigned int, vector bool int); 38230 int vec_any_ge (vector unsigned int, vector unsigned int); 38231 int vec_any_ge (vector signed int, vector signed int); 38232 int vec_any_ge (vector bool int, vector unsigned int); 38233 int vec_any_ge (vector bool int, vector signed int); 38234 int vec_any_ge (vector float, vector float); 38235 38236 int vec_any_gt (vector bool char, vector unsigned char); 38237 int vec_any_gt (vector unsigned char, vector bool char); 38238 int vec_any_gt (vector unsigned char, vector unsigned char); 38239 int vec_any_gt (vector bool char, vector signed char); 38240 int vec_any_gt (vector signed char, vector bool char); 38241 int vec_any_gt (vector signed char, vector signed char); 38242 int vec_any_gt (vector bool short, vector unsigned short); 38243 int vec_any_gt (vector unsigned short, vector bool short); 38244 int vec_any_gt (vector unsigned short, vector unsigned short); 38245 int vec_any_gt (vector bool short, vector signed short); 38246 int vec_any_gt (vector signed short, vector bool short); 38247 int vec_any_gt (vector signed short, vector signed short); 38248 int vec_any_gt (vector bool int, vector unsigned int); 38249 int vec_any_gt (vector unsigned int, vector bool int); 38250 int vec_any_gt (vector unsigned int, vector unsigned int); 38251 int vec_any_gt (vector bool int, vector signed int); 38252 int vec_any_gt (vector signed int, vector bool int); 38253 int vec_any_gt (vector signed int, vector signed int); 38254 int vec_any_gt (vector float, vector float); 38255 38256 int vec_any_le (vector bool char, vector unsigned char); 38257 int vec_any_le (vector unsigned char, vector bool char); 38258 int vec_any_le (vector unsigned char, vector unsigned char); 38259 int vec_any_le (vector bool char, vector signed char); 38260 int vec_any_le (vector signed char, vector bool char); 38261 int vec_any_le (vector signed char, vector signed char); 38262 int vec_any_le (vector bool short, vector unsigned short); 38263 int vec_any_le (vector unsigned short, vector bool short); 38264 int vec_any_le (vector unsigned short, vector unsigned short); 38265 int vec_any_le (vector bool short, vector signed short); 38266 int vec_any_le (vector signed short, vector bool short); 38267 int vec_any_le (vector signed short, vector signed short); 38268 int vec_any_le (vector bool int, vector unsigned int); 38269 int vec_any_le (vector unsigned int, vector bool int); 38270 int vec_any_le (vector unsigned int, vector unsigned int); 38271 int vec_any_le (vector bool int, vector signed int); 38272 int vec_any_le (vector signed int, vector bool int); 38273 int vec_any_le (vector signed int, vector signed int); 38274 int vec_any_le (vector float, vector float); 38275 38276 int vec_any_lt (vector bool char, vector unsigned char); 38277 int vec_any_lt (vector unsigned char, vector bool char); 38278 int vec_any_lt (vector unsigned char, vector unsigned char); 38279 int vec_any_lt (vector bool char, vector signed char); 38280 int vec_any_lt (vector signed char, vector bool char); 38281 int vec_any_lt (vector signed char, vector signed char); 38282 int vec_any_lt (vector bool short, vector unsigned short); 38283 int vec_any_lt (vector unsigned short, vector bool short); 38284 int vec_any_lt (vector unsigned short, vector unsigned short); 38285 int vec_any_lt (vector bool short, vector signed short); 38286 int vec_any_lt (vector signed short, vector bool short); 38287 int vec_any_lt (vector signed short, vector signed short); 38288 int vec_any_lt (vector bool int, vector unsigned int); 38289 int vec_any_lt (vector unsigned int, vector bool int); 38290 int vec_any_lt (vector unsigned int, vector unsigned int); 38291 int vec_any_lt (vector bool int, vector signed int); 38292 int vec_any_lt (vector signed int, vector bool int); 38293 int vec_any_lt (vector signed int, vector signed int); 38294 int vec_any_lt (vector float, vector float); 38295 38296 int vec_any_nan (vector float); 38297 38298 int vec_any_ne (vector signed char, vector bool char); 38299 int vec_any_ne (vector signed char, vector signed char); 38300 int vec_any_ne (vector unsigned char, vector bool char); 38301 int vec_any_ne (vector unsigned char, vector unsigned char); 38302 int vec_any_ne (vector bool char, vector bool char); 38303 int vec_any_ne (vector bool char, vector unsigned char); 38304 int vec_any_ne (vector bool char, vector signed char); 38305 int vec_any_ne (vector signed short, vector bool short); 38306 int vec_any_ne (vector signed short, vector signed short); 38307 int vec_any_ne (vector unsigned short, vector bool short); 38308 int vec_any_ne (vector unsigned short, vector unsigned short); 38309 int vec_any_ne (vector bool short, vector bool short); 38310 int vec_any_ne (vector bool short, vector unsigned short); 38311 int vec_any_ne (vector bool short, vector signed short); 38312 int vec_any_ne (vector pixel, vector pixel); 38313 int vec_any_ne (vector signed int, vector bool int); 38314 int vec_any_ne (vector signed int, vector signed int); 38315 int vec_any_ne (vector unsigned int, vector bool int); 38316 int vec_any_ne (vector unsigned int, vector unsigned int); 38317 int vec_any_ne (vector bool int, vector bool int); 38318 int vec_any_ne (vector bool int, vector unsigned int); 38319 int vec_any_ne (vector bool int, vector signed int); 38320 int vec_any_ne (vector float, vector float); 38321 38322 int vec_any_nge (vector float, vector float); 38323 38324 int vec_any_ngt (vector float, vector float); 38325 38326 int vec_any_nle (vector float, vector float); 38327 38328 int vec_any_nlt (vector float, vector float); 38329 38330 int vec_any_numeric (vector float); 38331 38332 int vec_any_out (vector float, vector float); 38333 38334 If the vector/scalar (VSX) instruction set is available, the following 38335additional functions are available: 38336 38337 vector double vec_abs (vector double); 38338 vector double vec_add (vector double, vector double); 38339 vector double vec_and (vector double, vector double); 38340 vector double vec_and (vector double, vector bool long); 38341 vector double vec_and (vector bool long, vector double); 38342 vector long vec_and (vector long, vector long); 38343 vector long vec_and (vector long, vector bool long); 38344 vector long vec_and (vector bool long, vector long); 38345 vector unsigned long vec_and (vector unsigned long, vector unsigned long); 38346 vector unsigned long vec_and (vector unsigned long, vector bool long); 38347 vector unsigned long vec_and (vector bool long, vector unsigned long); 38348 vector double vec_andc (vector double, vector double); 38349 vector double vec_andc (vector double, vector bool long); 38350 vector double vec_andc (vector bool long, vector double); 38351 vector long vec_andc (vector long, vector long); 38352 vector long vec_andc (vector long, vector bool long); 38353 vector long vec_andc (vector bool long, vector long); 38354 vector unsigned long vec_andc (vector unsigned long, vector unsigned long); 38355 vector unsigned long vec_andc (vector unsigned long, vector bool long); 38356 vector unsigned long vec_andc (vector bool long, vector unsigned long); 38357 vector double vec_ceil (vector double); 38358 vector bool long vec_cmpeq (vector double, vector double); 38359 vector bool long vec_cmpge (vector double, vector double); 38360 vector bool long vec_cmpgt (vector double, vector double); 38361 vector bool long vec_cmple (vector double, vector double); 38362 vector bool long vec_cmplt (vector double, vector double); 38363 vector double vec_cpsgn (vector double, vector double); 38364 vector float vec_div (vector float, vector float); 38365 vector double vec_div (vector double, vector double); 38366 vector long vec_div (vector long, vector long); 38367 vector unsigned long vec_div (vector unsigned long, vector unsigned long); 38368 vector double vec_floor (vector double); 38369 vector double vec_ld (int, const vector double *); 38370 vector double vec_ld (int, const double *); 38371 vector double vec_ldl (int, const vector double *); 38372 vector double vec_ldl (int, const double *); 38373 vector unsigned char vec_lvsl (int, const volatile double *); 38374 vector unsigned char vec_lvsr (int, const volatile double *); 38375 vector double vec_madd (vector double, vector double, vector double); 38376 vector double vec_max (vector double, vector double); 38377 vector signed long vec_mergeh (vector signed long, vector signed long); 38378 vector signed long vec_mergeh (vector signed long, vector bool long); 38379 vector signed long vec_mergeh (vector bool long, vector signed long); 38380 vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long); 38381 vector unsigned long vec_mergeh (vector unsigned long, vector bool long); 38382 vector unsigned long vec_mergeh (vector bool long, vector unsigned long); 38383 vector signed long vec_mergel (vector signed long, vector signed long); 38384 vector signed long vec_mergel (vector signed long, vector bool long); 38385 vector signed long vec_mergel (vector bool long, vector signed long); 38386 vector unsigned long vec_mergel (vector unsigned long, vector unsigned long); 38387 vector unsigned long vec_mergel (vector unsigned long, vector bool long); 38388 vector unsigned long vec_mergel (vector bool long, vector unsigned long); 38389 vector double vec_min (vector double, vector double); 38390 vector float vec_msub (vector float, vector float, vector float); 38391 vector double vec_msub (vector double, vector double, vector double); 38392 vector float vec_mul (vector float, vector float); 38393 vector double vec_mul (vector double, vector double); 38394 vector long vec_mul (vector long, vector long); 38395 vector unsigned long vec_mul (vector unsigned long, vector unsigned long); 38396 vector float vec_nearbyint (vector float); 38397 vector double vec_nearbyint (vector double); 38398 vector float vec_nmadd (vector float, vector float, vector float); 38399 vector double vec_nmadd (vector double, vector double, vector double); 38400 vector double vec_nmsub (vector double, vector double, vector double); 38401 vector double vec_nor (vector double, vector double); 38402 vector long vec_nor (vector long, vector long); 38403 vector long vec_nor (vector long, vector bool long); 38404 vector long vec_nor (vector bool long, vector long); 38405 vector unsigned long vec_nor (vector unsigned long, vector unsigned long); 38406 vector unsigned long vec_nor (vector unsigned long, vector bool long); 38407 vector unsigned long vec_nor (vector bool long, vector unsigned long); 38408 vector double vec_or (vector double, vector double); 38409 vector double vec_or (vector double, vector bool long); 38410 vector double vec_or (vector bool long, vector double); 38411 vector long vec_or (vector long, vector long); 38412 vector long vec_or (vector long, vector bool long); 38413 vector long vec_or (vector bool long, vector long); 38414 vector unsigned long vec_or (vector unsigned long, vector unsigned long); 38415 vector unsigned long vec_or (vector unsigned long, vector bool long); 38416 vector unsigned long vec_or (vector bool long, vector unsigned long); 38417 vector double vec_perm (vector double, vector double, vector unsigned char); 38418 vector long vec_perm (vector long, vector long, vector unsigned char); 38419 vector unsigned long vec_perm (vector unsigned long, vector unsigned long, 38420 vector unsigned char); 38421 vector double vec_rint (vector double); 38422 vector double vec_recip (vector double, vector double); 38423 vector double vec_rsqrt (vector double); 38424 vector double vec_rsqrte (vector double); 38425 vector double vec_sel (vector double, vector double, vector bool long); 38426 vector double vec_sel (vector double, vector double, vector unsigned long); 38427 vector long vec_sel (vector long, vector long, vector long); 38428 vector long vec_sel (vector long, vector long, vector unsigned long); 38429 vector long vec_sel (vector long, vector long, vector bool long); 38430 vector unsigned long vec_sel (vector unsigned long, vector unsigned long, 38431 vector long); 38432 vector unsigned long vec_sel (vector unsigned long, vector unsigned long, 38433 vector unsigned long); 38434 vector unsigned long vec_sel (vector unsigned long, vector unsigned long, 38435 vector bool long); 38436 vector double vec_splats (double); 38437 vector signed long vec_splats (signed long); 38438 vector unsigned long vec_splats (unsigned long); 38439 vector float vec_sqrt (vector float); 38440 vector double vec_sqrt (vector double); 38441 void vec_st (vector double, int, vector double *); 38442 void vec_st (vector double, int, double *); 38443 vector double vec_sub (vector double, vector double); 38444 vector double vec_trunc (vector double); 38445 vector double vec_xor (vector double, vector double); 38446 vector double vec_xor (vector double, vector bool long); 38447 vector double vec_xor (vector bool long, vector double); 38448 vector long vec_xor (vector long, vector long); 38449 vector long vec_xor (vector long, vector bool long); 38450 vector long vec_xor (vector bool long, vector long); 38451 vector unsigned long vec_xor (vector unsigned long, vector unsigned long); 38452 vector unsigned long vec_xor (vector unsigned long, vector bool long); 38453 vector unsigned long vec_xor (vector bool long, vector unsigned long); 38454 int vec_all_eq (vector double, vector double); 38455 int vec_all_ge (vector double, vector double); 38456 int vec_all_gt (vector double, vector double); 38457 int vec_all_le (vector double, vector double); 38458 int vec_all_lt (vector double, vector double); 38459 int vec_all_nan (vector double); 38460 int vec_all_ne (vector double, vector double); 38461 int vec_all_nge (vector double, vector double); 38462 int vec_all_ngt (vector double, vector double); 38463 int vec_all_nle (vector double, vector double); 38464 int vec_all_nlt (vector double, vector double); 38465 int vec_all_numeric (vector double); 38466 int vec_any_eq (vector double, vector double); 38467 int vec_any_ge (vector double, vector double); 38468 int vec_any_gt (vector double, vector double); 38469 int vec_any_le (vector double, vector double); 38470 int vec_any_lt (vector double, vector double); 38471 int vec_any_nan (vector double); 38472 int vec_any_ne (vector double, vector double); 38473 int vec_any_nge (vector double, vector double); 38474 int vec_any_ngt (vector double, vector double); 38475 int vec_any_nle (vector double, vector double); 38476 int vec_any_nlt (vector double, vector double); 38477 int vec_any_numeric (vector double); 38478 38479 vector double vec_vsx_ld (int, const vector double *); 38480 vector double vec_vsx_ld (int, const double *); 38481 vector float vec_vsx_ld (int, const vector float *); 38482 vector float vec_vsx_ld (int, const float *); 38483 vector bool int vec_vsx_ld (int, const vector bool int *); 38484 vector signed int vec_vsx_ld (int, const vector signed int *); 38485 vector signed int vec_vsx_ld (int, const int *); 38486 vector signed int vec_vsx_ld (int, const long *); 38487 vector unsigned int vec_vsx_ld (int, const vector unsigned int *); 38488 vector unsigned int vec_vsx_ld (int, const unsigned int *); 38489 vector unsigned int vec_vsx_ld (int, const unsigned long *); 38490 vector bool short vec_vsx_ld (int, const vector bool short *); 38491 vector pixel vec_vsx_ld (int, const vector pixel *); 38492 vector signed short vec_vsx_ld (int, const vector signed short *); 38493 vector signed short vec_vsx_ld (int, const short *); 38494 vector unsigned short vec_vsx_ld (int, const vector unsigned short *); 38495 vector unsigned short vec_vsx_ld (int, const unsigned short *); 38496 vector bool char vec_vsx_ld (int, const vector bool char *); 38497 vector signed char vec_vsx_ld (int, const vector signed char *); 38498 vector signed char vec_vsx_ld (int, const signed char *); 38499 vector unsigned char vec_vsx_ld (int, const vector unsigned char *); 38500 vector unsigned char vec_vsx_ld (int, const unsigned char *); 38501 38502 void vec_vsx_st (vector double, int, vector double *); 38503 void vec_vsx_st (vector double, int, double *); 38504 void vec_vsx_st (vector float, int, vector float *); 38505 void vec_vsx_st (vector float, int, float *); 38506 void vec_vsx_st (vector signed int, int, vector signed int *); 38507 void vec_vsx_st (vector signed int, int, int *); 38508 void vec_vsx_st (vector unsigned int, int, vector unsigned int *); 38509 void vec_vsx_st (vector unsigned int, int, unsigned int *); 38510 void vec_vsx_st (vector bool int, int, vector bool int *); 38511 void vec_vsx_st (vector bool int, int, unsigned int *); 38512 void vec_vsx_st (vector bool int, int, int *); 38513 void vec_vsx_st (vector signed short, int, vector signed short *); 38514 void vec_vsx_st (vector signed short, int, short *); 38515 void vec_vsx_st (vector unsigned short, int, vector unsigned short *); 38516 void vec_vsx_st (vector unsigned short, int, unsigned short *); 38517 void vec_vsx_st (vector bool short, int, vector bool short *); 38518 void vec_vsx_st (vector bool short, int, unsigned short *); 38519 void vec_vsx_st (vector pixel, int, vector pixel *); 38520 void vec_vsx_st (vector pixel, int, unsigned short *); 38521 void vec_vsx_st (vector pixel, int, short *); 38522 void vec_vsx_st (vector bool short, int, short *); 38523 void vec_vsx_st (vector signed char, int, vector signed char *); 38524 void vec_vsx_st (vector signed char, int, signed char *); 38525 void vec_vsx_st (vector unsigned char, int, vector unsigned char *); 38526 void vec_vsx_st (vector unsigned char, int, unsigned char *); 38527 void vec_vsx_st (vector bool char, int, vector bool char *); 38528 void vec_vsx_st (vector bool char, int, unsigned char *); 38529 void vec_vsx_st (vector bool char, int, signed char *); 38530 38531 vector double vec_xxpermdi (vector double, vector double, int); 38532 vector float vec_xxpermdi (vector float, vector float, int); 38533 vector long long vec_xxpermdi (vector long long, vector long long, int); 38534 vector unsigned long long vec_xxpermdi (vector unsigned long long, 38535 vector unsigned long long, int); 38536 vector int vec_xxpermdi (vector int, vector int, int); 38537 vector unsigned int vec_xxpermdi (vector unsigned int, 38538 vector unsigned int, int); 38539 vector short vec_xxpermdi (vector short, vector short, int); 38540 vector unsigned short vec_xxpermdi (vector unsigned short, 38541 vector unsigned short, int); 38542 vector signed char vec_xxpermdi (vector signed char, vector signed char, int); 38543 vector unsigned char vec_xxpermdi (vector unsigned char, 38544 vector unsigned char, int); 38545 38546 vector double vec_xxsldi (vector double, vector double, int); 38547 vector float vec_xxsldi (vector float, vector float, int); 38548 vector long long vec_xxsldi (vector long long, vector long long, int); 38549 vector unsigned long long vec_xxsldi (vector unsigned long long, 38550 vector unsigned long long, int); 38551 vector int vec_xxsldi (vector int, vector int, int); 38552 vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int); 38553 vector short vec_xxsldi (vector short, vector short, int); 38554 vector unsigned short vec_xxsldi (vector unsigned short, 38555 vector unsigned short, int); 38556 vector signed char vec_xxsldi (vector signed char, vector signed char, int); 38557 vector unsigned char vec_xxsldi (vector unsigned char, 38558 vector unsigned char, int); 38559 38560 Note that the `vec_ld' and `vec_st' built-in functions always generate 38561the AltiVec `LVX' and `STVX' instructions even if the VSX instruction 38562set is available. The `vec_vsx_ld' and `vec_vsx_st' built-in functions 38563always generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X' 38564instructions. 38565 38566 If the ISA 2.07 additions to the vector/scalar (power8-vector) 38567instruction set is available, the following additional functions are 38568available for both 32-bit and 64-bit targets. For 64-bit targets, you 38569can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG 38570instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of 38571VECTOR UNSIGNED LONG LONG. 38572 38573 vector long long vec_abs (vector long long); 38574 38575 vector long long vec_add (vector long long, vector long long); 38576 vector unsigned long long vec_add (vector unsigned long long, 38577 vector unsigned long long); 38578 38579 int vec_all_eq (vector long long, vector long long); 38580 int vec_all_eq (vector unsigned long long, vector unsigned long long); 38581 int vec_all_ge (vector long long, vector long long); 38582 int vec_all_ge (vector unsigned long long, vector unsigned long long); 38583 int vec_all_gt (vector long long, vector long long); 38584 int vec_all_gt (vector unsigned long long, vector unsigned long long); 38585 int vec_all_le (vector long long, vector long long); 38586 int vec_all_le (vector unsigned long long, vector unsigned long long); 38587 int vec_all_lt (vector long long, vector long long); 38588 int vec_all_lt (vector unsigned long long, vector unsigned long long); 38589 int vec_all_ne (vector long long, vector long long); 38590 int vec_all_ne (vector unsigned long long, vector unsigned long long); 38591 38592 int vec_any_eq (vector long long, vector long long); 38593 int vec_any_eq (vector unsigned long long, vector unsigned long long); 38594 int vec_any_ge (vector long long, vector long long); 38595 int vec_any_ge (vector unsigned long long, vector unsigned long long); 38596 int vec_any_gt (vector long long, vector long long); 38597 int vec_any_gt (vector unsigned long long, vector unsigned long long); 38598 int vec_any_le (vector long long, vector long long); 38599 int vec_any_le (vector unsigned long long, vector unsigned long long); 38600 int vec_any_lt (vector long long, vector long long); 38601 int vec_any_lt (vector unsigned long long, vector unsigned long long); 38602 int vec_any_ne (vector long long, vector long long); 38603 int vec_any_ne (vector unsigned long long, vector unsigned long long); 38604 38605 vector long long vec_eqv (vector long long, vector long long); 38606 vector long long vec_eqv (vector bool long long, vector long long); 38607 vector long long vec_eqv (vector long long, vector bool long long); 38608 vector unsigned long long vec_eqv (vector unsigned long long, 38609 vector unsigned long long); 38610 vector unsigned long long vec_eqv (vector bool long long, 38611 vector unsigned long long); 38612 vector unsigned long long vec_eqv (vector unsigned long long, 38613 vector bool long long); 38614 vector int vec_eqv (vector int, vector int); 38615 vector int vec_eqv (vector bool int, vector int); 38616 vector int vec_eqv (vector int, vector bool int); 38617 vector unsigned int vec_eqv (vector unsigned int, vector unsigned int); 38618 vector unsigned int vec_eqv (vector bool unsigned int, 38619 vector unsigned int); 38620 vector unsigned int vec_eqv (vector unsigned int, 38621 vector bool unsigned int); 38622 vector short vec_eqv (vector short, vector short); 38623 vector short vec_eqv (vector bool short, vector short); 38624 vector short vec_eqv (vector short, vector bool short); 38625 vector unsigned short vec_eqv (vector unsigned short, vector unsigned short); 38626 vector unsigned short vec_eqv (vector bool unsigned short, 38627 vector unsigned short); 38628 vector unsigned short vec_eqv (vector unsigned short, 38629 vector bool unsigned short); 38630 vector signed char vec_eqv (vector signed char, vector signed char); 38631 vector signed char vec_eqv (vector bool signed char, vector signed char); 38632 vector signed char vec_eqv (vector signed char, vector bool signed char); 38633 vector unsigned char vec_eqv (vector unsigned char, vector unsigned char); 38634 vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char); 38635 vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char); 38636 38637 vector long long vec_max (vector long long, vector long long); 38638 vector unsigned long long vec_max (vector unsigned long long, 38639 vector unsigned long long); 38640 38641 vector signed int vec_mergee (vector signed int, vector signed int); 38642 vector unsigned int vec_mergee (vector unsigned int, vector unsigned int); 38643 vector bool int vec_mergee (vector bool int, vector bool int); 38644 38645 vector signed int vec_mergeo (vector signed int, vector signed int); 38646 vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int); 38647 vector bool int vec_mergeo (vector bool int, vector bool int); 38648 38649 vector long long vec_min (vector long long, vector long long); 38650 vector unsigned long long vec_min (vector unsigned long long, 38651 vector unsigned long long); 38652 38653 vector long long vec_nand (vector long long, vector long long); 38654 vector long long vec_nand (vector bool long long, vector long long); 38655 vector long long vec_nand (vector long long, vector bool long long); 38656 vector unsigned long long vec_nand (vector unsigned long long, 38657 vector unsigned long long); 38658 vector unsigned long long vec_nand (vector bool long long, 38659 vector unsigned long long); 38660 vector unsigned long long vec_nand (vector unsigned long long, 38661 vector bool long long); 38662 vector int vec_nand (vector int, vector int); 38663 vector int vec_nand (vector bool int, vector int); 38664 vector int vec_nand (vector int, vector bool int); 38665 vector unsigned int vec_nand (vector unsigned int, vector unsigned int); 38666 vector unsigned int vec_nand (vector bool unsigned int, 38667 vector unsigned int); 38668 vector unsigned int vec_nand (vector unsigned int, 38669 vector bool unsigned int); 38670 vector short vec_nand (vector short, vector short); 38671 vector short vec_nand (vector bool short, vector short); 38672 vector short vec_nand (vector short, vector bool short); 38673 vector unsigned short vec_nand (vector unsigned short, vector unsigned short); 38674 vector unsigned short vec_nand (vector bool unsigned short, 38675 vector unsigned short); 38676 vector unsigned short vec_nand (vector unsigned short, 38677 vector bool unsigned short); 38678 vector signed char vec_nand (vector signed char, vector signed char); 38679 vector signed char vec_nand (vector bool signed char, vector signed char); 38680 vector signed char vec_nand (vector signed char, vector bool signed char); 38681 vector unsigned char vec_nand (vector unsigned char, vector unsigned char); 38682 vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char); 38683 vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char); 38684 38685 vector long long vec_orc (vector long long, vector long long); 38686 vector long long vec_orc (vector bool long long, vector long long); 38687 vector long long vec_orc (vector long long, vector bool long long); 38688 vector unsigned long long vec_orc (vector unsigned long long, 38689 vector unsigned long long); 38690 vector unsigned long long vec_orc (vector bool long long, 38691 vector unsigned long long); 38692 vector unsigned long long vec_orc (vector unsigned long long, 38693 vector bool long long); 38694 vector int vec_orc (vector int, vector int); 38695 vector int vec_orc (vector bool int, vector int); 38696 vector int vec_orc (vector int, vector bool int); 38697 vector unsigned int vec_orc (vector unsigned int, vector unsigned int); 38698 vector unsigned int vec_orc (vector bool unsigned int, 38699 vector unsigned int); 38700 vector unsigned int vec_orc (vector unsigned int, 38701 vector bool unsigned int); 38702 vector short vec_orc (vector short, vector short); 38703 vector short vec_orc (vector bool short, vector short); 38704 vector short vec_orc (vector short, vector bool short); 38705 vector unsigned short vec_orc (vector unsigned short, vector unsigned short); 38706 vector unsigned short vec_orc (vector bool unsigned short, 38707 vector unsigned short); 38708 vector unsigned short vec_orc (vector unsigned short, 38709 vector bool unsigned short); 38710 vector signed char vec_orc (vector signed char, vector signed char); 38711 vector signed char vec_orc (vector bool signed char, vector signed char); 38712 vector signed char vec_orc (vector signed char, vector bool signed char); 38713 vector unsigned char vec_orc (vector unsigned char, vector unsigned char); 38714 vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char); 38715 vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char); 38716 38717 vector int vec_pack (vector long long, vector long long); 38718 vector unsigned int vec_pack (vector unsigned long long, 38719 vector unsigned long long); 38720 vector bool int vec_pack (vector bool long long, vector bool long long); 38721 38722 vector int vec_packs (vector long long, vector long long); 38723 vector unsigned int vec_packs (vector unsigned long long, 38724 vector unsigned long long); 38725 38726 vector unsigned int vec_packsu (vector long long, vector long long); 38727 vector unsigned int vec_packsu (vector unsigned long long, 38728 vector unsigned long long); 38729 38730 vector long long vec_rl (vector long long, 38731 vector unsigned long long); 38732 vector long long vec_rl (vector unsigned long long, 38733 vector unsigned long long); 38734 38735 vector long long vec_sl (vector long long, vector unsigned long long); 38736 vector long long vec_sl (vector unsigned long long, 38737 vector unsigned long long); 38738 38739 vector long long vec_sr (vector long long, vector unsigned long long); 38740 vector unsigned long long char vec_sr (vector unsigned long long, 38741 vector unsigned long long); 38742 38743 vector long long vec_sra (vector long long, vector unsigned long long); 38744 vector unsigned long long vec_sra (vector unsigned long long, 38745 vector unsigned long long); 38746 38747 vector long long vec_sub (vector long long, vector long long); 38748 vector unsigned long long vec_sub (vector unsigned long long, 38749 vector unsigned long long); 38750 38751 vector long long vec_unpackh (vector int); 38752 vector unsigned long long vec_unpackh (vector unsigned int); 38753 38754 vector long long vec_unpackl (vector int); 38755 vector unsigned long long vec_unpackl (vector unsigned int); 38756 38757 vector long long vec_vaddudm (vector long long, vector long long); 38758 vector long long vec_vaddudm (vector bool long long, vector long long); 38759 vector long long vec_vaddudm (vector long long, vector bool long long); 38760 vector unsigned long long vec_vaddudm (vector unsigned long long, 38761 vector unsigned long long); 38762 vector unsigned long long vec_vaddudm (vector bool unsigned long long, 38763 vector unsigned long long); 38764 vector unsigned long long vec_vaddudm (vector unsigned long long, 38765 vector bool unsigned long long); 38766 38767 vector long long vec_vbpermq (vector signed char, vector signed char); 38768 vector long long vec_vbpermq (vector unsigned char, vector unsigned char); 38769 38770 vector long long vec_cntlz (vector long long); 38771 vector unsigned long long vec_cntlz (vector unsigned long long); 38772 vector int vec_cntlz (vector int); 38773 vector unsigned int vec_cntlz (vector int); 38774 vector short vec_cntlz (vector short); 38775 vector unsigned short vec_cntlz (vector unsigned short); 38776 vector signed char vec_cntlz (vector signed char); 38777 vector unsigned char vec_cntlz (vector unsigned char); 38778 38779 vector long long vec_vclz (vector long long); 38780 vector unsigned long long vec_vclz (vector unsigned long long); 38781 vector int vec_vclz (vector int); 38782 vector unsigned int vec_vclz (vector int); 38783 vector short vec_vclz (vector short); 38784 vector unsigned short vec_vclz (vector unsigned short); 38785 vector signed char vec_vclz (vector signed char); 38786 vector unsigned char vec_vclz (vector unsigned char); 38787 38788 vector signed char vec_vclzb (vector signed char); 38789 vector unsigned char vec_vclzb (vector unsigned char); 38790 38791 vector long long vec_vclzd (vector long long); 38792 vector unsigned long long vec_vclzd (vector unsigned long long); 38793 38794 vector short vec_vclzh (vector short); 38795 vector unsigned short vec_vclzh (vector unsigned short); 38796 38797 vector int vec_vclzw (vector int); 38798 vector unsigned int vec_vclzw (vector int); 38799 38800 vector signed char vec_vgbbd (vector signed char); 38801 vector unsigned char vec_vgbbd (vector unsigned char); 38802 38803 vector long long vec_vmaxsd (vector long long, vector long long); 38804 38805 vector unsigned long long vec_vmaxud (vector unsigned long long, 38806 unsigned vector long long); 38807 38808 vector long long vec_vminsd (vector long long, vector long long); 38809 38810 vector unsigned long long vec_vminud (vector long long, 38811 vector long long); 38812 38813 vector int vec_vpksdss (vector long long, vector long long); 38814 vector unsigned int vec_vpksdss (vector long long, vector long long); 38815 38816 vector unsigned int vec_vpkudus (vector unsigned long long, 38817 vector unsigned long long); 38818 38819 vector int vec_vpkudum (vector long long, vector long long); 38820 vector unsigned int vec_vpkudum (vector unsigned long long, 38821 vector unsigned long long); 38822 vector bool int vec_vpkudum (vector bool long long, vector bool long long); 38823 38824 vector long long vec_vpopcnt (vector long long); 38825 vector unsigned long long vec_vpopcnt (vector unsigned long long); 38826 vector int vec_vpopcnt (vector int); 38827 vector unsigned int vec_vpopcnt (vector int); 38828 vector short vec_vpopcnt (vector short); 38829 vector unsigned short vec_vpopcnt (vector unsigned short); 38830 vector signed char vec_vpopcnt (vector signed char); 38831 vector unsigned char vec_vpopcnt (vector unsigned char); 38832 38833 vector signed char vec_vpopcntb (vector signed char); 38834 vector unsigned char vec_vpopcntb (vector unsigned char); 38835 38836 vector long long vec_vpopcntd (vector long long); 38837 vector unsigned long long vec_vpopcntd (vector unsigned long long); 38838 38839 vector short vec_vpopcnth (vector short); 38840 vector unsigned short vec_vpopcnth (vector unsigned short); 38841 38842 vector int vec_vpopcntw (vector int); 38843 vector unsigned int vec_vpopcntw (vector int); 38844 38845 vector long long vec_vrld (vector long long, vector unsigned long long); 38846 vector unsigned long long vec_vrld (vector unsigned long long, 38847 vector unsigned long long); 38848 38849 vector long long vec_vsld (vector long long, vector unsigned long long); 38850 vector long long vec_vsld (vector unsigned long long, 38851 vector unsigned long long); 38852 38853 vector long long vec_vsrad (vector long long, vector unsigned long long); 38854 vector unsigned long long vec_vsrad (vector unsigned long long, 38855 vector unsigned long long); 38856 38857 vector long long vec_vsrd (vector long long, vector unsigned long long); 38858 vector unsigned long long char vec_vsrd (vector unsigned long long, 38859 vector unsigned long long); 38860 38861 vector long long vec_vsubudm (vector long long, vector long long); 38862 vector long long vec_vsubudm (vector bool long long, vector long long); 38863 vector long long vec_vsubudm (vector long long, vector bool long long); 38864 vector unsigned long long vec_vsubudm (vector unsigned long long, 38865 vector unsigned long long); 38866 vector unsigned long long vec_vsubudm (vector bool long long, 38867 vector unsigned long long); 38868 vector unsigned long long vec_vsubudm (vector unsigned long long, 38869 vector bool long long); 38870 38871 vector long long vec_vupkhsw (vector int); 38872 vector unsigned long long vec_vupkhsw (vector unsigned int); 38873 38874 vector long long vec_vupklsw (vector int); 38875 vector unsigned long long vec_vupklsw (vector int); 38876 38877 If the ISA 2.07 additions to the vector/scalar (power8-vector) 38878instruction set is available, the following additional functions are 38879available for 64-bit targets. New vector types (VECTOR __INT128_T and 38880VECTOR __UINT128_T) are available to hold the __INT128_T and 38881__UINT128_T types to use these builtins. 38882 38883 The normal vector extract, and set operations work on VECTOR 38884__INT128_T and VECTOR __UINT128_T types, but the index value must be 0. 38885 38886 vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t); 38887 vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t); 38888 38889 vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t); 38890 vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t); 38891 38892 vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t, 38893 vector __int128_t); 38894 vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t, 38895 vector __uint128_t); 38896 38897 vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t, 38898 vector __int128_t); 38899 vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t, 38900 vector __uint128_t); 38901 38902 vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t, 38903 vector __int128_t); 38904 vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t, 38905 vector __uint128_t); 38906 38907 vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t, 38908 vector __int128_t); 38909 vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t, 38910 vector __uint128_t); 38911 38912 vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t); 38913 vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t); 38914 38915 __int128_t vec_vsubuqm (__int128_t, __int128_t); 38916 __uint128_t vec_vsubuqm (__uint128_t, __uint128_t); 38917 38918 vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t); 38919 int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t); 38920 int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t); 38921 int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t); 38922 int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t); 38923 vector __int128_t bcdsub (vector __int128_t, vector__int128_t); 38924 int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t); 38925 int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t); 38926 int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t); 38927 int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t); 38928 38929 If the cryptographic instructions are enabled (`-mcrypto' or 38930`-mcpu=power8'), the following builtins are enabled. 38931 38932 vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long); 38933 38934 vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long, 38935 vector unsigned long long); 38936 38937 vector unsigned long long __builtin_crypto_vcipherlast 38938 (vector unsigned long long, 38939 vector unsigned long long); 38940 38941 vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long, 38942 vector unsigned long long); 38943 38944 vector unsigned long long __builtin_crypto_vncipherlast 38945 (vector unsigned long long, 38946 vector unsigned long long); 38947 38948 vector unsigned char __builtin_crypto_vpermxor (vector unsigned char, 38949 vector unsigned char, 38950 vector unsigned char); 38951 38952 vector unsigned short __builtin_crypto_vpermxor (vector unsigned short, 38953 vector unsigned short, 38954 vector unsigned short); 38955 38956 vector unsigned int __builtin_crypto_vpermxor (vector unsigned int, 38957 vector unsigned int, 38958 vector unsigned int); 38959 38960 vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long, 38961 vector unsigned long long, 38962 vector unsigned long long); 38963 38964 vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char, 38965 vector unsigned char); 38966 38967 vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short, 38968 vector unsigned short); 38969 38970 vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int, 38971 vector unsigned int); 38972 38973 vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long, 38974 vector unsigned long long); 38975 38976 vector unsigned long long __builtin_crypto_vshasigmad 38977 (vector unsigned long long, int, int); 38978 38979 vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int, 38980 int, int); 38981 38982 The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and 38983__BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant 38984integer that is 0 or 1. The third argument to these builtin functions 38985must be a constant integer in the range of 0 to 15. 38986 38987 38988File: 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 38989 389906.58.21 PowerPC Hardware Transactional Memory Built-in Functions 38991---------------------------------------------------------------- 38992 38993GCC provides two interfaces for accessing the Hardware Transactional 38994Memory (HTM) instructions available on some of the PowerPC family of 38995processors (eg, POWER8). The two interfaces come in a low level 38996interface, consisting of built-in functions specific to PowerPC and a 38997higher level interface consisting of inline functions that are common 38998between PowerPC and S/390. 38999 390006.58.21.1 PowerPC HTM Low Level Built-in Functions 39001.................................................. 39002 39003The following low level built-in functions are available with `-mhtm' 39004or `-mcpu=CPU' where CPU is `power8' or later. They all generate the 39005machine instruction that is part of the name. 39006 39007 The HTM builtins (with the exception of `__builtin_tbegin') return the 39008full 4-bit condition register value set by their associated hardware 39009instruction. The header file `htmintrin.h' defines some macros that can 39010be used to decipher the return value. The `__builtin_tbegin' builtin 39011returns a simple true or false value depending on whether a transaction 39012was successfully started or not. The arguments of the builtins match 39013exactly the type and order of the associated hardware instruction's 39014operands, except for the `__builtin_tcheck' builtin, which does not 39015take any input arguments. Refer to the ISA manual for a description of 39016each instruction's operands. 39017 39018 unsigned int __builtin_tbegin (unsigned int) 39019 unsigned int __builtin_tend (unsigned int) 39020 39021 unsigned int __builtin_tabort (unsigned int) 39022 unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int) 39023 unsigned int __builtin_tabortdci (unsigned int, unsigned int, int) 39024 unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int) 39025 unsigned int __builtin_tabortwci (unsigned int, unsigned int, int) 39026 39027 unsigned int __builtin_tcheck (void) 39028 unsigned int __builtin_treclaim (unsigned int) 39029 unsigned int __builtin_trechkpt (void) 39030 unsigned int __builtin_tsr (unsigned int) 39031 39032 In addition to the above HTM built-ins, we have added built-ins for 39033some common extended mnemonics of the HTM instructions: 39034 39035 unsigned int __builtin_tendall (void) 39036 unsigned int __builtin_tresume (void) 39037 unsigned int __builtin_tsuspend (void) 39038 39039 Note that the semantics of the above HTM builtins are required to mimic 39040the locking semantics used for critical sections. Builtins that are 39041used to create a new transaction or restart a suspended transaction 39042must have lock acquisition like semantics while those builtins that end 39043or suspend a transaction must have lock release like semantics. 39044Specifically, this must mimic lock semantics as specified by C++11, for 39045example: Lock acquisition is as-if an execution of 39046__atomic_exchange_n(&globallock,1,__ATOMIC_ACQUIRE) that returns 0, and 39047lock release is as-if an execution of 39048__atomic_store(&globallock,0,__ATOMIC_RELEASE), with globallock being an 39049implicit implementation-defined lock used for all transactions. The HTM 39050instructions associated with with the builtins inherently provide the 39051correct acquisition and release hardware barriers required. However, 39052the compiler must also be prohibited from moving loads and stores across 39053the builtins in a way that would violate their semantics. This has been 39054accomplished by adding memory barriers to the associated HTM 39055instructions (which is a conservative approach to provide acquire and 39056release semantics). Earlier versions of the compiler did not treat the 39057HTM instructions as memory barriers. A `__TM_FENCE__' macro has been 39058added, which can be used to determine whether the current compiler 39059treats HTM instructions as memory barriers or not. This allows the 39060user to explicitly add memory barriers to their code when using an 39061older version of the compiler. 39062 39063 The following set of built-in functions are available to gain access 39064to the HTM specific special purpose registers. 39065 39066 unsigned long __builtin_get_texasr (void) 39067 unsigned long __builtin_get_texasru (void) 39068 unsigned long __builtin_get_tfhar (void) 39069 unsigned long __builtin_get_tfiar (void) 39070 39071 void __builtin_set_texasr (unsigned long); 39072 void __builtin_set_texasru (unsigned long); 39073 void __builtin_set_tfhar (unsigned long); 39074 void __builtin_set_tfiar (unsigned long); 39075 39076 Example usage of these low level built-in functions may look like: 39077 39078 #include <htmintrin.h> 39079 39080 int num_retries = 10; 39081 39082 while (1) 39083 { 39084 if (__builtin_tbegin (0)) 39085 { 39086 /* Transaction State Initiated. */ 39087 if (is_locked (lock)) 39088 __builtin_tabort (0); 39089 ... transaction code... 39090 __builtin_tend (0); 39091 break; 39092 } 39093 else 39094 { 39095 /* Transaction State Failed. Use locks if the transaction 39096 failure is "persistent" or we've tried too many times. */ 39097 if (num_retries-- <= 0 39098 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ())) 39099 { 39100 acquire_lock (lock); 39101 ... non transactional fallback path... 39102 release_lock (lock); 39103 break; 39104 } 39105 } 39106 } 39107 39108 One final built-in function has been added that returns the value of 39109the 2-bit Transaction State field of the Machine Status Register (MSR) 39110as stored in `CR0'. 39111 39112 unsigned long __builtin_ttest (void) 39113 39114 This built-in can be used to determine the current transaction state 39115using the following code example: 39116 39117 #include <htmintrin.h> 39118 39119 unsigned char tx_state = _HTM_STATE (__builtin_ttest ()); 39120 39121 if (tx_state == _HTM_TRANSACTIONAL) 39122 { 39123 /* Code to use in transactional state. */ 39124 } 39125 else if (tx_state == _HTM_NONTRANSACTIONAL) 39126 { 39127 /* Code to use in non-transactional state. */ 39128 } 39129 else if (tx_state == _HTM_SUSPENDED) 39130 { 39131 /* Code to use in transaction suspended state. */ 39132 } 39133 391346.58.21.2 PowerPC HTM High Level Inline Functions 39135................................................. 39136 39137The following high level HTM interface is made available by including 39138`<htmxlintrin.h>' and using `-mhtm' or `-mcpu=CPU' where CPU is 39139`power8' or later. This interface is common between PowerPC and S/390, 39140allowing users to write one HTM source implementation that can be 39141compiled and executed on either system. 39142 39143 long __TM_simple_begin (void) 39144 long __TM_begin (void* const TM_buff) 39145 long __TM_end (void) 39146 void __TM_abort (void) 39147 void __TM_named_abort (unsigned char const code) 39148 void __TM_resume (void) 39149 void __TM_suspend (void) 39150 39151 long __TM_is_user_abort (void* const TM_buff) 39152 long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code) 39153 long __TM_is_illegal (void* const TM_buff) 39154 long __TM_is_footprint_exceeded (void* const TM_buff) 39155 long __TM_nesting_depth (void* const TM_buff) 39156 long __TM_is_nested_too_deep(void* const TM_buff) 39157 long __TM_is_conflict(void* const TM_buff) 39158 long __TM_is_failure_persistent(void* const TM_buff) 39159 long __TM_failure_address(void* const TM_buff) 39160 long long __TM_failure_code(void* const TM_buff) 39161 39162 Using these common set of HTM inline functions, we can create a more 39163portable version of the HTM example in the previous section that will 39164work on either PowerPC or S/390: 39165 39166 #include <htmxlintrin.h> 39167 39168 int num_retries = 10; 39169 TM_buff_type TM_buff; 39170 39171 while (1) 39172 { 39173 if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED) 39174 { 39175 /* Transaction State Initiated. */ 39176 if (is_locked (lock)) 39177 __TM_abort (); 39178 ... transaction code... 39179 __TM_end (); 39180 break; 39181 } 39182 else 39183 { 39184 /* Transaction State Failed. Use locks if the transaction 39185 failure is "persistent" or we've tried too many times. */ 39186 if (num_retries-- <= 0 39187 || __TM_is_failure_persistent (TM_buff)) 39188 { 39189 acquire_lock (lock); 39190 ... non transactional fallback path... 39191 release_lock (lock); 39192 break; 39193 } 39194 } 39195 } 39196 39197 39198File: 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 39199 392006.58.22 RX Built-in Functions 39201----------------------------- 39202 39203GCC supports some of the RX instructions which cannot be expressed in 39204the C programming language via the use of built-in functions. The 39205following functions are supported: 39206 39207 -- Built-in Function: void __builtin_rx_brk (void) 39208 Generates the `brk' machine instruction. 39209 39210 -- Built-in Function: void __builtin_rx_clrpsw (int) 39211 Generates the `clrpsw' machine instruction to clear the specified 39212 bit in the processor status word. 39213 39214 -- Built-in Function: void __builtin_rx_int (int) 39215 Generates the `int' machine instruction to generate an interrupt 39216 with the specified value. 39217 39218 -- Built-in Function: void __builtin_rx_machi (int, int) 39219 Generates the `machi' machine instruction to add the result of 39220 multiplying the top 16 bits of the two arguments into the 39221 accumulator. 39222 39223 -- Built-in Function: void __builtin_rx_maclo (int, int) 39224 Generates the `maclo' machine instruction to add the result of 39225 multiplying the bottom 16 bits of the two arguments into the 39226 accumulator. 39227 39228 -- Built-in Function: void __builtin_rx_mulhi (int, int) 39229 Generates the `mulhi' machine instruction to place the result of 39230 multiplying the top 16 bits of the two arguments into the 39231 accumulator. 39232 39233 -- Built-in Function: void __builtin_rx_mullo (int, int) 39234 Generates the `mullo' machine instruction to place the result of 39235 multiplying the bottom 16 bits of the two arguments into the 39236 accumulator. 39237 39238 -- Built-in Function: int __builtin_rx_mvfachi (void) 39239 Generates the `mvfachi' machine instruction to read the top 32 39240 bits of the accumulator. 39241 39242 -- Built-in Function: int __builtin_rx_mvfacmi (void) 39243 Generates the `mvfacmi' machine instruction to read the middle 32 39244 bits of the accumulator. 39245 39246 -- Built-in Function: int __builtin_rx_mvfc (int) 39247 Generates the `mvfc' machine instruction which reads the control 39248 register specified in its argument and returns its value. 39249 39250 -- Built-in Function: void __builtin_rx_mvtachi (int) 39251 Generates the `mvtachi' machine instruction to set the top 32 bits 39252 of the accumulator. 39253 39254 -- Built-in Function: void __builtin_rx_mvtaclo (int) 39255 Generates the `mvtaclo' machine instruction to set the bottom 32 39256 bits of the accumulator. 39257 39258 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val) 39259 Generates the `mvtc' machine instruction which sets control 39260 register number `reg' to `val'. 39261 39262 -- Built-in Function: void __builtin_rx_mvtipl (int) 39263 Generates the `mvtipl' machine instruction set the interrupt 39264 priority level. 39265 39266 -- Built-in Function: void __builtin_rx_racw (int) 39267 Generates the `racw' machine instruction to round the accumulator 39268 according to the specified mode. 39269 39270 -- Built-in Function: int __builtin_rx_revw (int) 39271 Generates the `revw' machine instruction which swaps the bytes in 39272 the argument so that bits 0-7 now occupy bits 8-15 and vice versa, 39273 and also bits 16-23 occupy bits 24-31 and vice versa. 39274 39275 -- Built-in Function: void __builtin_rx_rmpa (void) 39276 Generates the `rmpa' machine instruction which initiates a 39277 repeated multiply and accumulate sequence. 39278 39279 -- Built-in Function: void __builtin_rx_round (float) 39280 Generates the `round' machine instruction which returns the 39281 floating-point argument rounded according to the current rounding 39282 mode set in the floating-point status word register. 39283 39284 -- Built-in Function: int __builtin_rx_sat (int) 39285 Generates the `sat' machine instruction which returns the 39286 saturated value of the argument. 39287 39288 -- Built-in Function: void __builtin_rx_setpsw (int) 39289 Generates the `setpsw' machine instruction to set the specified 39290 bit in the processor status word. 39291 39292 -- Built-in Function: void __builtin_rx_wait (void) 39293 Generates the `wait' machine instruction. 39294 39295 39296File: gcc.info, Node: S/390 System z Built-in Functions, Next: SH Built-in Functions, Prev: RX Built-in Functions, Up: Target Builtins 39297 392986.58.23 S/390 System z Built-in Functions 39299----------------------------------------- 39300 39301 -- Built-in Function: int __builtin_tbegin (void*) 39302 Generates the `tbegin' machine instruction starting a 39303 non-constraint hardware transaction. If the parameter is non-NULL 39304 the memory area is used to store the transaction diagnostic buffer 39305 and will be passed as first operand to `tbegin'. This buffer can 39306 be defined using the `struct __htm_tdb' C struct defined in 39307 `htmintrin.h' and must reside on a double-word boundary. The 39308 second tbegin operand is set to `0xff0c'. This enables 39309 save/restore of all GPRs and disables aborts for FPR and AR 39310 manipulations inside the transaction body. The condition code set 39311 by the tbegin instruction is returned as integer value. The tbegin 39312 instruction by definition overwrites the content of all FPRs. The 39313 compiler will generate code which saves and restores the FPRs. For 39314 soft-float code it is recommended to used the `*_nofloat' variant. 39315 In order to prevent a TDB from being written it is required to 39316 pass an constant zero value as parameter. Passing the zero value 39317 through a variable is not sufficient. Although modifications of 39318 access registers inside the transaction will not trigger an 39319 transaction abort it is not supported to actually modify them. 39320 Access registers do not get saved when entering a transaction. 39321 They will have undefined state when reaching the abort code. 39322 39323 Macros for the possible return codes of tbegin are defined in the 39324`htmintrin.h' header file: 39325 39326`_HTM_TBEGIN_STARTED' 39327 `tbegin' has been executed as part of normal processing. The 39328 transaction body is supposed to be executed. 39329 39330`_HTM_TBEGIN_INDETERMINATE' 39331 The transaction was aborted due to an indeterminate condition which 39332 might be persistent. 39333 39334`_HTM_TBEGIN_TRANSIENT' 39335 The transaction aborted due to a transient failure. The 39336 transaction should be re-executed in that case. 39337 39338`_HTM_TBEGIN_PERSISTENT' 39339 The transaction aborted due to a persistent failure. Re-execution 39340 under same circumstances will not be productive. 39341 39342 -- Macro: _HTM_FIRST_USER_ABORT_CODE 39343 The `_HTM_FIRST_USER_ABORT_CODE' defined in `htmintrin.h' 39344 specifies the first abort code which can be used for 39345 `__builtin_tabort'. Values below this threshold are reserved for 39346 machine use. 39347 39348 -- Data type: struct __htm_tdb 39349 The `struct __htm_tdb' defined in `htmintrin.h' describes the 39350 structure of the transaction diagnostic block as specified in the 39351 Principles of Operation manual chapter 5-91. 39352 39353 -- Built-in Function: int __builtin_tbegin_nofloat (void*) 39354 Same as `__builtin_tbegin' but without FPR saves and restores. 39355 Using this variant in code making use of FPRs will leave the FPRs 39356 in undefined state when entering the transaction abort handler 39357 code. 39358 39359 -- Built-in Function: int __builtin_tbegin_retry (void*, int) 39360 In addition to `__builtin_tbegin' a loop for transient failures is 39361 generated. If tbegin returns a condition code of 2 the transaction 39362 will be retried as often as specified in the second argument. The 39363 perform processor assist instruction is used to tell the CPU about 39364 the number of fails so far. 39365 39366 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int) 39367 Same as `__builtin_tbegin_retry' but without FPR saves and 39368 restores. Using this variant in code making use of FPRs will leave 39369 the FPRs in undefined state when entering the transaction abort 39370 handler code. 39371 39372 -- Built-in Function: void __builtin_tbeginc (void) 39373 Generates the `tbeginc' machine instruction starting a constraint 39374 hardware transaction. The second operand is set to `0xff08'. 39375 39376 -- Built-in Function: int __builtin_tend (void) 39377 Generates the `tend' machine instruction finishing a transaction 39378 and making the changes visible to other threads. The condition 39379 code generated by tend is returned as integer value. 39380 39381 -- Built-in Function: void __builtin_tabort (int) 39382 Generates the `tabort' machine instruction with the specified 39383 abort code. Abort codes from 0 through 255 are reserved and will 39384 result in an error message. 39385 39386 -- Built-in Function: void __builtin_tx_assist (int) 39387 Generates the `ppa rX,rY,1' machine instruction. Where the 39388 integer parameter is loaded into rX and a value of zero is loaded 39389 into rY. The integer parameter specifies the number of times the 39390 transaction repeatedly aborted. 39391 39392 -- Built-in Function: int __builtin_tx_nesting_depth (void) 39393 Generates the `etnd' machine instruction. The current nesting 39394 depth is returned as integer value. For a nesting depth of 0 the 39395 code is not executed as part of an transaction. 39396 39397 -- Built-in Function: void __builtin_non_tx_store (uint64_t *, 39398 uint64_t) 39399 Generates the `ntstg' machine instruction. The second argument is 39400 written to the first arguments location. The store operation will 39401 not be rolled-back in case of an transaction abort. 39402 39403 39404File: gcc.info, Node: SH Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: S/390 System z Built-in Functions, Up: Target Builtins 39405 394066.58.24 SH Built-in Functions 39407----------------------------- 39408 39409The following built-in functions are supported on the SH1, SH2, SH3 and 39410SH4 families of processors: 39411 39412 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR) 39413 Sets the `GBR' register to the specified value PTR. This is 39414 usually used by system code that manages threads and execution 39415 contexts. The compiler normally does not generate code that 39416 modifies the contents of `GBR' and thus the value is preserved 39417 across function calls. Changing the `GBR' value in user code must 39418 be done with caution, since the compiler might use `GBR' in order 39419 to access thread local variables. 39420 39421 39422 -- Built-in Function: void * __builtin_thread_pointer (void) 39423 Returns the value that is currently set in the `GBR' register. 39424 Memory loads and stores that use the thread pointer as a base 39425 address are turned into `GBR' based displacement loads and stores, 39426 if possible. For example: 39427 struct my_tcb 39428 { 39429 int a, b, c, d, e; 39430 }; 39431 39432 int get_tcb_value (void) 39433 { 39434 // Generate `mov.l @(8,gbr),r0' instruction 39435 return ((my_tcb*)__builtin_thread_pointer ())->c; 39436 } 39437 39438 -- Built-in Function: unsigned int __builtin_sh_get_fpscr (void) 39439 Returns the value that is currently set in the `FPSCR' register. 39440 39441 -- Built-in Function: void __builtin_sh_set_fpscr (unsigned int VAL) 39442 Sets the `FPSCR' register to the specified value VAL, while 39443 preserving the current values of the FR, SZ and PR bits. 39444 39445 39446File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: SH Built-in Functions, Up: Target Builtins 39447 394486.58.25 SPARC VIS Built-in Functions 39449------------------------------------ 39450 39451GCC supports SIMD operations on the SPARC using both the generic vector 39452extensions (*note Vector Extensions::) as well as built-in functions for 39453the SPARC Visual Instruction Set (VIS). When you use the `-mvis' 39454switch, the VIS extension is exposed as the following built-in 39455functions: 39456 39457 typedef int v1si __attribute__ ((vector_size (4))); 39458 typedef int v2si __attribute__ ((vector_size (8))); 39459 typedef short v4hi __attribute__ ((vector_size (8))); 39460 typedef short v2hi __attribute__ ((vector_size (4))); 39461 typedef unsigned char v8qi __attribute__ ((vector_size (8))); 39462 typedef unsigned char v4qi __attribute__ ((vector_size (4))); 39463 39464 void __builtin_vis_write_gsr (int64_t); 39465 int64_t __builtin_vis_read_gsr (void); 39466 39467 void * __builtin_vis_alignaddr (void *, long); 39468 void * __builtin_vis_alignaddrl (void *, long); 39469 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 39470 v2si __builtin_vis_faligndatav2si (v2si, v2si); 39471 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 39472 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 39473 39474 v4hi __builtin_vis_fexpand (v4qi); 39475 39476 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 39477 v4hi __builtin_vis_fmul8x16au (v4qi, v2hi); 39478 v4hi __builtin_vis_fmul8x16al (v4qi, v2hi); 39479 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 39480 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 39481 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 39482 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 39483 39484 v4qi __builtin_vis_fpack16 (v4hi); 39485 v8qi __builtin_vis_fpack32 (v2si, v8qi); 39486 v2hi __builtin_vis_fpackfix (v2si); 39487 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 39488 39489 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 39490 39491 long __builtin_vis_edge8 (void *, void *); 39492 long __builtin_vis_edge8l (void *, void *); 39493 long __builtin_vis_edge16 (void *, void *); 39494 long __builtin_vis_edge16l (void *, void *); 39495 long __builtin_vis_edge32 (void *, void *); 39496 long __builtin_vis_edge32l (void *, void *); 39497 39498 long __builtin_vis_fcmple16 (v4hi, v4hi); 39499 long __builtin_vis_fcmple32 (v2si, v2si); 39500 long __builtin_vis_fcmpne16 (v4hi, v4hi); 39501 long __builtin_vis_fcmpne32 (v2si, v2si); 39502 long __builtin_vis_fcmpgt16 (v4hi, v4hi); 39503 long __builtin_vis_fcmpgt32 (v2si, v2si); 39504 long __builtin_vis_fcmpeq16 (v4hi, v4hi); 39505 long __builtin_vis_fcmpeq32 (v2si, v2si); 39506 39507 v4hi __builtin_vis_fpadd16 (v4hi, v4hi); 39508 v2hi __builtin_vis_fpadd16s (v2hi, v2hi); 39509 v2si __builtin_vis_fpadd32 (v2si, v2si); 39510 v1si __builtin_vis_fpadd32s (v1si, v1si); 39511 v4hi __builtin_vis_fpsub16 (v4hi, v4hi); 39512 v2hi __builtin_vis_fpsub16s (v2hi, v2hi); 39513 v2si __builtin_vis_fpsub32 (v2si, v2si); 39514 v1si __builtin_vis_fpsub32s (v1si, v1si); 39515 39516 long __builtin_vis_array8 (long, long); 39517 long __builtin_vis_array16 (long, long); 39518 long __builtin_vis_array32 (long, long); 39519 39520 When you use the `-mvis2' switch, the VIS version 2.0 built-in 39521functions also become available: 39522 39523 long __builtin_vis_bmask (long, long); 39524 int64_t __builtin_vis_bshuffledi (int64_t, int64_t); 39525 v2si __builtin_vis_bshufflev2si (v2si, v2si); 39526 v4hi __builtin_vis_bshufflev2si (v4hi, v4hi); 39527 v8qi __builtin_vis_bshufflev2si (v8qi, v8qi); 39528 39529 long __builtin_vis_edge8n (void *, void *); 39530 long __builtin_vis_edge8ln (void *, void *); 39531 long __builtin_vis_edge16n (void *, void *); 39532 long __builtin_vis_edge16ln (void *, void *); 39533 long __builtin_vis_edge32n (void *, void *); 39534 long __builtin_vis_edge32ln (void *, void *); 39535 39536 When you use the `-mvis3' switch, the VIS version 3.0 built-in 39537functions also become available: 39538 39539 void __builtin_vis_cmask8 (long); 39540 void __builtin_vis_cmask16 (long); 39541 void __builtin_vis_cmask32 (long); 39542 39543 v4hi __builtin_vis_fchksm16 (v4hi, v4hi); 39544 39545 v4hi __builtin_vis_fsll16 (v4hi, v4hi); 39546 v4hi __builtin_vis_fslas16 (v4hi, v4hi); 39547 v4hi __builtin_vis_fsrl16 (v4hi, v4hi); 39548 v4hi __builtin_vis_fsra16 (v4hi, v4hi); 39549 v2si __builtin_vis_fsll16 (v2si, v2si); 39550 v2si __builtin_vis_fslas16 (v2si, v2si); 39551 v2si __builtin_vis_fsrl16 (v2si, v2si); 39552 v2si __builtin_vis_fsra16 (v2si, v2si); 39553 39554 long __builtin_vis_pdistn (v8qi, v8qi); 39555 39556 v4hi __builtin_vis_fmean16 (v4hi, v4hi); 39557 39558 int64_t __builtin_vis_fpadd64 (int64_t, int64_t); 39559 int64_t __builtin_vis_fpsub64 (int64_t, int64_t); 39560 39561 v4hi __builtin_vis_fpadds16 (v4hi, v4hi); 39562 v2hi __builtin_vis_fpadds16s (v2hi, v2hi); 39563 v4hi __builtin_vis_fpsubs16 (v4hi, v4hi); 39564 v2hi __builtin_vis_fpsubs16s (v2hi, v2hi); 39565 v2si __builtin_vis_fpadds32 (v2si, v2si); 39566 v1si __builtin_vis_fpadds32s (v1si, v1si); 39567 v2si __builtin_vis_fpsubs32 (v2si, v2si); 39568 v1si __builtin_vis_fpsubs32s (v1si, v1si); 39569 39570 long __builtin_vis_fucmple8 (v8qi, v8qi); 39571 long __builtin_vis_fucmpne8 (v8qi, v8qi); 39572 long __builtin_vis_fucmpgt8 (v8qi, v8qi); 39573 long __builtin_vis_fucmpeq8 (v8qi, v8qi); 39574 39575 float __builtin_vis_fhadds (float, float); 39576 double __builtin_vis_fhaddd (double, double); 39577 float __builtin_vis_fhsubs (float, float); 39578 double __builtin_vis_fhsubd (double, double); 39579 float __builtin_vis_fnhadds (float, float); 39580 double __builtin_vis_fnhaddd (double, double); 39581 39582 int64_t __builtin_vis_umulxhi (int64_t, int64_t); 39583 int64_t __builtin_vis_xmulx (int64_t, int64_t); 39584 int64_t __builtin_vis_xmulxhi (int64_t, int64_t); 39585 39586 39587File: gcc.info, Node: SPU Built-in Functions, Next: TI C6X Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins 39588 395896.58.26 SPU Built-in Functions 39590------------------------------ 39591 39592GCC provides extensions for the SPU processor as described in the 39593Sony/Toshiba/IBM SPU Language Extensions Specification, which can be 39594found at `http://cell.scei.co.jp/' or 39595`http://www.ibm.com/developerworks/power/cell/'. GCC's implementation 39596differs in several ways. 39597 39598 * The optional extension of specifying vector constants in 39599 parentheses is not supported. 39600 39601 * A vector initializer requires no cast if the vector constant is of 39602 the same type as the variable it is initializing. 39603 39604 * If `signed' or `unsigned' is omitted, the signedness of the vector 39605 type is the default signedness of the base type. The default 39606 varies depending on the operating system, so a portable program 39607 should always specify the signedness. 39608 39609 * By default, the keyword `__vector' is added. The macro `vector' is 39610 defined in `<spu_intrinsics.h>' and can be undefined. 39611 39612 * GCC allows using a `typedef' name as the type specifier for a 39613 vector type. 39614 39615 * For C, overloaded functions are implemented with macros so the 39616 following does not work: 39617 39618 spu_add ((vector signed int){1, 2, 3, 4}, foo); 39619 39620 Since `spu_add' is a macro, the vector constant in the example is 39621 treated as four separate arguments. Wrap the entire argument in 39622 parentheses for this to work. 39623 39624 * The extended version of `__builtin_expect' is not supported. 39625 39626 39627 _Note:_ Only the interface described in the aforementioned 39628specification is supported. Internally, GCC uses built-in functions to 39629implement the required functionality, but these are not supported and 39630are subject to change without notice. 39631 39632 39633File: gcc.info, Node: TI C6X Built-in Functions, Next: TILE-Gx Built-in Functions, Prev: SPU Built-in Functions, Up: Target Builtins 39634 396356.58.27 TI C6X Built-in Functions 39636--------------------------------- 39637 39638GCC provides intrinsics to access certain instructions of the TI C6X 39639processors. These intrinsics, listed below, are available after 39640inclusion of the `c6x_intrinsics.h' header file. They map directly to 39641C6X instructions. 39642 39643 39644 int _sadd (int, int) 39645 int _ssub (int, int) 39646 int _sadd2 (int, int) 39647 int _ssub2 (int, int) 39648 long long _mpy2 (int, int) 39649 long long _smpy2 (int, int) 39650 int _add4 (int, int) 39651 int _sub4 (int, int) 39652 int _saddu4 (int, int) 39653 39654 int _smpy (int, int) 39655 int _smpyh (int, int) 39656 int _smpyhl (int, int) 39657 int _smpylh (int, int) 39658 39659 int _sshl (int, int) 39660 int _subc (int, int) 39661 39662 int _avg2 (int, int) 39663 int _avgu4 (int, int) 39664 39665 int _clrr (int, int) 39666 int _extr (int, int) 39667 int _extru (int, int) 39668 int _abs (int) 39669 int _abs2 (int) 39670 39671 39672File: gcc.info, Node: TILE-Gx Built-in Functions, Next: TILEPro Built-in Functions, Prev: TI C6X Built-in Functions, Up: Target Builtins 39673 396746.58.28 TILE-Gx Built-in Functions 39675---------------------------------- 39676 39677GCC provides intrinsics to access every instruction of the TILE-Gx 39678processor. The intrinsics are of the form: 39679 39680 39681 unsigned long long __insn_OP (...) 39682 39683 Where OP is the name of the instruction. Refer to the ISA manual for 39684the complete list of instructions. 39685 39686 GCC also provides intrinsics to directly access the network registers. 39687The intrinsics are: 39688 39689 39690 unsigned long long __tile_idn0_receive (void) 39691 unsigned long long __tile_idn1_receive (void) 39692 unsigned long long __tile_udn0_receive (void) 39693 unsigned long long __tile_udn1_receive (void) 39694 unsigned long long __tile_udn2_receive (void) 39695 unsigned long long __tile_udn3_receive (void) 39696 void __tile_idn_send (unsigned long long) 39697 void __tile_udn_send (unsigned long long) 39698 39699 The intrinsic `void __tile_network_barrier (void)' is used to 39700guarantee that no network operations before it are reordered with those 39701after it. 39702 39703 39704File: gcc.info, Node: TILEPro Built-in Functions, Next: x86 Built-in Functions, Prev: TILE-Gx Built-in Functions, Up: Target Builtins 39705 397066.58.29 TILEPro Built-in Functions 39707---------------------------------- 39708 39709GCC provides intrinsics to access every instruction of the TILEPro 39710processor. The intrinsics are of the form: 39711 39712 39713 unsigned __insn_OP (...) 39714 39715where OP is the name of the instruction. Refer to the ISA manual for 39716the complete list of instructions. 39717 39718 GCC also provides intrinsics to directly access the network registers. 39719The intrinsics are: 39720 39721 39722 unsigned __tile_idn0_receive (void) 39723 unsigned __tile_idn1_receive (void) 39724 unsigned __tile_sn_receive (void) 39725 unsigned __tile_udn0_receive (void) 39726 unsigned __tile_udn1_receive (void) 39727 unsigned __tile_udn2_receive (void) 39728 unsigned __tile_udn3_receive (void) 39729 void __tile_idn_send (unsigned) 39730 void __tile_sn_send (unsigned) 39731 void __tile_udn_send (unsigned) 39732 39733 The intrinsic `void __tile_network_barrier (void)' is used to 39734guarantee that no network operations before it are reordered with those 39735after it. 39736 39737 39738File: gcc.info, Node: x86 Built-in Functions, Next: x86 transactional memory intrinsics, Prev: TILEPro Built-in Functions, Up: Target Builtins 39739 397406.58.30 x86 Built-in Functions 39741------------------------------ 39742 39743These built-in functions are available for the x86-32 and x86-64 family 39744of computers, depending on the command-line switches used. 39745 39746 If you specify command-line switches such as `-msse', the compiler 39747could use the extended instruction sets even if the built-ins are not 39748used explicitly in the program. For this reason, applications that 39749perform run-time CPU detection must compile separate files for each 39750supported architecture, using the appropriate flags. In particular, 39751the file containing the CPU detection code should be compiled without 39752these options. 39753 39754 The following machine modes are available for use with MMX built-in 39755functions (*note Vector Extensions::): `V2SI' for a vector of two 3975632-bit integers, `V4HI' for a vector of four 16-bit integers, and 39757`V8QI' for a vector of eight 8-bit integers. Some of the built-in 39758functions operate on MMX registers as a whole 64-bit entity, these use 39759`V1DI' as their mode. 39760 39761 If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector 39762of two 32-bit floating-point values. 39763 39764 If SSE extensions are enabled, `V4SF' is used for a vector of four 3976532-bit floating-point values. Some instructions use a vector of four 3976632-bit integers, these use `V4SI'. Finally, some instructions operate 39767on an entire vector register, interpreting it as a 128-bit integer, 39768these use mode `TI'. 39769 39770 In 64-bit mode, the x86-64 family of processors uses additional 39771built-in functions for efficient use of `TF' (`__float128') 128-bit 39772floating point and `TC' 128-bit complex floating-point values. 39773 39774 The following floating-point built-in functions are available in 64-bit 39775mode. All of them implement the function that is part of the name. 39776 39777 __float128 __builtin_fabsq (__float128) 39778 __float128 __builtin_copysignq (__float128, __float128) 39779 39780 The following built-in function is always available. 39781 39782`void __builtin_ia32_pause (void)' 39783 Generates the `pause' machine instruction with a compiler memory 39784 barrier. 39785 39786 The following floating-point built-in functions are made available in 39787the 64-bit mode. 39788 39789`__float128 __builtin_infq (void)' 39790 Similar to `__builtin_inf', except the return type is `__float128'. 39791 39792`__float128 __builtin_huge_valq (void)' 39793 Similar to `__builtin_huge_val', except the return type is 39794 `__float128'. 39795 39796 The following built-in functions are always available and can be used 39797to check the target platform type. 39798 39799 -- Built-in Function: void __builtin_cpu_init (void) 39800 This function runs the CPU detection code to check the type of CPU 39801 and the features supported. This built-in function needs to be 39802 invoked along with the built-in functions to check CPU type and 39803 features, `__builtin_cpu_is' and `__builtin_cpu_supports', only 39804 when used in a function that is executed before any constructors 39805 are called. The CPU detection code is automatically executed in a 39806 very high priority constructor. 39807 39808 For example, this function has to be used in `ifunc' resolvers that 39809 check for CPU type using the built-in functions `__builtin_cpu_is' 39810 and `__builtin_cpu_supports', or in constructors on targets that 39811 don't support constructor priority. 39812 39813 static void (*resolve_memcpy (void)) (void) 39814 { 39815 // ifunc resolvers fire before constructors, explicitly call the init 39816 // function. 39817 __builtin_cpu_init (); 39818 if (__builtin_cpu_supports ("ssse3")) 39819 return ssse3_memcpy; // super fast memcpy with ssse3 instructions. 39820 else 39821 return default_memcpy; 39822 } 39823 39824 void *memcpy (void *, const void *, size_t) 39825 __attribute__ ((ifunc ("resolve_memcpy"))); 39826 39827 39828 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME) 39829 This function returns a positive integer if the run-time CPU is of 39830 type CPUNAME and returns `0' otherwise. The following CPU names 39831 can be detected: 39832 39833 `intel' 39834 Intel CPU. 39835 39836 `atom' 39837 Intel Atom CPU. 39838 39839 `core2' 39840 Intel Core 2 CPU. 39841 39842 `corei7' 39843 Intel Core i7 CPU. 39844 39845 `nehalem' 39846 Intel Core i7 Nehalem CPU. 39847 39848 `westmere' 39849 Intel Core i7 Westmere CPU. 39850 39851 `sandybridge' 39852 Intel Core i7 Sandy Bridge CPU. 39853 39854 `amd' 39855 AMD CPU. 39856 39857 `amdfam10h' 39858 AMD Family 10h CPU. 39859 39860 `barcelona' 39861 AMD Family 10h Barcelona CPU. 39862 39863 `shanghai' 39864 AMD Family 10h Shanghai CPU. 39865 39866 `istanbul' 39867 AMD Family 10h Istanbul CPU. 39868 39869 `btver1' 39870 AMD Family 14h CPU. 39871 39872 `amdfam15h' 39873 AMD Family 15h CPU. 39874 39875 `bdver1' 39876 AMD Family 15h Bulldozer version 1. 39877 39878 `bdver2' 39879 AMD Family 15h Bulldozer version 2. 39880 39881 `bdver3' 39882 AMD Family 15h Bulldozer version 3. 39883 39884 `bdver4' 39885 AMD Family 15h Bulldozer version 4. 39886 39887 `btver2' 39888 AMD Family 16h CPU. 39889 39890 Here is an example: 39891 if (__builtin_cpu_is ("corei7")) 39892 { 39893 do_corei7 (); // Core i7 specific implementation. 39894 } 39895 else 39896 { 39897 do_generic (); // Generic implementation. 39898 } 39899 39900 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE) 39901 This function returns a positive integer if the run-time CPU 39902 supports FEATURE and returns `0' otherwise. The following features 39903 can be detected: 39904 39905 `cmov' 39906 CMOV instruction. 39907 39908 `mmx' 39909 MMX instructions. 39910 39911 `popcnt' 39912 POPCNT instruction. 39913 39914 `sse' 39915 SSE instructions. 39916 39917 `sse2' 39918 SSE2 instructions. 39919 39920 `sse3' 39921 SSE3 instructions. 39922 39923 `ssse3' 39924 SSSE3 instructions. 39925 39926 `sse4.1' 39927 SSE4.1 instructions. 39928 39929 `sse4.2' 39930 SSE4.2 instructions. 39931 39932 `avx' 39933 AVX instructions. 39934 39935 `avx2' 39936 AVX2 instructions. 39937 39938 `avx512f' 39939 AVX512F instructions. 39940 39941 Here is an example: 39942 if (__builtin_cpu_supports ("popcnt")) 39943 { 39944 asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc"); 39945 } 39946 else 39947 { 39948 count = generic_countbits (n); //generic implementation. 39949 } 39950 39951 The following built-in functions are made available by `-mmmx'. All 39952of them generate the machine instruction that is part of the name. 39953 39954 v8qi __builtin_ia32_paddb (v8qi, v8qi) 39955 v4hi __builtin_ia32_paddw (v4hi, v4hi) 39956 v2si __builtin_ia32_paddd (v2si, v2si) 39957 v8qi __builtin_ia32_psubb (v8qi, v8qi) 39958 v4hi __builtin_ia32_psubw (v4hi, v4hi) 39959 v2si __builtin_ia32_psubd (v2si, v2si) 39960 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 39961 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 39962 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 39963 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 39964 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 39965 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 39966 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 39967 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 39968 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 39969 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 39970 di __builtin_ia32_pand (di, di) 39971 di __builtin_ia32_pandn (di,di) 39972 di __builtin_ia32_por (di, di) 39973 di __builtin_ia32_pxor (di, di) 39974 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 39975 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 39976 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 39977 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 39978 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 39979 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 39980 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 39981 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 39982 v2si __builtin_ia32_punpckhdq (v2si, v2si) 39983 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 39984 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 39985 v2si __builtin_ia32_punpckldq (v2si, v2si) 39986 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 39987 v4hi __builtin_ia32_packssdw (v2si, v2si) 39988 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 39989 39990 v4hi __builtin_ia32_psllw (v4hi, v4hi) 39991 v2si __builtin_ia32_pslld (v2si, v2si) 39992 v1di __builtin_ia32_psllq (v1di, v1di) 39993 v4hi __builtin_ia32_psrlw (v4hi, v4hi) 39994 v2si __builtin_ia32_psrld (v2si, v2si) 39995 v1di __builtin_ia32_psrlq (v1di, v1di) 39996 v4hi __builtin_ia32_psraw (v4hi, v4hi) 39997 v2si __builtin_ia32_psrad (v2si, v2si) 39998 v4hi __builtin_ia32_psllwi (v4hi, int) 39999 v2si __builtin_ia32_pslldi (v2si, int) 40000 v1di __builtin_ia32_psllqi (v1di, int) 40001 v4hi __builtin_ia32_psrlwi (v4hi, int) 40002 v2si __builtin_ia32_psrldi (v2si, int) 40003 v1di __builtin_ia32_psrlqi (v1di, int) 40004 v4hi __builtin_ia32_psrawi (v4hi, int) 40005 v2si __builtin_ia32_psradi (v2si, int) 40006 40007 The following built-in functions are made available either with 40008`-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 40009of them generate the machine instruction that is part of the name. 40010 40011 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 40012 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 40013 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 40014 v1di __builtin_ia32_psadbw (v8qi, v8qi) 40015 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 40016 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 40017 v8qi __builtin_ia32_pminub (v8qi, v8qi) 40018 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 40019 int __builtin_ia32_pmovmskb (v8qi) 40020 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 40021 void __builtin_ia32_movntq (di *, di) 40022 void __builtin_ia32_sfence (void) 40023 40024 The following built-in functions are available when `-msse' is used. 40025All of them generate the machine instruction that is part of the name. 40026 40027 int __builtin_ia32_comieq (v4sf, v4sf) 40028 int __builtin_ia32_comineq (v4sf, v4sf) 40029 int __builtin_ia32_comilt (v4sf, v4sf) 40030 int __builtin_ia32_comile (v4sf, v4sf) 40031 int __builtin_ia32_comigt (v4sf, v4sf) 40032 int __builtin_ia32_comige (v4sf, v4sf) 40033 int __builtin_ia32_ucomieq (v4sf, v4sf) 40034 int __builtin_ia32_ucomineq (v4sf, v4sf) 40035 int __builtin_ia32_ucomilt (v4sf, v4sf) 40036 int __builtin_ia32_ucomile (v4sf, v4sf) 40037 int __builtin_ia32_ucomigt (v4sf, v4sf) 40038 int __builtin_ia32_ucomige (v4sf, v4sf) 40039 v4sf __builtin_ia32_addps (v4sf, v4sf) 40040 v4sf __builtin_ia32_subps (v4sf, v4sf) 40041 v4sf __builtin_ia32_mulps (v4sf, v4sf) 40042 v4sf __builtin_ia32_divps (v4sf, v4sf) 40043 v4sf __builtin_ia32_addss (v4sf, v4sf) 40044 v4sf __builtin_ia32_subss (v4sf, v4sf) 40045 v4sf __builtin_ia32_mulss (v4sf, v4sf) 40046 v4sf __builtin_ia32_divss (v4sf, v4sf) 40047 v4sf __builtin_ia32_cmpeqps (v4sf, v4sf) 40048 v4sf __builtin_ia32_cmpltps (v4sf, v4sf) 40049 v4sf __builtin_ia32_cmpleps (v4sf, v4sf) 40050 v4sf __builtin_ia32_cmpgtps (v4sf, v4sf) 40051 v4sf __builtin_ia32_cmpgeps (v4sf, v4sf) 40052 v4sf __builtin_ia32_cmpunordps (v4sf, v4sf) 40053 v4sf __builtin_ia32_cmpneqps (v4sf, v4sf) 40054 v4sf __builtin_ia32_cmpnltps (v4sf, v4sf) 40055 v4sf __builtin_ia32_cmpnleps (v4sf, v4sf) 40056 v4sf __builtin_ia32_cmpngtps (v4sf, v4sf) 40057 v4sf __builtin_ia32_cmpngeps (v4sf, v4sf) 40058 v4sf __builtin_ia32_cmpordps (v4sf, v4sf) 40059 v4sf __builtin_ia32_cmpeqss (v4sf, v4sf) 40060 v4sf __builtin_ia32_cmpltss (v4sf, v4sf) 40061 v4sf __builtin_ia32_cmpless (v4sf, v4sf) 40062 v4sf __builtin_ia32_cmpunordss (v4sf, v4sf) 40063 v4sf __builtin_ia32_cmpneqss (v4sf, v4sf) 40064 v4sf __builtin_ia32_cmpnltss (v4sf, v4sf) 40065 v4sf __builtin_ia32_cmpnless (v4sf, v4sf) 40066 v4sf __builtin_ia32_cmpordss (v4sf, v4sf) 40067 v4sf __builtin_ia32_maxps (v4sf, v4sf) 40068 v4sf __builtin_ia32_maxss (v4sf, v4sf) 40069 v4sf __builtin_ia32_minps (v4sf, v4sf) 40070 v4sf __builtin_ia32_minss (v4sf, v4sf) 40071 v4sf __builtin_ia32_andps (v4sf, v4sf) 40072 v4sf __builtin_ia32_andnps (v4sf, v4sf) 40073 v4sf __builtin_ia32_orps (v4sf, v4sf) 40074 v4sf __builtin_ia32_xorps (v4sf, v4sf) 40075 v4sf __builtin_ia32_movss (v4sf, v4sf) 40076 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 40077 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 40078 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 40079 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 40080 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 40081 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 40082 v2si __builtin_ia32_cvtps2pi (v4sf) 40083 int __builtin_ia32_cvtss2si (v4sf) 40084 v2si __builtin_ia32_cvttps2pi (v4sf) 40085 int __builtin_ia32_cvttss2si (v4sf) 40086 v4sf __builtin_ia32_rcpps (v4sf) 40087 v4sf __builtin_ia32_rsqrtps (v4sf) 40088 v4sf __builtin_ia32_sqrtps (v4sf) 40089 v4sf __builtin_ia32_rcpss (v4sf) 40090 v4sf __builtin_ia32_rsqrtss (v4sf) 40091 v4sf __builtin_ia32_sqrtss (v4sf) 40092 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 40093 void __builtin_ia32_movntps (float *, v4sf) 40094 int __builtin_ia32_movmskps (v4sf) 40095 40096 The following built-in functions are available when `-msse' is used. 40097 40098`v4sf __builtin_ia32_loadups (float *)' 40099 Generates the `movups' machine instruction as a load from memory. 40100 40101`void __builtin_ia32_storeups (float *, v4sf)' 40102 Generates the `movups' machine instruction as a store to memory. 40103 40104`v4sf __builtin_ia32_loadss (float *)' 40105 Generates the `movss' machine instruction as a load from memory. 40106 40107`v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)' 40108 Generates the `movhps' machine instruction as a load from memory. 40109 40110`v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)' 40111 Generates the `movlps' machine instruction as a load from memory 40112 40113`void __builtin_ia32_storehps (v2sf *, v4sf)' 40114 Generates the `movhps' machine instruction as a store to memory. 40115 40116`void __builtin_ia32_storelps (v2sf *, v4sf)' 40117 Generates the `movlps' machine instruction as a store to memory. 40118 40119 The following built-in functions are available when `-msse2' is used. 40120All of them generate the machine instruction that is part of the name. 40121 40122 int __builtin_ia32_comisdeq (v2df, v2df) 40123 int __builtin_ia32_comisdlt (v2df, v2df) 40124 int __builtin_ia32_comisdle (v2df, v2df) 40125 int __builtin_ia32_comisdgt (v2df, v2df) 40126 int __builtin_ia32_comisdge (v2df, v2df) 40127 int __builtin_ia32_comisdneq (v2df, v2df) 40128 int __builtin_ia32_ucomisdeq (v2df, v2df) 40129 int __builtin_ia32_ucomisdlt (v2df, v2df) 40130 int __builtin_ia32_ucomisdle (v2df, v2df) 40131 int __builtin_ia32_ucomisdgt (v2df, v2df) 40132 int __builtin_ia32_ucomisdge (v2df, v2df) 40133 int __builtin_ia32_ucomisdneq (v2df, v2df) 40134 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 40135 v2df __builtin_ia32_cmpltpd (v2df, v2df) 40136 v2df __builtin_ia32_cmplepd (v2df, v2df) 40137 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 40138 v2df __builtin_ia32_cmpgepd (v2df, v2df) 40139 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 40140 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 40141 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 40142 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 40143 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 40144 v2df __builtin_ia32_cmpngepd (v2df, v2df) 40145 v2df __builtin_ia32_cmpordpd (v2df, v2df) 40146 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 40147 v2df __builtin_ia32_cmpltsd (v2df, v2df) 40148 v2df __builtin_ia32_cmplesd (v2df, v2df) 40149 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 40150 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 40151 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 40152 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 40153 v2df __builtin_ia32_cmpordsd (v2df, v2df) 40154 v2di __builtin_ia32_paddq (v2di, v2di) 40155 v2di __builtin_ia32_psubq (v2di, v2di) 40156 v2df __builtin_ia32_addpd (v2df, v2df) 40157 v2df __builtin_ia32_subpd (v2df, v2df) 40158 v2df __builtin_ia32_mulpd (v2df, v2df) 40159 v2df __builtin_ia32_divpd (v2df, v2df) 40160 v2df __builtin_ia32_addsd (v2df, v2df) 40161 v2df __builtin_ia32_subsd (v2df, v2df) 40162 v2df __builtin_ia32_mulsd (v2df, v2df) 40163 v2df __builtin_ia32_divsd (v2df, v2df) 40164 v2df __builtin_ia32_minpd (v2df, v2df) 40165 v2df __builtin_ia32_maxpd (v2df, v2df) 40166 v2df __builtin_ia32_minsd (v2df, v2df) 40167 v2df __builtin_ia32_maxsd (v2df, v2df) 40168 v2df __builtin_ia32_andpd (v2df, v2df) 40169 v2df __builtin_ia32_andnpd (v2df, v2df) 40170 v2df __builtin_ia32_orpd (v2df, v2df) 40171 v2df __builtin_ia32_xorpd (v2df, v2df) 40172 v2df __builtin_ia32_movsd (v2df, v2df) 40173 v2df __builtin_ia32_unpckhpd (v2df, v2df) 40174 v2df __builtin_ia32_unpcklpd (v2df, v2df) 40175 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 40176 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 40177 v4si __builtin_ia32_paddd128 (v4si, v4si) 40178 v2di __builtin_ia32_paddq128 (v2di, v2di) 40179 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 40180 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 40181 v4si __builtin_ia32_psubd128 (v4si, v4si) 40182 v2di __builtin_ia32_psubq128 (v2di, v2di) 40183 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 40184 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 40185 v2di __builtin_ia32_pand128 (v2di, v2di) 40186 v2di __builtin_ia32_pandn128 (v2di, v2di) 40187 v2di __builtin_ia32_por128 (v2di, v2di) 40188 v2di __builtin_ia32_pxor128 (v2di, v2di) 40189 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 40190 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 40191 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 40192 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 40193 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 40194 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 40195 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 40196 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 40197 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 40198 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 40199 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 40200 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 40201 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 40202 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 40203 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 40204 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 40205 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 40206 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 40207 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 40208 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 40209 v16qi __builtin_ia32_packsswb128 (v8hi, v8hi) 40210 v8hi __builtin_ia32_packssdw128 (v4si, v4si) 40211 v16qi __builtin_ia32_packuswb128 (v8hi, v8hi) 40212 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 40213 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 40214 v2df __builtin_ia32_loadupd (double *) 40215 void __builtin_ia32_storeupd (double *, v2df) 40216 v2df __builtin_ia32_loadhpd (v2df, double const *) 40217 v2df __builtin_ia32_loadlpd (v2df, double const *) 40218 int __builtin_ia32_movmskpd (v2df) 40219 int __builtin_ia32_pmovmskb128 (v16qi) 40220 void __builtin_ia32_movnti (int *, int) 40221 void __builtin_ia32_movnti64 (long long int *, long long int) 40222 void __builtin_ia32_movntpd (double *, v2df) 40223 void __builtin_ia32_movntdq (v2df *, v2df) 40224 v4si __builtin_ia32_pshufd (v4si, int) 40225 v8hi __builtin_ia32_pshuflw (v8hi, int) 40226 v8hi __builtin_ia32_pshufhw (v8hi, int) 40227 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 40228 v2df __builtin_ia32_sqrtpd (v2df) 40229 v2df __builtin_ia32_sqrtsd (v2df) 40230 v2df __builtin_ia32_shufpd (v2df, v2df, int) 40231 v2df __builtin_ia32_cvtdq2pd (v4si) 40232 v4sf __builtin_ia32_cvtdq2ps (v4si) 40233 v4si __builtin_ia32_cvtpd2dq (v2df) 40234 v2si __builtin_ia32_cvtpd2pi (v2df) 40235 v4sf __builtin_ia32_cvtpd2ps (v2df) 40236 v4si __builtin_ia32_cvttpd2dq (v2df) 40237 v2si __builtin_ia32_cvttpd2pi (v2df) 40238 v2df __builtin_ia32_cvtpi2pd (v2si) 40239 int __builtin_ia32_cvtsd2si (v2df) 40240 int __builtin_ia32_cvttsd2si (v2df) 40241 long long __builtin_ia32_cvtsd2si64 (v2df) 40242 long long __builtin_ia32_cvttsd2si64 (v2df) 40243 v4si __builtin_ia32_cvtps2dq (v4sf) 40244 v2df __builtin_ia32_cvtps2pd (v4sf) 40245 v4si __builtin_ia32_cvttps2dq (v4sf) 40246 v2df __builtin_ia32_cvtsi2sd (v2df, int) 40247 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 40248 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 40249 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 40250 void __builtin_ia32_clflush (const void *) 40251 void __builtin_ia32_lfence (void) 40252 void __builtin_ia32_mfence (void) 40253 v16qi __builtin_ia32_loaddqu (const char *) 40254 void __builtin_ia32_storedqu (char *, v16qi) 40255 v1di __builtin_ia32_pmuludq (v2si, v2si) 40256 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 40257 v8hi __builtin_ia32_psllw128 (v8hi, v8hi) 40258 v4si __builtin_ia32_pslld128 (v4si, v4si) 40259 v2di __builtin_ia32_psllq128 (v2di, v2di) 40260 v8hi __builtin_ia32_psrlw128 (v8hi, v8hi) 40261 v4si __builtin_ia32_psrld128 (v4si, v4si) 40262 v2di __builtin_ia32_psrlq128 (v2di, v2di) 40263 v8hi __builtin_ia32_psraw128 (v8hi, v8hi) 40264 v4si __builtin_ia32_psrad128 (v4si, v4si) 40265 v2di __builtin_ia32_pslldqi128 (v2di, int) 40266 v8hi __builtin_ia32_psllwi128 (v8hi, int) 40267 v4si __builtin_ia32_pslldi128 (v4si, int) 40268 v2di __builtin_ia32_psllqi128 (v2di, int) 40269 v2di __builtin_ia32_psrldqi128 (v2di, int) 40270 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 40271 v4si __builtin_ia32_psrldi128 (v4si, int) 40272 v2di __builtin_ia32_psrlqi128 (v2di, int) 40273 v8hi __builtin_ia32_psrawi128 (v8hi, int) 40274 v4si __builtin_ia32_psradi128 (v4si, int) 40275 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 40276 v2di __builtin_ia32_movq128 (v2di) 40277 40278 The following built-in functions are available when `-msse3' is used. 40279All of them generate the machine instruction that is part of the name. 40280 40281 v2df __builtin_ia32_addsubpd (v2df, v2df) 40282 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 40283 v2df __builtin_ia32_haddpd (v2df, v2df) 40284 v4sf __builtin_ia32_haddps (v4sf, v4sf) 40285 v2df __builtin_ia32_hsubpd (v2df, v2df) 40286 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 40287 v16qi __builtin_ia32_lddqu (char const *) 40288 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 40289 v4sf __builtin_ia32_movshdup (v4sf) 40290 v4sf __builtin_ia32_movsldup (v4sf) 40291 void __builtin_ia32_mwait (unsigned int, unsigned int) 40292 40293 The following built-in functions are available when `-mssse3' is used. 40294All of them generate the machine instruction that is part of the name. 40295 40296 v2si __builtin_ia32_phaddd (v2si, v2si) 40297 v4hi __builtin_ia32_phaddw (v4hi, v4hi) 40298 v4hi __builtin_ia32_phaddsw (v4hi, v4hi) 40299 v2si __builtin_ia32_phsubd (v2si, v2si) 40300 v4hi __builtin_ia32_phsubw (v4hi, v4hi) 40301 v4hi __builtin_ia32_phsubsw (v4hi, v4hi) 40302 v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi) 40303 v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi) 40304 v8qi __builtin_ia32_pshufb (v8qi, v8qi) 40305 v8qi __builtin_ia32_psignb (v8qi, v8qi) 40306 v2si __builtin_ia32_psignd (v2si, v2si) 40307 v4hi __builtin_ia32_psignw (v4hi, v4hi) 40308 v1di __builtin_ia32_palignr (v1di, v1di, int) 40309 v8qi __builtin_ia32_pabsb (v8qi) 40310 v2si __builtin_ia32_pabsd (v2si) 40311 v4hi __builtin_ia32_pabsw (v4hi) 40312 40313 The following built-in functions are available when `-mssse3' is used. 40314All of them generate the machine instruction that is part of the name. 40315 40316 v4si __builtin_ia32_phaddd128 (v4si, v4si) 40317 v8hi __builtin_ia32_phaddw128 (v8hi, v8hi) 40318 v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi) 40319 v4si __builtin_ia32_phsubd128 (v4si, v4si) 40320 v8hi __builtin_ia32_phsubw128 (v8hi, v8hi) 40321 v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi) 40322 v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi) 40323 v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi) 40324 v16qi __builtin_ia32_pshufb128 (v16qi, v16qi) 40325 v16qi __builtin_ia32_psignb128 (v16qi, v16qi) 40326 v4si __builtin_ia32_psignd128 (v4si, v4si) 40327 v8hi __builtin_ia32_psignw128 (v8hi, v8hi) 40328 v2di __builtin_ia32_palignr128 (v2di, v2di, int) 40329 v16qi __builtin_ia32_pabsb128 (v16qi) 40330 v4si __builtin_ia32_pabsd128 (v4si) 40331 v8hi __builtin_ia32_pabsw128 (v8hi) 40332 40333 The following built-in functions are available when `-msse4.1' is 40334used. All of them generate the machine instruction that is part of the 40335name. 40336 40337 v2df __builtin_ia32_blendpd (v2df, v2df, const int) 40338 v4sf __builtin_ia32_blendps (v4sf, v4sf, const int) 40339 v2df __builtin_ia32_blendvpd (v2df, v2df, v2df) 40340 v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf) 40341 v2df __builtin_ia32_dppd (v2df, v2df, const int) 40342 v4sf __builtin_ia32_dpps (v4sf, v4sf, const int) 40343 v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int) 40344 v2di __builtin_ia32_movntdqa (v2di *); 40345 v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int) 40346 v8hi __builtin_ia32_packusdw128 (v4si, v4si) 40347 v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi) 40348 v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int) 40349 v2di __builtin_ia32_pcmpeqq (v2di, v2di) 40350 v8hi __builtin_ia32_phminposuw128 (v8hi) 40351 v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi) 40352 v4si __builtin_ia32_pmaxsd128 (v4si, v4si) 40353 v4si __builtin_ia32_pmaxud128 (v4si, v4si) 40354 v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi) 40355 v16qi __builtin_ia32_pminsb128 (v16qi, v16qi) 40356 v4si __builtin_ia32_pminsd128 (v4si, v4si) 40357 v4si __builtin_ia32_pminud128 (v4si, v4si) 40358 v8hi __builtin_ia32_pminuw128 (v8hi, v8hi) 40359 v4si __builtin_ia32_pmovsxbd128 (v16qi) 40360 v2di __builtin_ia32_pmovsxbq128 (v16qi) 40361 v8hi __builtin_ia32_pmovsxbw128 (v16qi) 40362 v2di __builtin_ia32_pmovsxdq128 (v4si) 40363 v4si __builtin_ia32_pmovsxwd128 (v8hi) 40364 v2di __builtin_ia32_pmovsxwq128 (v8hi) 40365 v4si __builtin_ia32_pmovzxbd128 (v16qi) 40366 v2di __builtin_ia32_pmovzxbq128 (v16qi) 40367 v8hi __builtin_ia32_pmovzxbw128 (v16qi) 40368 v2di __builtin_ia32_pmovzxdq128 (v4si) 40369 v4si __builtin_ia32_pmovzxwd128 (v8hi) 40370 v2di __builtin_ia32_pmovzxwq128 (v8hi) 40371 v2di __builtin_ia32_pmuldq128 (v4si, v4si) 40372 v4si __builtin_ia32_pmulld128 (v4si, v4si) 40373 int __builtin_ia32_ptestc128 (v2di, v2di) 40374 int __builtin_ia32_ptestnzc128 (v2di, v2di) 40375 int __builtin_ia32_ptestz128 (v2di, v2di) 40376 v2df __builtin_ia32_roundpd (v2df, const int) 40377 v4sf __builtin_ia32_roundps (v4sf, const int) 40378 v2df __builtin_ia32_roundsd (v2df, v2df, const int) 40379 v4sf __builtin_ia32_roundss (v4sf, v4sf, const int) 40380 40381 The following built-in functions are available when `-msse4.1' is used. 40382 40383`v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)' 40384 Generates the `insertps' machine instruction. 40385 40386`int __builtin_ia32_vec_ext_v16qi (v16qi, const int)' 40387 Generates the `pextrb' machine instruction. 40388 40389`v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)' 40390 Generates the `pinsrb' machine instruction. 40391 40392`v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)' 40393 Generates the `pinsrd' machine instruction. 40394 40395`v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)' 40396 Generates the `pinsrq' machine instruction in 64bit mode. 40397 40398 The following built-in functions are changed to generate new SSE4.1 40399instructions when `-msse4.1' is used. 40400 40401`float __builtin_ia32_vec_ext_v4sf (v4sf, const int)' 40402 Generates the `extractps' machine instruction. 40403 40404`int __builtin_ia32_vec_ext_v4si (v4si, const int)' 40405 Generates the `pextrd' machine instruction. 40406 40407`long long __builtin_ia32_vec_ext_v2di (v2di, const int)' 40408 Generates the `pextrq' machine instruction in 64bit mode. 40409 40410 The following built-in functions are available when `-msse4.2' is 40411used. All of them generate the machine instruction that is part of the 40412name. 40413 40414 v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int) 40415 int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int) 40416 int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int) 40417 int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int) 40418 int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int) 40419 int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int) 40420 int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int) 40421 v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int) 40422 int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int) 40423 int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int) 40424 int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int) 40425 int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int) 40426 int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int) 40427 int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int) 40428 v2di __builtin_ia32_pcmpgtq (v2di, v2di) 40429 40430 The following built-in functions are available when `-msse4.2' is used. 40431 40432`unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)' 40433 Generates the `crc32b' machine instruction. 40434 40435`unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)' 40436 Generates the `crc32w' machine instruction. 40437 40438`unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)' 40439 Generates the `crc32l' machine instruction. 40440 40441`unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)' 40442 Generates the `crc32q' machine instruction. 40443 40444 The following built-in functions are changed to generate new SSE4.2 40445instructions when `-msse4.2' is used. 40446 40447`int __builtin_popcount (unsigned int)' 40448 Generates the `popcntl' machine instruction. 40449 40450`int __builtin_popcountl (unsigned long)' 40451 Generates the `popcntl' or `popcntq' machine instruction, 40452 depending on the size of `unsigned long'. 40453 40454`int __builtin_popcountll (unsigned long long)' 40455 Generates the `popcntq' machine instruction. 40456 40457 The following built-in functions are available when `-mavx' is used. 40458All of them generate the machine instruction that is part of the name. 40459 40460 v4df __builtin_ia32_addpd256 (v4df,v4df) 40461 v8sf __builtin_ia32_addps256 (v8sf,v8sf) 40462 v4df __builtin_ia32_addsubpd256 (v4df,v4df) 40463 v8sf __builtin_ia32_addsubps256 (v8sf,v8sf) 40464 v4df __builtin_ia32_andnpd256 (v4df,v4df) 40465 v8sf __builtin_ia32_andnps256 (v8sf,v8sf) 40466 v4df __builtin_ia32_andpd256 (v4df,v4df) 40467 v8sf __builtin_ia32_andps256 (v8sf,v8sf) 40468 v4df __builtin_ia32_blendpd256 (v4df,v4df,int) 40469 v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int) 40470 v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df) 40471 v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf) 40472 v2df __builtin_ia32_cmppd (v2df,v2df,int) 40473 v4df __builtin_ia32_cmppd256 (v4df,v4df,int) 40474 v4sf __builtin_ia32_cmpps (v4sf,v4sf,int) 40475 v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int) 40476 v2df __builtin_ia32_cmpsd (v2df,v2df,int) 40477 v4sf __builtin_ia32_cmpss (v4sf,v4sf,int) 40478 v4df __builtin_ia32_cvtdq2pd256 (v4si) 40479 v8sf __builtin_ia32_cvtdq2ps256 (v8si) 40480 v4si __builtin_ia32_cvtpd2dq256 (v4df) 40481 v4sf __builtin_ia32_cvtpd2ps256 (v4df) 40482 v8si __builtin_ia32_cvtps2dq256 (v8sf) 40483 v4df __builtin_ia32_cvtps2pd256 (v4sf) 40484 v4si __builtin_ia32_cvttpd2dq256 (v4df) 40485 v8si __builtin_ia32_cvttps2dq256 (v8sf) 40486 v4df __builtin_ia32_divpd256 (v4df,v4df) 40487 v8sf __builtin_ia32_divps256 (v8sf,v8sf) 40488 v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int) 40489 v4df __builtin_ia32_haddpd256 (v4df,v4df) 40490 v8sf __builtin_ia32_haddps256 (v8sf,v8sf) 40491 v4df __builtin_ia32_hsubpd256 (v4df,v4df) 40492 v8sf __builtin_ia32_hsubps256 (v8sf,v8sf) 40493 v32qi __builtin_ia32_lddqu256 (pcchar) 40494 v32qi __builtin_ia32_loaddqu256 (pcchar) 40495 v4df __builtin_ia32_loadupd256 (pcdouble) 40496 v8sf __builtin_ia32_loadups256 (pcfloat) 40497 v2df __builtin_ia32_maskloadpd (pcv2df,v2df) 40498 v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df) 40499 v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf) 40500 v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf) 40501 void __builtin_ia32_maskstorepd (pv2df,v2df,v2df) 40502 void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df) 40503 void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf) 40504 void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf) 40505 v4df __builtin_ia32_maxpd256 (v4df,v4df) 40506 v8sf __builtin_ia32_maxps256 (v8sf,v8sf) 40507 v4df __builtin_ia32_minpd256 (v4df,v4df) 40508 v8sf __builtin_ia32_minps256 (v8sf,v8sf) 40509 v4df __builtin_ia32_movddup256 (v4df) 40510 int __builtin_ia32_movmskpd256 (v4df) 40511 int __builtin_ia32_movmskps256 (v8sf) 40512 v8sf __builtin_ia32_movshdup256 (v8sf) 40513 v8sf __builtin_ia32_movsldup256 (v8sf) 40514 v4df __builtin_ia32_mulpd256 (v4df,v4df) 40515 v8sf __builtin_ia32_mulps256 (v8sf,v8sf) 40516 v4df __builtin_ia32_orpd256 (v4df,v4df) 40517 v8sf __builtin_ia32_orps256 (v8sf,v8sf) 40518 v2df __builtin_ia32_pd_pd256 (v4df) 40519 v4df __builtin_ia32_pd256_pd (v2df) 40520 v4sf __builtin_ia32_ps_ps256 (v8sf) 40521 v8sf __builtin_ia32_ps256_ps (v4sf) 40522 int __builtin_ia32_ptestc256 (v4di,v4di,ptest) 40523 int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest) 40524 int __builtin_ia32_ptestz256 (v4di,v4di,ptest) 40525 v8sf __builtin_ia32_rcpps256 (v8sf) 40526 v4df __builtin_ia32_roundpd256 (v4df,int) 40527 v8sf __builtin_ia32_roundps256 (v8sf,int) 40528 v8sf __builtin_ia32_rsqrtps_nr256 (v8sf) 40529 v8sf __builtin_ia32_rsqrtps256 (v8sf) 40530 v4df __builtin_ia32_shufpd256 (v4df,v4df,int) 40531 v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int) 40532 v4si __builtin_ia32_si_si256 (v8si) 40533 v8si __builtin_ia32_si256_si (v4si) 40534 v4df __builtin_ia32_sqrtpd256 (v4df) 40535 v8sf __builtin_ia32_sqrtps_nr256 (v8sf) 40536 v8sf __builtin_ia32_sqrtps256 (v8sf) 40537 void __builtin_ia32_storedqu256 (pchar,v32qi) 40538 void __builtin_ia32_storeupd256 (pdouble,v4df) 40539 void __builtin_ia32_storeups256 (pfloat,v8sf) 40540 v4df __builtin_ia32_subpd256 (v4df,v4df) 40541 v8sf __builtin_ia32_subps256 (v8sf,v8sf) 40542 v4df __builtin_ia32_unpckhpd256 (v4df,v4df) 40543 v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf) 40544 v4df __builtin_ia32_unpcklpd256 (v4df,v4df) 40545 v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf) 40546 v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df) 40547 v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf) 40548 v4df __builtin_ia32_vbroadcastsd256 (pcdouble) 40549 v4sf __builtin_ia32_vbroadcastss (pcfloat) 40550 v8sf __builtin_ia32_vbroadcastss256 (pcfloat) 40551 v2df __builtin_ia32_vextractf128_pd256 (v4df,int) 40552 v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int) 40553 v4si __builtin_ia32_vextractf128_si256 (v8si,int) 40554 v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int) 40555 v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int) 40556 v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int) 40557 v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int) 40558 v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int) 40559 v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int) 40560 v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int) 40561 v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int) 40562 v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int) 40563 v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int) 40564 v2df __builtin_ia32_vpermilpd (v2df,int) 40565 v4df __builtin_ia32_vpermilpd256 (v4df,int) 40566 v4sf __builtin_ia32_vpermilps (v4sf,int) 40567 v8sf __builtin_ia32_vpermilps256 (v8sf,int) 40568 v2df __builtin_ia32_vpermilvarpd (v2df,v2di) 40569 v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di) 40570 v4sf __builtin_ia32_vpermilvarps (v4sf,v4si) 40571 v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si) 40572 int __builtin_ia32_vtestcpd (v2df,v2df,ptest) 40573 int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest) 40574 int __builtin_ia32_vtestcps (v4sf,v4sf,ptest) 40575 int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest) 40576 int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest) 40577 int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest) 40578 int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest) 40579 int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest) 40580 int __builtin_ia32_vtestzpd (v2df,v2df,ptest) 40581 int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest) 40582 int __builtin_ia32_vtestzps (v4sf,v4sf,ptest) 40583 int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest) 40584 void __builtin_ia32_vzeroall (void) 40585 void __builtin_ia32_vzeroupper (void) 40586 v4df __builtin_ia32_xorpd256 (v4df,v4df) 40587 v8sf __builtin_ia32_xorps256 (v8sf,v8sf) 40588 40589 The following built-in functions are available when `-mavx2' is used. 40590All of them generate the machine instruction that is part of the name. 40591 40592 v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int) 40593 v32qi __builtin_ia32_pabsb256 (v32qi) 40594 v16hi __builtin_ia32_pabsw256 (v16hi) 40595 v8si __builtin_ia32_pabsd256 (v8si) 40596 v16hi __builtin_ia32_packssdw256 (v8si,v8si) 40597 v32qi __builtin_ia32_packsswb256 (v16hi,v16hi) 40598 v16hi __builtin_ia32_packusdw256 (v8si,v8si) 40599 v32qi __builtin_ia32_packuswb256 (v16hi,v16hi) 40600 v32qi __builtin_ia32_paddb256 (v32qi,v32qi) 40601 v16hi __builtin_ia32_paddw256 (v16hi,v16hi) 40602 v8si __builtin_ia32_paddd256 (v8si,v8si) 40603 v4di __builtin_ia32_paddq256 (v4di,v4di) 40604 v32qi __builtin_ia32_paddsb256 (v32qi,v32qi) 40605 v16hi __builtin_ia32_paddsw256 (v16hi,v16hi) 40606 v32qi __builtin_ia32_paddusb256 (v32qi,v32qi) 40607 v16hi __builtin_ia32_paddusw256 (v16hi,v16hi) 40608 v4di __builtin_ia32_palignr256 (v4di,v4di,int) 40609 v4di __builtin_ia32_andsi256 (v4di,v4di) 40610 v4di __builtin_ia32_andnotsi256 (v4di,v4di) 40611 v32qi __builtin_ia32_pavgb256 (v32qi,v32qi) 40612 v16hi __builtin_ia32_pavgw256 (v16hi,v16hi) 40613 v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi) 40614 v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int) 40615 v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi) 40616 v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi) 40617 v8si __builtin_ia32_pcmpeqd256 (c8si,v8si) 40618 v4di __builtin_ia32_pcmpeqq256 (v4di,v4di) 40619 v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi) 40620 v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi) 40621 v8si __builtin_ia32_pcmpgtd256 (v8si,v8si) 40622 v4di __builtin_ia32_pcmpgtq256 (v4di,v4di) 40623 v16hi __builtin_ia32_phaddw256 (v16hi,v16hi) 40624 v8si __builtin_ia32_phaddd256 (v8si,v8si) 40625 v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi) 40626 v16hi __builtin_ia32_phsubw256 (v16hi,v16hi) 40627 v8si __builtin_ia32_phsubd256 (v8si,v8si) 40628 v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi) 40629 v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi) 40630 v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi) 40631 v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi) 40632 v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi) 40633 v8si __builtin_ia32_pmaxsd256 (v8si,v8si) 40634 v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi) 40635 v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi) 40636 v8si __builtin_ia32_pmaxud256 (v8si,v8si) 40637 v32qi __builtin_ia32_pminsb256 (v32qi,v32qi) 40638 v16hi __builtin_ia32_pminsw256 (v16hi,v16hi) 40639 v8si __builtin_ia32_pminsd256 (v8si,v8si) 40640 v32qi __builtin_ia32_pminub256 (v32qi,v32qi) 40641 v16hi __builtin_ia32_pminuw256 (v16hi,v16hi) 40642 v8si __builtin_ia32_pminud256 (v8si,v8si) 40643 int __builtin_ia32_pmovmskb256 (v32qi) 40644 v16hi __builtin_ia32_pmovsxbw256 (v16qi) 40645 v8si __builtin_ia32_pmovsxbd256 (v16qi) 40646 v4di __builtin_ia32_pmovsxbq256 (v16qi) 40647 v8si __builtin_ia32_pmovsxwd256 (v8hi) 40648 v4di __builtin_ia32_pmovsxwq256 (v8hi) 40649 v4di __builtin_ia32_pmovsxdq256 (v4si) 40650 v16hi __builtin_ia32_pmovzxbw256 (v16qi) 40651 v8si __builtin_ia32_pmovzxbd256 (v16qi) 40652 v4di __builtin_ia32_pmovzxbq256 (v16qi) 40653 v8si __builtin_ia32_pmovzxwd256 (v8hi) 40654 v4di __builtin_ia32_pmovzxwq256 (v8hi) 40655 v4di __builtin_ia32_pmovzxdq256 (v4si) 40656 v4di __builtin_ia32_pmuldq256 (v8si,v8si) 40657 v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi) 40658 v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi) 40659 v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi) 40660 v16hi __builtin_ia32_pmullw256 (v16hi,v16hi) 40661 v8si __builtin_ia32_pmulld256 (v8si,v8si) 40662 v4di __builtin_ia32_pmuludq256 (v8si,v8si) 40663 v4di __builtin_ia32_por256 (v4di,v4di) 40664 v16hi __builtin_ia32_psadbw256 (v32qi,v32qi) 40665 v32qi __builtin_ia32_pshufb256 (v32qi,v32qi) 40666 v8si __builtin_ia32_pshufd256 (v8si,int) 40667 v16hi __builtin_ia32_pshufhw256 (v16hi,int) 40668 v16hi __builtin_ia32_pshuflw256 (v16hi,int) 40669 v32qi __builtin_ia32_psignb256 (v32qi,v32qi) 40670 v16hi __builtin_ia32_psignw256 (v16hi,v16hi) 40671 v8si __builtin_ia32_psignd256 (v8si,v8si) 40672 v4di __builtin_ia32_pslldqi256 (v4di,int) 40673 v16hi __builtin_ia32_psllwi256 (16hi,int) 40674 v16hi __builtin_ia32_psllw256(v16hi,v8hi) 40675 v8si __builtin_ia32_pslldi256 (v8si,int) 40676 v8si __builtin_ia32_pslld256(v8si,v4si) 40677 v4di __builtin_ia32_psllqi256 (v4di,int) 40678 v4di __builtin_ia32_psllq256(v4di,v2di) 40679 v16hi __builtin_ia32_psrawi256 (v16hi,int) 40680 v16hi __builtin_ia32_psraw256 (v16hi,v8hi) 40681 v8si __builtin_ia32_psradi256 (v8si,int) 40682 v8si __builtin_ia32_psrad256 (v8si,v4si) 40683 v4di __builtin_ia32_psrldqi256 (v4di, int) 40684 v16hi __builtin_ia32_psrlwi256 (v16hi,int) 40685 v16hi __builtin_ia32_psrlw256 (v16hi,v8hi) 40686 v8si __builtin_ia32_psrldi256 (v8si,int) 40687 v8si __builtin_ia32_psrld256 (v8si,v4si) 40688 v4di __builtin_ia32_psrlqi256 (v4di,int) 40689 v4di __builtin_ia32_psrlq256(v4di,v2di) 40690 v32qi __builtin_ia32_psubb256 (v32qi,v32qi) 40691 v32hi __builtin_ia32_psubw256 (v16hi,v16hi) 40692 v8si __builtin_ia32_psubd256 (v8si,v8si) 40693 v4di __builtin_ia32_psubq256 (v4di,v4di) 40694 v32qi __builtin_ia32_psubsb256 (v32qi,v32qi) 40695 v16hi __builtin_ia32_psubsw256 (v16hi,v16hi) 40696 v32qi __builtin_ia32_psubusb256 (v32qi,v32qi) 40697 v16hi __builtin_ia32_psubusw256 (v16hi,v16hi) 40698 v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi) 40699 v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi) 40700 v8si __builtin_ia32_punpckhdq256 (v8si,v8si) 40701 v4di __builtin_ia32_punpckhqdq256 (v4di,v4di) 40702 v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi) 40703 v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi) 40704 v8si __builtin_ia32_punpckldq256 (v8si,v8si) 40705 v4di __builtin_ia32_punpcklqdq256 (v4di,v4di) 40706 v4di __builtin_ia32_pxor256 (v4di,v4di) 40707 v4di __builtin_ia32_movntdqa256 (pv4di) 40708 v4sf __builtin_ia32_vbroadcastss_ps (v4sf) 40709 v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf) 40710 v4df __builtin_ia32_vbroadcastsd_pd256 (v2df) 40711 v4di __builtin_ia32_vbroadcastsi256 (v2di) 40712 v4si __builtin_ia32_pblendd128 (v4si,v4si) 40713 v8si __builtin_ia32_pblendd256 (v8si,v8si) 40714 v32qi __builtin_ia32_pbroadcastb256 (v16qi) 40715 v16hi __builtin_ia32_pbroadcastw256 (v8hi) 40716 v8si __builtin_ia32_pbroadcastd256 (v4si) 40717 v4di __builtin_ia32_pbroadcastq256 (v2di) 40718 v16qi __builtin_ia32_pbroadcastb128 (v16qi) 40719 v8hi __builtin_ia32_pbroadcastw128 (v8hi) 40720 v4si __builtin_ia32_pbroadcastd128 (v4si) 40721 v2di __builtin_ia32_pbroadcastq128 (v2di) 40722 v8si __builtin_ia32_permvarsi256 (v8si,v8si) 40723 v4df __builtin_ia32_permdf256 (v4df,int) 40724 v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf) 40725 v4di __builtin_ia32_permdi256 (v4di,int) 40726 v4di __builtin_ia32_permti256 (v4di,v4di,int) 40727 v4di __builtin_ia32_extract128i256 (v4di,int) 40728 v4di __builtin_ia32_insert128i256 (v4di,v2di,int) 40729 v8si __builtin_ia32_maskloadd256 (pcv8si,v8si) 40730 v4di __builtin_ia32_maskloadq256 (pcv4di,v4di) 40731 v4si __builtin_ia32_maskloadd (pcv4si,v4si) 40732 v2di __builtin_ia32_maskloadq (pcv2di,v2di) 40733 void __builtin_ia32_maskstored256 (pv8si,v8si,v8si) 40734 void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di) 40735 void __builtin_ia32_maskstored (pv4si,v4si,v4si) 40736 void __builtin_ia32_maskstoreq (pv2di,v2di,v2di) 40737 v8si __builtin_ia32_psllv8si (v8si,v8si) 40738 v4si __builtin_ia32_psllv4si (v4si,v4si) 40739 v4di __builtin_ia32_psllv4di (v4di,v4di) 40740 v2di __builtin_ia32_psllv2di (v2di,v2di) 40741 v8si __builtin_ia32_psrav8si (v8si,v8si) 40742 v4si __builtin_ia32_psrav4si (v4si,v4si) 40743 v8si __builtin_ia32_psrlv8si (v8si,v8si) 40744 v4si __builtin_ia32_psrlv4si (v4si,v4si) 40745 v4di __builtin_ia32_psrlv4di (v4di,v4di) 40746 v2di __builtin_ia32_psrlv2di (v2di,v2di) 40747 v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int) 40748 v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int) 40749 v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int) 40750 v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int) 40751 v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int) 40752 v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int) 40753 v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int) 40754 v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int) 40755 v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int) 40756 v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int) 40757 v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int) 40758 v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int) 40759 v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int) 40760 v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int) 40761 v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int) 40762 v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int) 40763 40764 The following built-in functions are available when `-maes' is used. 40765All of them generate the machine instruction that is part of the name. 40766 40767 v2di __builtin_ia32_aesenc128 (v2di, v2di) 40768 v2di __builtin_ia32_aesenclast128 (v2di, v2di) 40769 v2di __builtin_ia32_aesdec128 (v2di, v2di) 40770 v2di __builtin_ia32_aesdeclast128 (v2di, v2di) 40771 v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) 40772 v2di __builtin_ia32_aesimc128 (v2di) 40773 40774 The following built-in function is available when `-mpclmul' is used. 40775 40776`v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)' 40777 Generates the `pclmulqdq' machine instruction. 40778 40779 The following built-in function is available when `-mfsgsbase' is 40780used. All of them generate the machine instruction that is part of the 40781name. 40782 40783 unsigned int __builtin_ia32_rdfsbase32 (void) 40784 unsigned long long __builtin_ia32_rdfsbase64 (void) 40785 unsigned int __builtin_ia32_rdgsbase32 (void) 40786 unsigned long long __builtin_ia32_rdgsbase64 (void) 40787 void _writefsbase_u32 (unsigned int) 40788 void _writefsbase_u64 (unsigned long long) 40789 void _writegsbase_u32 (unsigned int) 40790 void _writegsbase_u64 (unsigned long long) 40791 40792 The following built-in function is available when `-mrdrnd' is used. 40793All of them generate the machine instruction that is part of the name. 40794 40795 unsigned int __builtin_ia32_rdrand16_step (unsigned short *) 40796 unsigned int __builtin_ia32_rdrand32_step (unsigned int *) 40797 unsigned int __builtin_ia32_rdrand64_step (unsigned long long *) 40798 40799 The following built-in functions are available when `-msse4a' is used. 40800All of them generate the machine instruction that is part of the name. 40801 40802 void __builtin_ia32_movntsd (double *, v2df) 40803 void __builtin_ia32_movntss (float *, v4sf) 40804 v2di __builtin_ia32_extrq (v2di, v16qi) 40805 v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int) 40806 v2di __builtin_ia32_insertq (v2di, v2di) 40807 v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int) 40808 40809 The following built-in functions are available when `-mxop' is used. 40810 v2df __builtin_ia32_vfrczpd (v2df) 40811 v4sf __builtin_ia32_vfrczps (v4sf) 40812 v2df __builtin_ia32_vfrczsd (v2df) 40813 v4sf __builtin_ia32_vfrczss (v4sf) 40814 v4df __builtin_ia32_vfrczpd256 (v4df) 40815 v8sf __builtin_ia32_vfrczps256 (v8sf) 40816 v2di __builtin_ia32_vpcmov (v2di, v2di, v2di) 40817 v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di) 40818 v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si) 40819 v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi) 40820 v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi) 40821 v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df) 40822 v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf) 40823 v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di) 40824 v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si) 40825 v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi) 40826 v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi) 40827 v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df) 40828 v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf) 40829 v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi) 40830 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 40831 v4si __builtin_ia32_vpcomeqd (v4si, v4si) 40832 v2di __builtin_ia32_vpcomeqq (v2di, v2di) 40833 v16qi __builtin_ia32_vpcomequb (v16qi, v16qi) 40834 v4si __builtin_ia32_vpcomequd (v4si, v4si) 40835 v2di __builtin_ia32_vpcomequq (v2di, v2di) 40836 v8hi __builtin_ia32_vpcomequw (v8hi, v8hi) 40837 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 40838 v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi) 40839 v4si __builtin_ia32_vpcomfalsed (v4si, v4si) 40840 v2di __builtin_ia32_vpcomfalseq (v2di, v2di) 40841 v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi) 40842 v4si __builtin_ia32_vpcomfalseud (v4si, v4si) 40843 v2di __builtin_ia32_vpcomfalseuq (v2di, v2di) 40844 v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi) 40845 v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi) 40846 v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi) 40847 v4si __builtin_ia32_vpcomged (v4si, v4si) 40848 v2di __builtin_ia32_vpcomgeq (v2di, v2di) 40849 v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi) 40850 v4si __builtin_ia32_vpcomgeud (v4si, v4si) 40851 v2di __builtin_ia32_vpcomgeuq (v2di, v2di) 40852 v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi) 40853 v8hi __builtin_ia32_vpcomgew (v8hi, v8hi) 40854 v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi) 40855 v4si __builtin_ia32_vpcomgtd (v4si, v4si) 40856 v2di __builtin_ia32_vpcomgtq (v2di, v2di) 40857 v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi) 40858 v4si __builtin_ia32_vpcomgtud (v4si, v4si) 40859 v2di __builtin_ia32_vpcomgtuq (v2di, v2di) 40860 v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi) 40861 v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi) 40862 v16qi __builtin_ia32_vpcomleb (v16qi, v16qi) 40863 v4si __builtin_ia32_vpcomled (v4si, v4si) 40864 v2di __builtin_ia32_vpcomleq (v2di, v2di) 40865 v16qi __builtin_ia32_vpcomleub (v16qi, v16qi) 40866 v4si __builtin_ia32_vpcomleud (v4si, v4si) 40867 v2di __builtin_ia32_vpcomleuq (v2di, v2di) 40868 v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi) 40869 v8hi __builtin_ia32_vpcomlew (v8hi, v8hi) 40870 v16qi __builtin_ia32_vpcomltb (v16qi, v16qi) 40871 v4si __builtin_ia32_vpcomltd (v4si, v4si) 40872 v2di __builtin_ia32_vpcomltq (v2di, v2di) 40873 v16qi __builtin_ia32_vpcomltub (v16qi, v16qi) 40874 v4si __builtin_ia32_vpcomltud (v4si, v4si) 40875 v2di __builtin_ia32_vpcomltuq (v2di, v2di) 40876 v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi) 40877 v8hi __builtin_ia32_vpcomltw (v8hi, v8hi) 40878 v16qi __builtin_ia32_vpcomneb (v16qi, v16qi) 40879 v4si __builtin_ia32_vpcomned (v4si, v4si) 40880 v2di __builtin_ia32_vpcomneq (v2di, v2di) 40881 v16qi __builtin_ia32_vpcomneub (v16qi, v16qi) 40882 v4si __builtin_ia32_vpcomneud (v4si, v4si) 40883 v2di __builtin_ia32_vpcomneuq (v2di, v2di) 40884 v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi) 40885 v8hi __builtin_ia32_vpcomnew (v8hi, v8hi) 40886 v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi) 40887 v4si __builtin_ia32_vpcomtrued (v4si, v4si) 40888 v2di __builtin_ia32_vpcomtrueq (v2di, v2di) 40889 v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi) 40890 v4si __builtin_ia32_vpcomtrueud (v4si, v4si) 40891 v2di __builtin_ia32_vpcomtrueuq (v2di, v2di) 40892 v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi) 40893 v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi) 40894 v4si __builtin_ia32_vphaddbd (v16qi) 40895 v2di __builtin_ia32_vphaddbq (v16qi) 40896 v8hi __builtin_ia32_vphaddbw (v16qi) 40897 v2di __builtin_ia32_vphadddq (v4si) 40898 v4si __builtin_ia32_vphaddubd (v16qi) 40899 v2di __builtin_ia32_vphaddubq (v16qi) 40900 v8hi __builtin_ia32_vphaddubw (v16qi) 40901 v2di __builtin_ia32_vphaddudq (v4si) 40902 v4si __builtin_ia32_vphadduwd (v8hi) 40903 v2di __builtin_ia32_vphadduwq (v8hi) 40904 v4si __builtin_ia32_vphaddwd (v8hi) 40905 v2di __builtin_ia32_vphaddwq (v8hi) 40906 v8hi __builtin_ia32_vphsubbw (v16qi) 40907 v2di __builtin_ia32_vphsubdq (v4si) 40908 v4si __builtin_ia32_vphsubwd (v8hi) 40909 v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si) 40910 v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di) 40911 v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di) 40912 v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si) 40913 v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di) 40914 v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di) 40915 v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si) 40916 v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi) 40917 v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si) 40918 v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi) 40919 v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si) 40920 v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si) 40921 v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi) 40922 v16qi __builtin_ia32_vprotb (v16qi, v16qi) 40923 v4si __builtin_ia32_vprotd (v4si, v4si) 40924 v2di __builtin_ia32_vprotq (v2di, v2di) 40925 v8hi __builtin_ia32_vprotw (v8hi, v8hi) 40926 v16qi __builtin_ia32_vpshab (v16qi, v16qi) 40927 v4si __builtin_ia32_vpshad (v4si, v4si) 40928 v2di __builtin_ia32_vpshaq (v2di, v2di) 40929 v8hi __builtin_ia32_vpshaw (v8hi, v8hi) 40930 v16qi __builtin_ia32_vpshlb (v16qi, v16qi) 40931 v4si __builtin_ia32_vpshld (v4si, v4si) 40932 v2di __builtin_ia32_vpshlq (v2di, v2di) 40933 v8hi __builtin_ia32_vpshlw (v8hi, v8hi) 40934 40935 The following built-in functions are available when `-mfma4' is used. 40936All of them generate the machine instruction that is part of the name. 40937 40938 v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df) 40939 v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf) 40940 v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df) 40941 v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf) 40942 v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df) 40943 v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf) 40944 v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df) 40945 v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf) 40946 v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df) 40947 v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf) 40948 v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df) 40949 v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf) 40950 v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df) 40951 v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf) 40952 v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df) 40953 v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf) 40954 v2df __builtin_ia32_vfmaddsubpd (v2df, v2df, v2df) 40955 v4sf __builtin_ia32_vfmaddsubps (v4sf, v4sf, v4sf) 40956 v2df __builtin_ia32_vfmsubaddpd (v2df, v2df, v2df) 40957 v4sf __builtin_ia32_vfmsubaddps (v4sf, v4sf, v4sf) 40958 v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df) 40959 v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf) 40960 v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df) 40961 v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf) 40962 v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df) 40963 v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf) 40964 v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df) 40965 v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf) 40966 v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df) 40967 v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf) 40968 v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df) 40969 v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf) 40970 40971 The following built-in functions are available when `-mlwp' is used. 40972 40973 void __builtin_ia32_llwpcb16 (void *); 40974 void __builtin_ia32_llwpcb32 (void *); 40975 void __builtin_ia32_llwpcb64 (void *); 40976 void * __builtin_ia32_llwpcb16 (void); 40977 void * __builtin_ia32_llwpcb32 (void); 40978 void * __builtin_ia32_llwpcb64 (void); 40979 void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short) 40980 void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int) 40981 void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int) 40982 unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short) 40983 unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int) 40984 unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int) 40985 40986 The following built-in functions are available when `-mbmi' is used. 40987All of them generate the machine instruction that is part of the name. 40988 unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int); 40989 unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long); 40990 40991 The following built-in functions are available when `-mbmi2' is used. 40992All of them generate the machine instruction that is part of the name. 40993 unsigned int _bzhi_u32 (unsigned int, unsigned int) 40994 unsigned int _pdep_u32 (unsigned int, unsigned int) 40995 unsigned int _pext_u32 (unsigned int, unsigned int) 40996 unsigned long long _bzhi_u64 (unsigned long long, unsigned long long) 40997 unsigned long long _pdep_u64 (unsigned long long, unsigned long long) 40998 unsigned long long _pext_u64 (unsigned long long, unsigned long long) 40999 41000 The following built-in functions are available when `-mlzcnt' is used. 41001All of them generate the machine instruction that is part of the name. 41002 unsigned short __builtin_ia32_lzcnt_16(unsigned short); 41003 unsigned int __builtin_ia32_lzcnt_u32(unsigned int); 41004 unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long); 41005 41006 The following built-in functions are available when `-mfxsr' is used. 41007All of them generate the machine instruction that is part of the name. 41008 void __builtin_ia32_fxsave (void *) 41009 void __builtin_ia32_fxrstor (void *) 41010 void __builtin_ia32_fxsave64 (void *) 41011 void __builtin_ia32_fxrstor64 (void *) 41012 41013 The following built-in functions are available when `-mxsave' is used. 41014All of them generate the machine instruction that is part of the name. 41015 void __builtin_ia32_xsave (void *, long long) 41016 void __builtin_ia32_xrstor (void *, long long) 41017 void __builtin_ia32_xsave64 (void *, long long) 41018 void __builtin_ia32_xrstor64 (void *, long long) 41019 41020 The following built-in functions are available when `-mxsaveopt' is 41021used. All of them generate the machine instruction that is part of the 41022name. 41023 void __builtin_ia32_xsaveopt (void *, long long) 41024 void __builtin_ia32_xsaveopt64 (void *, long long) 41025 41026 The following built-in functions are available when `-mtbm' is used. 41027Both of them generate the immediate form of the bextr machine 41028instruction. 41029 unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int); 41030 unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long); 41031 41032 The following built-in functions are available when `-m3dnow' is used. 41033All of them generate the machine instruction that is part of the name. 41034 41035 void __builtin_ia32_femms (void) 41036 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 41037 v2si __builtin_ia32_pf2id (v2sf) 41038 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 41039 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 41040 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 41041 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 41042 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 41043 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 41044 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 41045 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 41046 v2sf __builtin_ia32_pfrcp (v2sf) 41047 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 41048 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 41049 v2sf __builtin_ia32_pfrsqrt (v2sf) 41050 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 41051 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 41052 v2sf __builtin_ia32_pi2fd (v2si) 41053 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 41054 41055 The following built-in functions are available when both `-m3dnow' and 41056`-march=athlon' are used. All of them generate the machine instruction 41057that is part of the name. 41058 41059 v2si __builtin_ia32_pf2iw (v2sf) 41060 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 41061 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 41062 v2sf __builtin_ia32_pi2fw (v2si) 41063 v2sf __builtin_ia32_pswapdsf (v2sf) 41064 v2si __builtin_ia32_pswapdsi (v2si) 41065 41066 The following built-in functions are available when `-mrtm' is used 41067They are used for restricted transactional memory. These are the 41068internal low level functions. Normally the functions in *Note x86 41069transactional memory intrinsics:: should be used instead. 41070 41071 int __builtin_ia32_xbegin () 41072 void __builtin_ia32_xend () 41073 void __builtin_ia32_xabort (status) 41074 int __builtin_ia32_xtest () 41075 41076 The following built-in functions are available when `-mmwaitx' is used. 41077All of them generate the machine instruction that is part of the name. 41078 void __builtin_ia32_monitorx (void *, unsigned int, unsigned int) 41079 void __builtin_ia32_mwaitx (unsigned int, unsigned int, unsigned int) 41080 41081 41082File: gcc.info, Node: x86 transactional memory intrinsics, Prev: x86 Built-in Functions, Up: Target Builtins 41083 410846.58.31 x86 Transactional Memory Intrinsics 41085------------------------------------------- 41086 41087These hardware transactional memory intrinsics for x86 allow you to use 41088memory transactions with RTM (Restricted Transactional Memory). This 41089support is enabled with the `-mrtm' option. For using HLE (Hardware 41090Lock Elision) see *Note x86 specific memory model extensions for 41091transactional memory:: instead. 41092 41093 A memory transaction commits all changes to memory in an atomic way, 41094as visible to other threads. If the transaction fails it is rolled back 41095and all side effects discarded. 41096 41097 Generally there is no guarantee that a memory transaction ever succeeds 41098and suitable fallback code always needs to be supplied. 41099 41100 -- RTM Function: unsigned _xbegin () 41101 Start a RTM (Restricted Transactional Memory) transaction. 41102 Returns `_XBEGIN_STARTED' when the transaction started 41103 successfully (note this is not 0, so the constant has to be 41104 explicitly tested). 41105 41106 If the transaction aborts, all side-effects are undone and an 41107 abort code encoded as a bit mask is returned. The following 41108 macros are defined: 41109 41110 `_XABORT_EXPLICIT' 41111 Transaction was explicitly aborted with `_xabort'. The 41112 parameter passed to `_xabort' is available with 41113 `_XABORT_CODE(status)'. 41114 41115 `_XABORT_RETRY' 41116 Transaction retry is possible. 41117 41118 `_XABORT_CONFLICT' 41119 Transaction abort due to a memory conflict with another 41120 thread. 41121 41122 `_XABORT_CAPACITY' 41123 Transaction abort due to the transaction using too much 41124 memory. 41125 41126 `_XABORT_DEBUG' 41127 Transaction abort due to a debug trap. 41128 41129 `_XABORT_NESTED' 41130 Transaction abort in an inner nested transaction. 41131 41132 There is no guarantee any transaction ever succeeds, so there 41133 always needs to be a valid fallback path. 41134 41135 -- RTM Function: void _xend () 41136 Commit the current transaction. When no transaction is active this 41137 faults. All memory side-effects of the transaction become visible 41138 to other threads in an atomic manner. 41139 41140 -- RTM Function: int _xtest () 41141 Return a nonzero value if a transaction is currently active, 41142 otherwise 0. 41143 41144 -- RTM Function: void _xabort (status) 41145 Abort the current transaction. When no transaction is active this 41146 is a no-op. The STATUS is an 8-bit constant; its value is encoded 41147 in the return value from `_xbegin'. 41148 41149 Here is an example showing handling for `_XABORT_RETRY' and a fallback 41150path for other failures: 41151 41152 #include <immintrin.h> 41153 41154 int n_tries, max_tries; 41155 unsigned status = _XABORT_EXPLICIT; 41156 ... 41157 41158 for (n_tries = 0; n_tries < max_tries; n_tries++) 41159 { 41160 status = _xbegin (); 41161 if (status == _XBEGIN_STARTED || !(status & _XABORT_RETRY)) 41162 break; 41163 } 41164 if (status == _XBEGIN_STARTED) 41165 { 41166 ... transaction code... 41167 _xend (); 41168 } 41169 else 41170 { 41171 ... non-transactional fallback path... 41172 } 41173 41174Note that, in most cases, the transactional and non-transactional code 41175must synchronize together to ensure consistency. 41176 41177 41178File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 41179 411806.59 Format Checks Specific to Particular Target Machines 41181========================================================= 41182 41183For some target machines, GCC supports additional options to the format 41184attribute (*note Declaring Attributes of Functions: Function 41185Attributes.). 41186 41187* Menu: 41188 41189* Solaris Format Checks:: 41190* Darwin Format Checks:: 41191 41192 41193File: gcc.info, Node: Solaris Format Checks, Next: Darwin Format Checks, Up: Target Format Checks 41194 411956.59.1 Solaris Format Checks 41196---------------------------- 41197 41198Solaris targets support the `cmn_err' (or `__cmn_err__') format check. 41199`cmn_err' accepts a subset of the standard `printf' conversions, and 41200the two-argument `%b' conversion for displaying bit-fields. See the 41201Solaris man page for `cmn_err' for more information. 41202 41203 41204File: gcc.info, Node: Darwin Format Checks, Prev: Solaris Format Checks, Up: Target Format Checks 41205 412066.59.2 Darwin Format Checks 41207--------------------------- 41208 41209Darwin targets support the `CFString' (or `__CFString__') in the format 41210attribute context. Declarations made with such attribution are parsed 41211for correct syntax and format argument types. However, parsing of the 41212format string itself is currently undefined and is not carried out by 41213this version of the compiler. 41214 41215 Additionally, `CFStringRefs' (defined by the `CoreFoundation' headers) 41216may also be used as format arguments. Note that the relevant headers 41217are only likely to be available on Darwin (OSX) installations. On such 41218installations, the XCode and system documentation provide descriptions 41219of `CFString', `CFStringRefs' and associated functions. 41220 41221 41222File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 41223 412246.60 Pragmas Accepted by GCC 41225============================ 41226 41227GCC supports several types of pragmas, primarily in order to compile 41228code originally written for other compilers. Note that in general we 41229do not recommend the use of pragmas; *Note Function Attributes::, for 41230further explanation. 41231 41232* Menu: 41233 41234* ARM Pragmas:: 41235* M32C Pragmas:: 41236* MeP Pragmas:: 41237* RS/6000 and PowerPC Pragmas:: 41238* Darwin Pragmas:: 41239* Solaris Pragmas:: 41240* Symbol-Renaming Pragmas:: 41241* Structure-Packing Pragmas:: 41242* Weak Pragmas:: 41243* Diagnostic Pragmas:: 41244* Visibility Pragmas:: 41245* Push/Pop Macro Pragmas:: 41246* Function Specific Option Pragmas:: 41247* Loop-Specific Pragmas:: 41248 41249 41250File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 41251 412526.60.1 ARM Pragmas 41253------------------ 41254 41255The ARM target defines pragmas for controlling the default addition of 41256`long_call' and `short_call' attributes to functions. *Note Function 41257Attributes::, for information about the effects of these attributes. 41258 41259`long_calls' 41260 Set all subsequent functions to have the `long_call' attribute. 41261 41262`no_long_calls' 41263 Set all subsequent functions to have the `short_call' attribute. 41264 41265`long_calls_off' 41266 Do not affect the `long_call' or `short_call' attributes of 41267 subsequent functions. 41268 41269 41270File: gcc.info, Node: M32C Pragmas, Next: MeP Pragmas, Prev: ARM Pragmas, Up: Pragmas 41271 412726.60.2 M32C Pragmas 41273------------------- 41274 41275`GCC memregs NUMBER' 41276 Overrides the command-line option `-memregs=' for the current 41277 file. Use with care! This pragma must be before any function in 41278 the file, and mixing different memregs values in different objects 41279 may make them incompatible. This pragma is useful when a 41280 performance-critical function uses a memreg for temporary values, 41281 as it may allow you to reduce the number of memregs used. 41282 41283`ADDRESS NAME ADDRESS' 41284 For any declared symbols matching NAME, this does three things to 41285 that symbol: it forces the symbol to be located at the given 41286 address (a number), it forces the symbol to be volatile, and it 41287 changes the symbol's scope to be static. This pragma exists for 41288 compatibility with other compilers, but note that the common 41289 `1234H' numeric syntax is not supported (use `0x1234' instead). 41290 Example: 41291 41292 #pragma ADDRESS port3 0x103 41293 char port3; 41294 41295 41296 41297File: gcc.info, Node: MeP Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: M32C Pragmas, Up: Pragmas 41298 412996.60.3 MeP Pragmas 41300------------------ 41301 41302`custom io_volatile (on|off)' 41303 Overrides the command-line option `-mio-volatile' for the current 41304 file. Note that for compatibility with future GCC releases, this 41305 option should only be used once before any `io' variables in each 41306 file. 41307 41308`GCC coprocessor available REGISTERS' 41309 Specifies which coprocessor registers are available to the register 41310 allocator. REGISTERS may be a single register, register range 41311 separated by ellipses, or comma-separated list of those. Example: 41312 41313 #pragma GCC coprocessor available $c0...$c10, $c28 41314 41315`GCC coprocessor call_saved REGISTERS' 41316 Specifies which coprocessor registers are to be saved and restored 41317 by any function using them. REGISTERS may be a single register, 41318 register range separated by ellipses, or comma-separated list of 41319 those. Example: 41320 41321 #pragma GCC coprocessor call_saved $c4...$c6, $c31 41322 41323`GCC coprocessor subclass '(A|B|C|D)' = REGISTERS' 41324 Creates and defines a register class. These register classes can 41325 be used by inline `asm' constructs. REGISTERS may be a single 41326 register, register range separated by ellipses, or comma-separated 41327 list of those. Example: 41328 41329 #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6 41330 41331 asm ("cpfoo %0" : "=B" (x)); 41332 41333`GCC disinterrupt NAME , NAME ...' 41334 For the named functions, the compiler adds code to disable 41335 interrupts for the duration of those functions. If any functions 41336 so named are not encountered in the source, a warning is emitted 41337 that the pragma is not used. Examples: 41338 41339 #pragma disinterrupt foo 41340 #pragma disinterrupt bar, grill 41341 int foo () { ... } 41342 41343`GCC call NAME , NAME ...' 41344 For the named functions, the compiler always uses a 41345 register-indirect call model when calling the named functions. 41346 Examples: 41347 41348 extern int foo (); 41349 #pragma call foo 41350 41351 41352 41353File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: MeP Pragmas, Up: Pragmas 41354 413556.60.4 RS/6000 and PowerPC Pragmas 41356---------------------------------- 41357 41358The RS/6000 and PowerPC targets define one pragma for controlling 41359whether or not the `longcall' attribute is added to function 41360declarations by default. This pragma overrides the `-mlongcall' 41361option, but not the `longcall' and `shortcall' attributes. *Note 41362RS/6000 and PowerPC Options::, for more information about when long 41363calls are and are not necessary. 41364 41365`longcall (1)' 41366 Apply the `longcall' attribute to all subsequent function 41367 declarations. 41368 41369`longcall (0)' 41370 Do not apply the `longcall' attribute to subsequent function 41371 declarations. 41372 41373 41374File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 41375 413766.60.5 Darwin Pragmas 41377--------------------- 41378 41379The following pragmas are available for all architectures running the 41380Darwin operating system. These are useful for compatibility with other 41381Mac OS compilers. 41382 41383`mark TOKENS...' 41384 This pragma is accepted, but has no effect. 41385 41386`options align=ALIGNMENT' 41387 This pragma sets the alignment of fields in structures. The 41388 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 41389 `power', to emulate PowerPC alignment. Uses of this pragma nest 41390 properly; to restore the previous setting, use `reset' for the 41391 ALIGNMENT. 41392 41393`segment TOKENS...' 41394 This pragma is accepted, but has no effect. 41395 41396`unused (VAR [, VAR]...)' 41397 This pragma declares variables to be possibly unused. GCC does not 41398 produce warnings for the listed variables. The effect is similar 41399 to that of the `unused' attribute, except that this pragma may 41400 appear anywhere within the variables' scopes. 41401 41402 41403File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 41404 414056.60.6 Solaris Pragmas 41406---------------------- 41407 41408The Solaris target supports `#pragma redefine_extname' (*note 41409Symbol-Renaming Pragmas::). It also supports additional `#pragma' 41410directives for compatibility with the system compiler. 41411 41412`align ALIGNMENT (VARIABLE [, VARIABLE]...)' 41413 Increase the minimum alignment of each VARIABLE to ALIGNMENT. 41414 This is the same as GCC's `aligned' attribute *note Variable 41415 Attributes::). Macro expansion occurs on the arguments to this 41416 pragma when compiling C and Objective-C. It does not currently 41417 occur when compiling C++, but this is a bug which may be fixed in 41418 a future release. 41419 41420`fini (FUNCTION [, FUNCTION]...)' 41421 This pragma causes each listed FUNCTION to be called after main, 41422 or during shared module unloading, by adding a call to the `.fini' 41423 section. 41424 41425`init (FUNCTION [, FUNCTION]...)' 41426 This pragma causes each listed FUNCTION to be called during 41427 initialization (before `main') or during shared module loading, by 41428 adding a call to the `.init' section. 41429 41430 41431 41432File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 41433 414346.60.7 Symbol-Renaming Pragmas 41435------------------------------ 41436 41437GCC supports a `#pragma' directive that changes the name used in 41438assembly for a given declaration. While this pragma is supported on all 41439platforms, it is intended primarily to provide compatibility with the 41440Solaris system headers. This effect can also be achieved using the asm 41441labels extension (*note Asm Labels::). 41442 41443`redefine_extname OLDNAME NEWNAME' 41444 This pragma gives the C function OLDNAME the assembly symbol 41445 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' is 41446 defined if this pragma is available (currently on all platforms). 41447 41448 This pragma and the asm labels extension interact in a complicated 41449manner. Here are some corner cases you may want to be aware of: 41450 41451 1. This pragma silently applies only to declarations with external 41452 linkage. Asm labels do not have this restriction. 41453 41454 2. In C++, this pragma silently applies only to declarations with "C" 41455 linkage. Again, asm labels do not have this restriction. 41456 41457 3. If either of the ways of changing the assembly name of a 41458 declaration are applied to a declaration whose assembly name has 41459 already been determined (either by a previous use of one of these 41460 features, or because the compiler needed the assembly name in 41461 order to generate code), and the new name is different, a warning 41462 issues and the name does not change. 41463 41464 4. The OLDNAME used by `#pragma redefine_extname' is always the 41465 C-language name. 41466 41467 41468File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 41469 414706.60.8 Structure-Packing Pragmas 41471-------------------------------- 41472 41473For compatibility with Microsoft Windows compilers, GCC supports a set 41474of `#pragma' directives that change the maximum alignment of members of 41475structures (other than zero-width bit-fields), unions, and classes 41476subsequently defined. The N value below always is required to be a 41477small power of two and specifies the new alignment in bytes. 41478 41479 1. `#pragma pack(N)' simply sets the new alignment. 41480 41481 2. `#pragma pack()' sets the alignment to the one that was in effect 41482 when compilation started (see also command-line option 41483 `-fpack-struct[=N]' *note Code Gen Options::). 41484 41485 3. `#pragma pack(push[,N])' pushes the current alignment setting on 41486 an internal stack and then optionally sets the new alignment. 41487 41488 4. `#pragma pack(pop)' restores the alignment setting to the one 41489 saved at the top of the internal stack (and removes that stack 41490 entry). Note that `#pragma pack([N])' does not influence this 41491 internal stack; thus it is possible to have `#pragma pack(push)' 41492 followed by multiple `#pragma pack(N)' instances and finalized by 41493 a single `#pragma pack(pop)'. 41494 41495 Some targets, e.g. x86 and PowerPC, support the `ms_struct' `#pragma' 41496which lays out a structure as the documented `__attribute__ 41497((ms_struct))'. 41498 1. `#pragma ms_struct on' turns on the layout for structures declared. 41499 41500 2. `#pragma ms_struct off' turns off the layout for structures 41501 declared. 41502 41503 3. `#pragma ms_struct reset' goes back to the default layout. 41504 41505 41506File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 41507 415086.60.9 Weak Pragmas 41509------------------- 41510 41511For compatibility with SVR4, GCC supports a set of `#pragma' directives 41512for declaring symbols to be weak, and defining weak aliases. 41513 41514`#pragma weak SYMBOL' 41515 This pragma declares SYMBOL to be weak, as if the declaration had 41516 the attribute of the same name. The pragma may appear before or 41517 after the declaration of SYMBOL. It is not an error for SYMBOL to 41518 never be defined at all. 41519 41520`#pragma weak SYMBOL1 = SYMBOL2' 41521 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 41522 an error if SYMBOL2 is not defined in the current translation unit. 41523 41524 41525File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 41526 415276.60.10 Diagnostic Pragmas 41528-------------------------- 41529 41530GCC allows the user to selectively enable or disable certain types of 41531diagnostics, and change the kind of the diagnostic. For example, a 41532project's policy might require that all sources compile with `-Werror' 41533but certain files might have exceptions allowing specific types of 41534warnings. Or, a project might selectively enable diagnostics and treat 41535them as errors depending on which preprocessor macros are defined. 41536 41537`#pragma GCC diagnostic KIND OPTION' 41538 Modifies the disposition of a diagnostic. Note that not all 41539 diagnostics are modifiable; at the moment only warnings (normally 41540 controlled by `-W...') can be controlled, and not all of them. 41541 Use `-fdiagnostics-show-option' to determine which diagnostics are 41542 controllable and which option controls them. 41543 41544 KIND is `error' to treat this diagnostic as an error, `warning' to 41545 treat it like a warning (even if `-Werror' is in effect), or 41546 `ignored' if the diagnostic is to be ignored. OPTION is a double 41547 quoted string that matches the command-line option. 41548 41549 #pragma GCC diagnostic warning "-Wformat" 41550 #pragma GCC diagnostic error "-Wformat" 41551 #pragma GCC diagnostic ignored "-Wformat" 41552 41553 Note that these pragmas override any command-line options. GCC 41554 keeps track of the location of each pragma, and issues diagnostics 41555 according to the state as of that point in the source file. Thus, 41556 pragmas occurring after a line do not affect diagnostics caused by 41557 that line. 41558 41559`#pragma GCC diagnostic push' 41560`#pragma GCC diagnostic pop' 41561 Causes GCC to remember the state of the diagnostics as of each 41562 `push', and restore to that point at each `pop'. If a `pop' has 41563 no matching `push', the command-line options are restored. 41564 41565 #pragma GCC diagnostic error "-Wuninitialized" 41566 foo(a); /* error is given for this one */ 41567 #pragma GCC diagnostic push 41568 #pragma GCC diagnostic ignored "-Wuninitialized" 41569 foo(b); /* no diagnostic for this one */ 41570 #pragma GCC diagnostic pop 41571 foo(c); /* error is given for this one */ 41572 #pragma GCC diagnostic pop 41573 foo(d); /* depends on command-line options */ 41574 41575 41576 GCC also offers a simple mechanism for printing messages during 41577compilation. 41578 41579`#pragma message STRING' 41580 Prints STRING as a compiler message on compilation. The message 41581 is informational only, and is neither a compilation warning nor an 41582 error. 41583 41584 #pragma message "Compiling " __FILE__ "..." 41585 41586 STRING may be parenthesized, and is printed with location 41587 information. For example, 41588 41589 #define DO_PRAGMA(x) _Pragma (#x) 41590 #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) 41591 41592 TODO(Remember to fix this) 41593 41594 prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to 41595 fix this'. 41596 41597 41598 41599File: gcc.info, Node: Visibility Pragmas, Next: Push/Pop Macro Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 41600 416016.60.11 Visibility Pragmas 41602-------------------------- 41603 41604`#pragma GCC visibility push(VISIBILITY)' 41605`#pragma GCC visibility pop' 41606 This pragma allows the user to set the visibility for multiple 41607 declarations without having to give each a visibility attribute 41608 (*note Function Attributes::). 41609 41610 In C++, `#pragma GCC visibility' affects only namespace-scope 41611 declarations. Class members and template specializations are not 41612 affected; if you want to override the visibility for a particular 41613 member or instantiation, you must use an attribute. 41614 41615 41616 41617File: gcc.info, Node: Push/Pop Macro Pragmas, Next: Function Specific Option Pragmas, Prev: Visibility Pragmas, Up: Pragmas 41618 416196.60.12 Push/Pop Macro Pragmas 41620------------------------------ 41621 41622For compatibility with Microsoft Windows compilers, GCC supports 41623`#pragma push_macro("MACRO_NAME")' and `#pragma 41624pop_macro("MACRO_NAME")'. 41625 41626`#pragma push_macro("MACRO_NAME")' 41627 This pragma saves the value of the macro named as MACRO_NAME to 41628 the top of the stack for this macro. 41629 41630`#pragma pop_macro("MACRO_NAME")' 41631 This pragma sets the value of the macro named as MACRO_NAME to the 41632 value on top of the stack for this macro. If the stack for 41633 MACRO_NAME is empty, the value of the macro remains unchanged. 41634 41635 For example: 41636 41637 #define X 1 41638 #pragma push_macro("X") 41639 #undef X 41640 #define X -1 41641 #pragma pop_macro("X") 41642 int x [X]; 41643 41644In this example, the definition of X as 1 is saved by `#pragma 41645push_macro' and restored by `#pragma pop_macro'. 41646 41647 41648File: gcc.info, Node: Function Specific Option Pragmas, Next: Loop-Specific Pragmas, Prev: Push/Pop Macro Pragmas, Up: Pragmas 41649 416506.60.13 Function Specific Option Pragmas 41651---------------------------------------- 41652 41653`#pragma GCC target ("STRING"...)' 41654 This pragma allows you to set target specific options for functions 41655 defined later in the source file. One or more strings can be 41656 specified. Each function that is defined after this point is as 41657 if `attribute((target("STRING")))' was specified for that 41658 function. The parenthesis around the options is optional. *Note 41659 Function Attributes::, for more information about the `target' 41660 attribute and the attribute syntax. 41661 41662 The `#pragma GCC target' pragma is presently implemented for x86, 41663 PowerPC, and Nios II targets only. 41664 41665`#pragma GCC optimize ("STRING"...)' 41666 This pragma allows you to set global optimization options for 41667 functions defined later in the source file. One or more strings 41668 can be specified. Each function that is defined after this point 41669 is as if `attribute((optimize("STRING")))' was specified for that 41670 function. The parenthesis around the options is optional. *Note 41671 Function Attributes::, for more information about the `optimize' 41672 attribute and the attribute syntax. 41673 41674`#pragma GCC push_options' 41675`#pragma GCC pop_options' 41676 These pragmas maintain a stack of the current target and 41677 optimization options. It is intended for include files where you 41678 temporarily want to switch to using a different `#pragma GCC 41679 target' or `#pragma GCC optimize' and then to pop back to the 41680 previous options. 41681 41682`#pragma GCC reset_options' 41683 This pragma clears the current `#pragma GCC target' and `#pragma 41684 GCC optimize' to use the default switches as specified on the 41685 command line. 41686 41687 41688File: gcc.info, Node: Loop-Specific Pragmas, Prev: Function Specific Option Pragmas, Up: Pragmas 41689 416906.60.14 Loop-Specific Pragmas 41691----------------------------- 41692 41693`#pragma GCC ivdep' 41694 41695 With this pragma, the programmer asserts that there are no loop-carried 41696dependencies which would prevent consecutive iterations of the 41697following loop from executing concurrently with SIMD (single 41698instruction multiple data) instructions. 41699 41700 For example, the compiler can only unconditionally vectorize the 41701following loop with the pragma: 41702 41703 void foo (int n, int *a, int *b, int *c) 41704 { 41705 int i, j; 41706 #pragma GCC ivdep 41707 for (i = 0; i < n; ++i) 41708 a[i] = b[i] + c[i]; 41709 } 41710 41711In this example, using the `restrict' qualifier had the same effect. In 41712the following example, that would not be possible. Assume k < -m or k 41713>= m. Only with the pragma, the compiler knows that it can 41714unconditionally vectorize the following loop: 41715 41716 void ignore_vec_dep (int *a, int k, int c, int m) 41717 { 41718 #pragma GCC ivdep 41719 for (int i = 0; i < m; i++) 41720 a[i] = a[i + k] * c; 41721 } 41722 41723 41724File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 41725 417266.61 Unnamed Structure and Union Fields 41727======================================= 41728 41729As permitted by ISO C11 and for compatibility with other compilers, GCC 41730allows you to define a structure or union that contains, as fields, 41731structures and unions without names. For example: 41732 41733 struct { 41734 int a; 41735 union { 41736 int b; 41737 float c; 41738 }; 41739 int d; 41740 } foo; 41741 41742In this example, you are able to access members of the unnamed union 41743with code like `foo.b'. Note that only unnamed structs and unions are 41744allowed, you may not have, for example, an unnamed `int'. 41745 41746 You must never create such structures that cause ambiguous field 41747definitions. For example, in this structure: 41748 41749 struct { 41750 int a; 41751 struct { 41752 int a; 41753 }; 41754 } foo; 41755 41756it is ambiguous which `a' is being referred to with `foo.a'. The 41757compiler gives errors for such constructs. 41758 41759 Unless `-fms-extensions' is used, the unnamed field must be a 41760structure or union definition without a tag (for example, `struct { int 41761a; };'). If `-fms-extensions' is used, the field may also be a 41762definition with a tag such as `struct foo { int a; };', a reference to 41763a previously defined structure or union such as `struct foo;', or a 41764reference to a `typedef' name for a previously defined structure or 41765union type. 41766 41767 The option `-fplan9-extensions' enables `-fms-extensions' as well as 41768two other extensions. First, a pointer to a structure is automatically 41769converted to a pointer to an anonymous field for assignments and 41770function calls. For example: 41771 41772 struct s1 { int a; }; 41773 struct s2 { struct s1; }; 41774 extern void f1 (struct s1 *); 41775 void f2 (struct s2 *p) { f1 (p); } 41776 41777In the call to `f1' inside `f2', the pointer `p' is converted into a 41778pointer to the anonymous field. 41779 41780 Second, when the type of an anonymous field is a `typedef' for a 41781`struct' or `union', code may refer to the field using the name of the 41782`typedef'. 41783 41784 typedef struct { int a; } s1; 41785 struct s2 { s1; }; 41786 s1 f1 (struct s2 *p) { return p->s1; } 41787 41788 These usages are only permitted when they are not ambiguous. 41789 41790 41791File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions 41792 417936.62 Thread-Local Storage 41794========================= 41795 41796Thread-local storage (TLS) is a mechanism by which variables are 41797allocated such that there is one instance of the variable per extant 41798thread. The runtime model GCC uses to implement this originates in the 41799IA-64 processor-specific ABI, but has since been migrated to other 41800processors as well. It requires significant support from the linker 41801(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 41802`libpthread.so'), so it is not available everywhere. 41803 41804 At the user level, the extension is visible with a new storage class 41805keyword: `__thread'. For example: 41806 41807 __thread int i; 41808 extern __thread struct state s; 41809 static __thread char *p; 41810 41811 The `__thread' specifier may be used alone, with the `extern' or 41812`static' specifiers, but with no other storage class specifier. When 41813used with `extern' or `static', `__thread' must appear immediately 41814after the other storage class specifier. 41815 41816 The `__thread' specifier may be applied to any global, file-scoped 41817static, function-scoped static, or static data member of a class. It 41818may not be applied to block-scoped automatic or non-static data member. 41819 41820 When the address-of operator is applied to a thread-local variable, it 41821is evaluated at run time and returns the address of the current thread's 41822instance of that variable. An address so obtained may be used by any 41823thread. When a thread terminates, any pointers to thread-local 41824variables in that thread become invalid. 41825 41826 No static initialization may refer to the address of a thread-local 41827variable. 41828 41829 In C++, if an initializer is present for a thread-local variable, it 41830must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 41831standard. 41832 41833 See ELF Handling For Thread-Local Storage 41834(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of 41835the four thread-local storage addressing models, and how the runtime is 41836expected to function. 41837 41838* Menu: 41839 41840* C99 Thread-Local Edits:: 41841* C++98 Thread-Local Edits:: 41842 41843 41844File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 41845 418466.62.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 41847------------------------------------------------------- 41848 41849The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 41850document the exact semantics of the language extension. 41851 41852 * `5.1.2 Execution environments' 41853 41854 Add new text after paragraph 1 41855 41856 Within either execution environment, a "thread" is a flow of 41857 control within a program. It is implementation defined 41858 whether or not there may be more than one thread associated 41859 with a program. It is implementation defined how threads 41860 beyond the first are created, the name and type of the 41861 function called at thread startup, and how threads may be 41862 terminated. However, objects with thread storage duration 41863 shall be initialized before thread startup. 41864 41865 * `6.2.4 Storage durations of objects' 41866 41867 Add new text before paragraph 3 41868 41869 An object whose identifier is declared with the storage-class 41870 specifier `__thread' has "thread storage duration". Its 41871 lifetime is the entire execution of the thread, and its 41872 stored value is initialized only once, prior to thread 41873 startup. 41874 41875 * `6.4.1 Keywords' 41876 41877 Add `__thread'. 41878 41879 * `6.7.1 Storage-class specifiers' 41880 41881 Add `__thread' to the list of storage class specifiers in 41882 paragraph 1. 41883 41884 Change paragraph 2 to 41885 41886 With the exception of `__thread', at most one storage-class 41887 specifier may be given [...]. The `__thread' specifier may 41888 be used alone, or immediately following `extern' or `static'. 41889 41890 Add new text after paragraph 6 41891 41892 The declaration of an identifier for a variable that has 41893 block scope that specifies `__thread' shall also specify 41894 either `extern' or `static'. 41895 41896 The `__thread' specifier shall be used only with variables. 41897 41898 41899File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 41900 419016.62.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 41902-------------------------------------------------------- 41903 41904The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 41905that document the exact semantics of the language extension. 41906 41907 * [intro.execution] 41908 41909 New text after paragraph 4 41910 41911 A "thread" is a flow of control within the abstract machine. 41912 It is implementation defined whether or not there may be more 41913 than one thread. 41914 41915 New text after paragraph 7 41916 41917 It is unspecified whether additional action must be taken to 41918 ensure when and whether side effects are visible to other 41919 threads. 41920 41921 * [lex.key] 41922 41923 Add `__thread'. 41924 41925 * [basic.start.main] 41926 41927 Add after paragraph 5 41928 41929 The thread that begins execution at the `main' function is 41930 called the "main thread". It is implementation defined how 41931 functions beginning threads other than the main thread are 41932 designated or typed. A function so designated, as well as 41933 the `main' function, is called a "thread startup function". 41934 It is implementation defined what happens if a thread startup 41935 function returns. It is implementation defined what happens 41936 to other threads when any thread calls `exit'. 41937 41938 * [basic.start.init] 41939 41940 Add after paragraph 4 41941 41942 The storage for an object of thread storage duration shall be 41943 statically initialized before the first statement of the 41944 thread startup function. An object of thread storage 41945 duration shall not require dynamic initialization. 41946 41947 * [basic.start.term] 41948 41949 Add after paragraph 3 41950 41951 The type of an object with thread storage duration shall not 41952 have a non-trivial destructor, nor shall it be an array type 41953 whose elements (directly or indirectly) have non-trivial 41954 destructors. 41955 41956 * [basic.stc] 41957 41958 Add "thread storage duration" to the list in paragraph 1. 41959 41960 Change paragraph 2 41961 41962 Thread, static, and automatic storage durations are 41963 associated with objects introduced by declarations [...]. 41964 41965 Add `__thread' to the list of specifiers in paragraph 3. 41966 41967 * [basic.stc.thread] 41968 41969 New section before [basic.stc.static] 41970 41971 The keyword `__thread' applied to a non-local object gives the 41972 object thread storage duration. 41973 41974 A local variable or class data member declared both `static' 41975 and `__thread' gives the variable or member thread storage 41976 duration. 41977 41978 * [basic.stc.static] 41979 41980 Change paragraph 1 41981 41982 All objects that have neither thread storage duration, dynamic 41983 storage duration nor are local [...]. 41984 41985 * [dcl.stc] 41986 41987 Add `__thread' to the list in paragraph 1. 41988 41989 Change paragraph 1 41990 41991 With the exception of `__thread', at most one 41992 STORAGE-CLASS-SPECIFIER shall appear in a given 41993 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 41994 alone, or immediately following the `extern' or `static' 41995 specifiers. [...] 41996 41997 Add after paragraph 5 41998 41999 The `__thread' specifier can be applied only to the names of 42000 objects and to anonymous unions. 42001 42002 * [class.mem] 42003 42004 Add after paragraph 6 42005 42006 Non-`static' members shall not be `__thread'. 42007 42008 42009File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions 42010 420116.63 Binary Constants using the `0b' Prefix 42012=========================================== 42013 42014Integer constants can be written as binary constants, consisting of a 42015sequence of `0' and `1' digits, prefixed by `0b' or `0B'. This is 42016particularly useful in environments that operate a lot on the bit level 42017(like microcontrollers). 42018 42019 The following statements are identical: 42020 42021 i = 42; 42022 i = 0x2a; 42023 i = 052; 42024 i = 0b101010; 42025 42026 The type of these constants follows the same rules as for octal or 42027hexadecimal integer constants, so suffixes like `L' or `UL' can be 42028applied. 42029 42030 42031File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top 42032 420337 Extensions to the C++ Language 42034******************************** 42035 42036The GNU compiler provides these extensions to the C++ language (and you 42037can also use most of the C language extensions in your C++ programs). 42038If you want to write code that checks whether these features are 42039available, you can test for the GNU compiler the same way as for C 42040programs: check for a predefined macro `__GNUC__'. You can also use 42041`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 42042(cpp)Common Predefined Macros.). 42043 42044* Menu: 42045 42046* C++ Volatiles:: What constitutes an access to a volatile object. 42047* Restricted Pointers:: C99 restricted pointers and references. 42048* Vague Linkage:: Where G++ puts inlines, vtables and such. 42049* C++ Interface:: You can use a single C++ header file for both 42050 declarations and definitions. 42051* Template Instantiation:: Methods for ensuring that exactly one copy of 42052 each needed template instantiation is emitted. 42053* Bound member functions:: You can extract a function pointer to the 42054 method denoted by a `->*' or `.*' expression. 42055* C++ Attributes:: Variable, function, and type attributes for C++ only. 42056* Function Multiversioning:: Declaring multiple function versions. 42057* Namespace Association:: Strong using-directives for namespace association. 42058* Type Traits:: Compiler support for type traits 42059* Java Exceptions:: Tweaking exception handling to work with Java. 42060* Deprecated Features:: Things will disappear from G++. 42061* Backwards Compatibility:: Compatibilities with earlier definitions of C++. 42062 42063 42064File: gcc.info, Node: C++ Volatiles, Next: Restricted Pointers, Up: C++ Extensions 42065 420667.1 When is a Volatile C++ Object Accessed? 42067=========================================== 42068 42069The C++ standard differs from the C standard in its treatment of 42070volatile objects. It fails to specify what constitutes a volatile 42071access, except to say that C++ should behave in a similar manner to C 42072with respect to volatiles, where possible. However, the different 42073lvalueness of expressions between C and C++ complicate the behavior. 42074G++ behaves the same as GCC for volatile access, *Note Volatiles: C 42075Extensions, for a description of GCC's behavior. 42076 42077 The C and C++ language specifications differ when an object is 42078accessed in a void context: 42079 42080 volatile int *src = SOMEVALUE; 42081 *src; 42082 42083 The C++ standard specifies that such expressions do not undergo lvalue 42084to rvalue conversion, and that the type of the dereferenced object may 42085be incomplete. The C++ standard does not specify explicitly that it is 42086lvalue to rvalue conversion that is responsible for causing an access. 42087There is reason to believe that it is, because otherwise certain simple 42088expressions become undefined. However, because it would surprise most 42089programmers, G++ treats dereferencing a pointer to volatile object of 42090complete type as GCC would do for an equivalent type in C. When the 42091object has incomplete type, G++ issues a warning; if you wish to force 42092an error, you must force a conversion to rvalue with, for instance, a 42093static cast. 42094 42095 When using a reference to volatile, G++ does not treat equivalent 42096expressions as accesses to volatiles, but instead issues a warning that 42097no volatile is accessed. The rationale for this is that otherwise it 42098becomes difficult to determine where volatile access occur, and not 42099possible to ignore the return value from functions returning volatile 42100references. Again, if you wish to force a read, cast the reference to 42101an rvalue. 42102 42103 G++ implements the same behavior as GCC does when assigning to a 42104volatile object--there is no reread of the assigned-to object, the 42105assigned rvalue is reused. Note that in C++ assignment expressions are 42106lvalues, and if used as an lvalue, the volatile object is referred to. 42107For instance, VREF refers to VOBJ, as expected, in the following 42108example: 42109 42110 volatile int vobj; 42111 volatile int &vref = vobj = SOMETHING; 42112 42113 42114File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: C++ Volatiles, Up: C++ Extensions 42115 421167.2 Restricting Pointer Aliasing 42117================================ 42118 42119As with the C front end, G++ understands the C99 feature of restricted 42120pointers, specified with the `__restrict__', or `__restrict' type 42121qualifier. Because you cannot compile C++ by specifying the `-std=c99' 42122language flag, `restrict' is not a keyword in C++. 42123 42124 In addition to allowing restricted pointers, you can specify restricted 42125references, which indicate that the reference is not aliased in the 42126local context. 42127 42128 void fn (int *__restrict__ rptr, int &__restrict__ rref) 42129 { 42130 /* ... */ 42131 } 42132 42133In the body of `fn', RPTR points to an unaliased integer and RREF 42134refers to a (different) unaliased integer. 42135 42136 You may also specify whether a member function's THIS pointer is 42137unaliased by using `__restrict__' as a member function qualifier. 42138 42139 void T::fn () __restrict__ 42140 { 42141 /* ... */ 42142 } 42143 42144Within the body of `T::fn', THIS has the effective definition `T 42145*__restrict__ const this'. Notice that the interpretation of a 42146`__restrict__' member function qualifier is different to that of 42147`const' or `volatile' qualifier, in that it is applied to the pointer 42148rather than the object. This is consistent with other compilers that 42149implement restricted pointers. 42150 42151 As with all outermost parameter qualifiers, `__restrict__' is ignored 42152in function definition matching. This means you only need to specify 42153`__restrict__' in a function definition, rather than in a function 42154prototype as well. 42155 42156 42157File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 42158 421597.3 Vague Linkage 42160================= 42161 42162There are several constructs in C++ that require space in the object 42163file but are not clearly tied to a single translation unit. We say that 42164these constructs have "vague linkage". Typically such constructs are 42165emitted wherever they are needed, though sometimes we can be more 42166clever. 42167 42168Inline Functions 42169 Inline functions are typically defined in a header file which can 42170 be included in many different compilations. Hopefully they can 42171 usually be inlined, but sometimes an out-of-line copy is 42172 necessary, if the address of the function is taken or if inlining 42173 fails. In general, we emit an out-of-line copy in all translation 42174 units where one is needed. As an exception, we only emit inline 42175 virtual functions with the vtable, since it always requires a copy. 42176 42177 Local static variables and string constants used in an inline 42178 function are also considered to have vague linkage, since they 42179 must be shared between all inlined and out-of-line instances of 42180 the function. 42181 42182VTables 42183 C++ virtual functions are implemented in most compilers using a 42184 lookup table, known as a vtable. The vtable contains pointers to 42185 the virtual functions provided by a class, and each object of the 42186 class contains a pointer to its vtable (or vtables, in some 42187 multiple-inheritance situations). If the class declares any 42188 non-inline, non-pure virtual functions, the first one is chosen as 42189 the "key method" for the class, and the vtable is only emitted in 42190 the translation unit where the key method is defined. 42191 42192 _Note:_ If the chosen key method is later defined as inline, the 42193 vtable is still emitted in every translation unit that defines it. 42194 Make sure that any inline virtuals are declared inline in the class 42195 body, even if they are not defined there. 42196 42197`type_info' objects 42198 C++ requires information about types to be written out in order to 42199 implement `dynamic_cast', `typeid' and exception handling. For 42200 polymorphic classes (classes with virtual functions), the 42201 `type_info' object is written out along with the vtable so that 42202 `dynamic_cast' can determine the dynamic type of a class object at 42203 run time. For all other types, we write out the `type_info' 42204 object when it is used: when applying `typeid' to an expression, 42205 throwing an object, or referring to a type in a catch clause or 42206 exception specification. 42207 42208Template Instantiations 42209 Most everything in this section also applies to template 42210 instantiations, but there are other options as well. *Note 42211 Where's the Template?: Template Instantiation. 42212 42213 42214 When used with GNU ld version 2.8 or later on an ELF system such as 42215GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 42216these constructs will be discarded at link time. This is known as 42217COMDAT support. 42218 42219 On targets that don't support COMDAT, but do support weak symbols, GCC 42220uses them. This way one copy overrides all the others, but the unused 42221copies still take up space in the executable. 42222 42223 For targets that do not support either COMDAT or weak symbols, most 42224entities with vague linkage are emitted as local symbols to avoid 42225duplicate definition errors from the linker. This does not happen for 42226local statics in inlines, however, as having multiple copies almost 42227certainly breaks things. 42228 42229 *Note Declarations and Definitions in One Header: C++ Interface, for 42230another way to control placement of these constructs. 42231 42232 42233File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 42234 422357.4 C++ Interface and Implementation Pragmas 42236============================================ 42237 42238`#pragma interface' and `#pragma implementation' provide the user with 42239a way of explicitly directing the compiler to emit entities with vague 42240linkage (and debugging information) in a particular translation unit. 42241 42242 _Note:_ These `#pragma's have been superceded as of GCC 2.7.2 by 42243COMDAT support and the "key method" heuristic mentioned in *Note Vague 42244Linkage::. Using them can actually cause your program to grow due to 42245unnecessary out-of-line copies of inline functions. 42246 42247`#pragma interface' 42248`#pragma interface "SUBDIR/OBJECTS.h"' 42249 Use this directive in _header files_ that define object classes, 42250 to save space in most of the object files that use those classes. 42251 Normally, local copies of certain information (backup copies of 42252 inline member functions, debugging information, and the internal 42253 tables that implement virtual functions) must be kept in each 42254 object file that includes class definitions. You can use this 42255 pragma to avoid such duplication. When a header file containing 42256 `#pragma interface' is included in a compilation, this auxiliary 42257 information is not generated (unless the main input source file 42258 itself uses `#pragma implementation'). Instead, the object files 42259 contain references to be resolved at link time. 42260 42261 The second form of this directive is useful for the case where you 42262 have multiple headers with the same name in different directories. 42263 If you use this form, you must specify the same string to `#pragma 42264 implementation'. 42265 42266`#pragma implementation' 42267`#pragma implementation "OBJECTS.h"' 42268 Use this pragma in a _main input file_, when you want full output 42269 from included header files to be generated (and made globally 42270 visible). The included header file, in turn, should use `#pragma 42271 interface'. Backup copies of inline member functions, debugging 42272 information, and the internal tables used to implement virtual 42273 functions are all generated in implementation files. 42274 42275 If you use `#pragma implementation' with no argument, it applies to 42276 an include file with the same basename(1) as your source file. 42277 For example, in `allclass.cc', giving just `#pragma implementation' 42278 by itself is equivalent to `#pragma implementation "allclass.h"'. 42279 42280 Use the string argument if you want a single implementation file to 42281 include code from multiple header files. (You must also use 42282 `#include' to include the header file; `#pragma implementation' 42283 only specifies how to use the file--it doesn't actually include 42284 it.) 42285 42286 There is no way to split up the contents of a single header file 42287 into multiple implementation files. 42288 42289 `#pragma implementation' and `#pragma interface' also have an effect 42290on function inlining. 42291 42292 If you define a class in a header file marked with `#pragma 42293interface', the effect on an inline function defined in that class is 42294similar to an explicit `extern' declaration--the compiler emits no code 42295at all to define an independent version of the function. Its 42296definition is used only for inlining with its callers. 42297 42298 Conversely, when you include the same header file in a main source file 42299that declares it as `#pragma implementation', the compiler emits code 42300for the function itself; this defines a version of the function that 42301can be found via pointers (or by callers compiled without inlining). 42302If all calls to the function can be inlined, you can avoid emitting the 42303function by compiling with `-fno-implement-inlines'. If any calls are 42304not inlined, you will get linker errors. 42305 42306 ---------- Footnotes ---------- 42307 42308 (1) A file's "basename" is the name stripped of all leading path 42309information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 42310 42311 42312File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 42313 423147.5 Where's the Template? 42315========================= 42316 42317C++ templates are the first language feature to require more 42318intelligence from the environment than one usually finds on a UNIX 42319system. Somehow the compiler and linker have to make sure that each 42320template instance occurs exactly once in the executable if it is needed, 42321and not at all otherwise. There are two basic approaches to this 42322problem, which are referred to as the Borland model and the Cfront 42323model. 42324 42325Borland model 42326 Borland C++ solved the template instantiation problem by adding 42327 the code equivalent of common blocks to their linker; the compiler 42328 emits template instances in each translation unit that uses them, 42329 and the linker collapses them together. The advantage of this 42330 model is that the linker only has to consider the object files 42331 themselves; there is no external complexity to worry about. This 42332 disadvantage is that compilation time is increased because the 42333 template code is being compiled repeatedly. Code written for this 42334 model tends to include definitions of all templates in the header 42335 file, since they must be seen to be instantiated. 42336 42337Cfront model 42338 The AT&T C++ translator, Cfront, solved the template instantiation 42339 problem by creating the notion of a template repository, an 42340 automatically maintained place where template instances are 42341 stored. A more modern version of the repository works as follows: 42342 As individual object files are built, the compiler places any 42343 template definitions and instantiations encountered in the 42344 repository. At link time, the link wrapper adds in the objects in 42345 the repository and compiles any needed instances that were not 42346 previously emitted. The advantages of this model are more optimal 42347 compilation speed and the ability to use the system linker; to 42348 implement the Borland model a compiler vendor also needs to 42349 replace the linker. The disadvantages are vastly increased 42350 complexity, and thus potential for error; for some code this can be 42351 just as transparent, but in practice it can been very difficult to 42352 build multiple programs in one directory and one program in 42353 multiple directories. Code written for this model tends to 42354 separate definitions of non-inline member templates into a 42355 separate file, which should be compiled separately. 42356 42357 When used with GNU ld version 2.8 or later on an ELF system such as 42358GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 42359Borland model. On other systems, G++ implements neither automatic 42360model. 42361 42362 You have the following options for dealing with template 42363instantiations: 42364 42365 1. Compile your template-using code with `-frepo'. The compiler 42366 generates files with the extension `.rpo' listing all of the 42367 template instantiations used in the corresponding object files that 42368 could be instantiated there; the link wrapper, `collect2', then 42369 updates the `.rpo' files to tell the compiler where to place those 42370 instantiations and rebuild any affected object files. The 42371 link-time overhead is negligible after the first pass, as the 42372 compiler continues to place the instantiations in the same files. 42373 42374 This is your best option for application code written for the 42375 Borland model, as it just works. Code written for the Cfront model 42376 needs to be modified so that the template definitions are 42377 available at one or more points of instantiation; usually this is 42378 as simple as adding `#include <tmethods.cc>' to the end of each 42379 template header. 42380 42381 For library code, if you want the library to provide all of the 42382 template instantiations it needs, just try to link all of its 42383 object files together; the link will fail, but cause the 42384 instantiations to be generated as a side effect. Be warned, 42385 however, that this may cause conflicts if multiple libraries try 42386 to provide the same instantiations. For greater control, use 42387 explicit instantiation as described in the next option. 42388 42389 2. Compile your code with `-fno-implicit-templates' to disable the 42390 implicit generation of template instances, and explicitly 42391 instantiate all the ones you use. This approach requires more 42392 knowledge of exactly which instances you need than do the others, 42393 but it's less mysterious and allows greater control. You can 42394 scatter the explicit instantiations throughout your program, 42395 perhaps putting them in the translation units where the instances 42396 are used or the translation units that define the templates 42397 themselves; you can put all of the explicit instantiations you 42398 need into one big file; or you can create small files like 42399 42400 #include "Foo.h" 42401 #include "Foo.cc" 42402 42403 template class Foo<int>; 42404 template ostream& operator << 42405 (ostream&, const Foo<int>&); 42406 42407 for each of the instances you need, and create a template 42408 instantiation library from those. 42409 42410 If you are using Cfront-model code, you can probably get away with 42411 not using `-fno-implicit-templates' when compiling files that don't 42412 `#include' the member template definitions. 42413 42414 If you use one big file to do the instantiations, you may want to 42415 compile it without `-fno-implicit-templates' so you get all of the 42416 instances required by your explicit instantiations (but not by any 42417 other files) without having to specify them as well. 42418 42419 The ISO C++ 2011 standard allows forward declaration of explicit 42420 instantiations (with `extern'). G++ supports explicit instantiation 42421 declarations in C++98 mode and has extended the template 42422 instantiation syntax to support instantiation of the compiler 42423 support data for a template class (i.e. the vtable) without 42424 instantiating any of its members (with `inline'), and 42425 instantiation of only the static data members of a template class, 42426 without the support data or member functions (with `static'): 42427 42428 extern template int max (int, int); 42429 inline template class Foo<int>; 42430 static template class Foo<int>; 42431 42432 3. Do nothing. Pretend G++ does implement automatic instantiation 42433 management. Code written for the Borland model works fine, but 42434 each translation unit contains instances of each of the templates 42435 it uses. In a large program, this can lead to an unacceptable 42436 amount of code duplication. 42437 42438 42439File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 42440 424417.6 Extracting the Function Pointer from a Bound Pointer to Member Function 42442=========================================================================== 42443 42444In C++, pointer to member functions (PMFs) are implemented using a wide 42445pointer of sorts to handle all the possible call mechanisms; the PMF 42446needs to store information about how to adjust the `this' pointer, and 42447if the function pointed to is virtual, where to find the vtable, and 42448where in the vtable to look for the member function. If you are using 42449PMFs in an inner loop, you should really reconsider that decision. If 42450that is not an option, you can extract the pointer to the function that 42451would be called for a given object/PMF pair and call it directly inside 42452the inner loop, to save a bit of time. 42453 42454 Note that you still pay the penalty for the call through a function 42455pointer; on most modern architectures, such a call defeats the branch 42456prediction features of the CPU. This is also true of normal virtual 42457function calls. 42458 42459 The syntax for this extension is 42460 42461 extern A a; 42462 extern int (A::*fp)(); 42463 typedef int (*fptr)(A *); 42464 42465 fptr p = (fptr)(a.*fp); 42466 42467 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 42468object is needed to obtain the address of the function. They can be 42469converted to function pointers directly: 42470 42471 fptr p1 = (fptr)(&A::foo); 42472 42473 You must specify `-Wno-pmf-conversions' to use this extension. 42474 42475 42476File: gcc.info, Node: C++ Attributes, Next: Function Multiversioning, Prev: Bound member functions, Up: C++ Extensions 42477 424787.7 C++-Specific Variable, Function, and Type Attributes 42479======================================================== 42480 42481Some attributes only make sense for C++ programs. 42482 42483`abi_tag ("TAG", ...)' 42484 The `abi_tag' attribute can be applied to a function, variable, or 42485 class declaration. It modifies the mangled name of the entity to 42486 incorporate the tag name, in order to distinguish the function or 42487 class from an earlier version with a different ABI; perhaps the 42488 class has changed size, or the function has a different return 42489 type that is not encoded in the mangled name. 42490 42491 The attribute can also be applied to an inline namespace, but does 42492 not affect the mangled name of the namespace; in this case it is 42493 only used for `-Wabi-tag' warnings and automatic tagging of 42494 functions and variables. Tagging inline namespaces is generally 42495 preferable to tagging individual declarations, but the latter is 42496 sometimes necessary, such as when only certain members of a class 42497 need to be tagged. 42498 42499 The argument can be a list of strings of arbitrary length. The 42500 strings are sorted on output, so the order of the list is 42501 unimportant. 42502 42503 A redeclaration of an entity must not add new ABI tags, since 42504 doing so would change the mangled name. 42505 42506 The ABI tags apply to a name, so all instantiations and 42507 specializations of a template have the same tags. The attribute 42508 will be ignored if applied to an explicit specialization or 42509 instantiation. 42510 42511 The `-Wabi-tag' flag enables a warning about a class which does 42512 not have all the ABI tags used by its subobjects and virtual 42513 functions; for users with code that needs to coexist with an 42514 earlier ABI, using this option can help to find all affected types 42515 that need to be tagged. 42516 42517 When a type involving an ABI tag is used as the type of a variable 42518 or return type of a function where that tag is not already present 42519 in the signature of the function, the tag is automatically applied 42520 to the variable or function. `-Wabi-tag' also warns about this 42521 situation; this warning can be avoided by explicitly tagging the 42522 variable or function or moving it into a tagged inline namespace. 42523 42524`init_priority (PRIORITY)' 42525 In Standard C++, objects defined at namespace scope are guaranteed 42526 to be initialized in an order in strict accordance with that of 42527 their definitions _in a given translation unit_. No guarantee is 42528 made for initializations across translation units. However, GNU 42529 C++ allows users to control the order of initialization of objects 42530 defined at namespace scope with the `init_priority' attribute by 42531 specifying a relative PRIORITY, a constant integral expression 42532 currently bounded between 101 and 65535 inclusive. Lower numbers 42533 indicate a higher priority. 42534 42535 In the following example, `A' would normally be created before 42536 `B', but the `init_priority' attribute reverses that order: 42537 42538 Some_Class A __attribute__ ((init_priority (2000))); 42539 Some_Class B __attribute__ ((init_priority (543))); 42540 42541 Note that the particular values of PRIORITY do not matter; only 42542 their relative ordering. 42543 42544`java_interface' 42545 This type attribute informs C++ that the class is a Java 42546 interface. It may only be applied to classes declared within an 42547 `extern "Java"' block. Calls to methods declared in this 42548 interface are dispatched using GCJ's interface table mechanism, 42549 instead of regular virtual table dispatch. 42550 42551`warn_unused' 42552 For C++ types with non-trivial constructors and/or destructors it 42553 is impossible for the compiler to determine whether a variable of 42554 this type is truly unused if it is not referenced. This type 42555 attribute informs the compiler that variables of this type should 42556 be warned about if they appear to be unused, just like variables 42557 of fundamental types. 42558 42559 This attribute is appropriate for types which just represent a 42560 value, such as `std::string'; it is not appropriate for types which 42561 control a resource, such as `std::mutex'. 42562 42563 This attribute is also accepted in C, but it is unnecessary 42564 because C does not have constructors or destructors. 42565 42566 42567 See also *Note Namespace Association::. 42568 42569 42570File: gcc.info, Node: Function Multiversioning, Next: Namespace Association, Prev: C++ Attributes, Up: C++ Extensions 42571 425727.8 Function Multiversioning 42573============================ 42574 42575With the GNU C++ front end, for x86 targets, you may specify multiple 42576versions of a function, where each function is specialized for a 42577specific target feature. At runtime, the appropriate version of the 42578function is automatically executed depending on the characteristics of 42579the execution platform. Here is an example. 42580 42581 __attribute__ ((target ("default"))) 42582 int foo () 42583 { 42584 // The default version of foo. 42585 return 0; 42586 } 42587 42588 __attribute__ ((target ("sse4.2"))) 42589 int foo () 42590 { 42591 // foo version for SSE4.2 42592 return 1; 42593 } 42594 42595 __attribute__ ((target ("arch=atom"))) 42596 int foo () 42597 { 42598 // foo version for the Intel ATOM processor 42599 return 2; 42600 } 42601 42602 __attribute__ ((target ("arch=amdfam10"))) 42603 int foo () 42604 { 42605 // foo version for the AMD Family 0x10 processors. 42606 return 3; 42607 } 42608 42609 int main () 42610 { 42611 int (*p)() = &foo; 42612 assert ((*p) () == foo ()); 42613 return 0; 42614 } 42615 42616 In the above example, four versions of function foo are created. The 42617first version of foo with the target attribute "default" is the default 42618version. This version gets executed when no other target specific 42619version qualifies for execution on a particular platform. A new version 42620of foo is created by using the same function signature but with a 42621different target string. Function foo is called or a pointer to it is 42622taken just like a regular function. GCC takes care of doing the 42623dispatching to call the right version at runtime. Refer to the GCC 42624wiki on Function Multiversioning 42625(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details. 42626 42627 42628File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: Function Multiversioning, Up: C++ Extensions 42629 426307.9 Namespace Association 42631========================= 42632 42633*Caution:* The semantics of this extension are equivalent to C++ 2011 42634inline namespaces. Users should use inline namespaces instead as this 42635extension will be removed in future versions of G++. 42636 42637 A using-directive with `__attribute ((strong))' is stronger than a 42638normal using-directive in two ways: 42639 42640 * Templates from the used namespace can be specialized and explicitly 42641 instantiated as though they were members of the using namespace. 42642 42643 * The using namespace is considered an associated namespace of all 42644 templates in the used namespace for purposes of argument-dependent 42645 name lookup. 42646 42647 The used namespace must be nested within the using namespace so that 42648normal unqualified lookup works properly. 42649 42650 This is useful for composing a namespace transparently from 42651implementation namespaces. For example: 42652 42653 namespace std { 42654 namespace debug { 42655 template <class T> struct A { }; 42656 } 42657 using namespace debug __attribute ((__strong__)); 42658 template <> struct A<int> { }; // OK to specialize 42659 42660 template <class T> void f (A<T>); 42661 } 42662 42663 int main() 42664 { 42665 f (std::A<float>()); // lookup finds std::f 42666 f (std::A<int>()); 42667 } 42668 42669 42670File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions 42671 426727.10 Type Traits 42673================ 42674 42675The C++ front end implements syntactic extensions that allow 42676compile-time determination of various characteristics of a type (or of a 42677pair of types). 42678 42679`__has_nothrow_assign (type)' 42680 If `type' is const qualified or is a reference type then the trait 42681 is false. Otherwise if `__has_trivial_assign (type)' is true then 42682 the trait is true, else if `type' is a cv class or union type with 42683 copy assignment operators that are known not to throw an exception 42684 then the trait is true, else it is false. Requires: `type' shall 42685 be a complete type, (possibly cv-qualified) `void', or an array of 42686 unknown bound. 42687 42688`__has_nothrow_copy (type)' 42689 If `__has_trivial_copy (type)' is true then the trait is true, 42690 else if `type' is a cv class or union type with copy constructors 42691 that are known not to throw an exception then the trait is true, 42692 else it is false. Requires: `type' shall be a complete type, 42693 (possibly cv-qualified) `void', or an array of unknown bound. 42694 42695`__has_nothrow_constructor (type)' 42696 If `__has_trivial_constructor (type)' is true then the trait is 42697 true, else if `type' is a cv class or union type (or array 42698 thereof) with a default constructor that is known not to throw an 42699 exception then the trait is true, else it is false. Requires: 42700 `type' shall be a complete type, (possibly cv-qualified) `void', 42701 or an array of unknown bound. 42702 42703`__has_trivial_assign (type)' 42704 If `type' is const qualified or is a reference type then the trait 42705 is false. Otherwise if `__is_pod (type)' is true then the trait is 42706 true, else if `type' is a cv class or union type with a trivial 42707 copy assignment ([class.copy]) then the trait is true, else it is 42708 false. Requires: `type' shall be a complete type, (possibly 42709 cv-qualified) `void', or an array of unknown bound. 42710 42711`__has_trivial_copy (type)' 42712 If `__is_pod (type)' is true or `type' is a reference type then 42713 the trait is true, else if `type' is a cv class or union type with 42714 a trivial copy constructor ([class.copy]) then the trait is true, 42715 else it is false. Requires: `type' shall be a complete type, 42716 (possibly cv-qualified) `void', or an array of unknown bound. 42717 42718`__has_trivial_constructor (type)' 42719 If `__is_pod (type)' is true then the trait is true, else if 42720 `type' is a cv class or union type (or array thereof) with a 42721 trivial default constructor ([class.ctor]) then the trait is true, 42722 else it is false. Requires: `type' shall be a complete type, 42723 (possibly cv-qualified) `void', or an array of unknown bound. 42724 42725`__has_trivial_destructor (type)' 42726 If `__is_pod (type)' is true or `type' is a reference type then 42727 the trait is true, else if `type' is a cv class or union type (or 42728 array thereof) with a trivial destructor ([class.dtor]) then the 42729 trait is true, else it is false. Requires: `type' shall be a 42730 complete type, (possibly cv-qualified) `void', or an array of 42731 unknown bound. 42732 42733`__has_virtual_destructor (type)' 42734 If `type' is a class type with a virtual destructor ([class.dtor]) 42735 then the trait is true, else it is false. Requires: `type' shall 42736 be a complete type, (possibly cv-qualified) `void', or an array of 42737 unknown bound. 42738 42739`__is_abstract (type)' 42740 If `type' is an abstract class ([class.abstract]) then the trait 42741 is true, else it is false. Requires: `type' shall be a complete 42742 type, (possibly cv-qualified) `void', or an array of unknown bound. 42743 42744`__is_base_of (base_type, derived_type)' 42745 If `base_type' is a base class of `derived_type' ([class.derived]) 42746 then the trait is true, otherwise it is false. Top-level cv 42747 qualifications of `base_type' and `derived_type' are ignored. For 42748 the purposes of this trait, a class type is considered is own 42749 base. Requires: if `__is_class (base_type)' and `__is_class 42750 (derived_type)' are true and `base_type' and `derived_type' are 42751 not the same type (disregarding cv-qualifiers), `derived_type' 42752 shall be a complete type. Diagnostic is produced if this 42753 requirement is not met. 42754 42755`__is_class (type)' 42756 If `type' is a cv class type, and not a union type 42757 ([basic.compound]) the trait is true, else it is false. 42758 42759`__is_empty (type)' 42760 If `__is_class (type)' is false then the trait is false. 42761 Otherwise `type' is considered empty if and only if: `type' has no 42762 non-static data members, or all non-static data members, if any, 42763 are bit-fields of length 0, and `type' has no virtual members, and 42764 `type' has no virtual base classes, and `type' has no base classes 42765 `base_type' for which `__is_empty (base_type)' is false. 42766 Requires: `type' shall be a complete type, (possibly cv-qualified) 42767 `void', or an array of unknown bound. 42768 42769`__is_enum (type)' 42770 If `type' is a cv enumeration type ([basic.compound]) the trait is 42771 true, else it is false. 42772 42773`__is_literal_type (type)' 42774 If `type' is a literal type ([basic.types]) the trait is true, 42775 else it is false. Requires: `type' shall be a complete type, 42776 (possibly cv-qualified) `void', or an array of unknown bound. 42777 42778`__is_pod (type)' 42779 If `type' is a cv POD type ([basic.types]) then the trait is true, 42780 else it is false. Requires: `type' shall be a complete type, 42781 (possibly cv-qualified) `void', or an array of unknown bound. 42782 42783`__is_polymorphic (type)' 42784 If `type' is a polymorphic class ([class.virtual]) then the trait 42785 is true, else it is false. Requires: `type' shall be a complete 42786 type, (possibly cv-qualified) `void', or an array of unknown bound. 42787 42788`__is_standard_layout (type)' 42789 If `type' is a standard-layout type ([basic.types]) the trait is 42790 true, else it is false. Requires: `type' shall be a complete 42791 type, (possibly cv-qualified) `void', or an array of unknown bound. 42792 42793`__is_trivial (type)' 42794 If `type' is a trivial type ([basic.types]) the trait is true, 42795 else it is false. Requires: `type' shall be a complete type, 42796 (possibly cv-qualified) `void', or an array of unknown bound. 42797 42798`__is_union (type)' 42799 If `type' is a cv union type ([basic.compound]) the trait is true, 42800 else it is false. 42801 42802`__underlying_type (type)' 42803 The underlying type of `type'. Requires: `type' shall be an 42804 enumeration type ([dcl.enum]). 42805 42806 42807 42808File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions 42809 428107.11 Java Exceptions 42811==================== 42812 42813The Java language uses a slightly different exception handling model 42814from C++. Normally, GNU C++ automatically detects when you are writing 42815C++ code that uses Java exceptions, and handle them appropriately. 42816However, if C++ code only needs to execute destructors when Java 42817exceptions are thrown through it, GCC guesses incorrectly. Sample 42818problematic code is: 42819 42820 struct S { ~S(); }; 42821 extern void bar(); // is written in Java, and may throw exceptions 42822 void foo() 42823 { 42824 S s; 42825 bar(); 42826 } 42827 42828The usual effect of an incorrect guess is a link failure, complaining of 42829a missing routine called `__gxx_personality_v0'. 42830 42831 You can inform the compiler that Java exceptions are to be used in a 42832translation unit, irrespective of what it might think, by writing 42833`#pragma GCC java_exceptions' at the head of the file. This `#pragma' 42834must appear before any functions that throw or catch exceptions, or run 42835destructors when exceptions are thrown through them. 42836 42837 You cannot mix Java and C++ exceptions in the same translation unit. 42838It is believed to be safe to throw a C++ exception from one file through 42839another file compiled for the Java exception model, or vice versa, but 42840there may be bugs in this area. 42841 42842 42843File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 42844 428457.12 Deprecated Features 42846======================== 42847 42848In the past, the GNU C++ compiler was extended to experiment with new 42849features, at a time when the C++ language was still evolving. Now that 42850the C++ standard is complete, some of those features are superseded by 42851superior alternatives. Using the old features might cause a warning in 42852some cases that the feature will be dropped in the future. In other 42853cases, the feature might be gone already. 42854 42855 While the list below is not exhaustive, it documents some of the 42856options that are now deprecated: 42857 42858`-fexternal-templates' 42859`-falt-external-templates' 42860 These are two of the many ways for G++ to implement template 42861 instantiation. *Note Template Instantiation::. The C++ standard 42862 clearly defines how template definitions have to be organized 42863 across implementation units. G++ has an implicit instantiation 42864 mechanism that should work just fine for standard-conforming code. 42865 42866`-fstrict-prototype' 42867`-fno-strict-prototype' 42868 Previously it was possible to use an empty prototype parameter 42869 list to indicate an unspecified number of parameters (like C), 42870 rather than no parameters, as C++ demands. This feature has been 42871 removed, except where it is required for backwards compatibility. 42872 *Note Backwards Compatibility::. 42873 42874 G++ allows a virtual function returning `void *' to be overridden by 42875one returning a different pointer type. This extension to the 42876covariant return type rules is now deprecated and will be removed from a 42877future version. 42878 42879 The G++ minimum and maximum operators (`<?' and `>?') and their 42880compound forms (`<?=') and `>?=') have been deprecated and are now 42881removed from G++. Code using these operators should be modified to use 42882`std::min' and `std::max' instead. 42883 42884 The named return value extension has been deprecated, and is now 42885removed from G++. 42886 42887 The use of initializer lists with new expressions has been deprecated, 42888and is now removed from G++. 42889 42890 Floating and complex non-type template parameters have been deprecated, 42891and are now removed from G++. 42892 42893 The implicit typename extension has been deprecated and is now removed 42894from G++. 42895 42896 The use of default arguments in function pointers, function typedefs 42897and other places where they are not permitted by the standard is 42898deprecated and will be removed from a future version of G++. 42899 42900 G++ allows floating-point literals to appear in integral constant 42901expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is 42902deprecated and will be removed from a future version. 42903 42904 G++ allows static data members of const floating-point type to be 42905declared with an initializer in a class definition. The standard only 42906allows initializers for static members of const integral types and const 42907enumeration types so this extension has been deprecated and will be 42908removed from a future version. 42909 42910 42911File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 42912 429137.13 Backwards Compatibility 42914============================ 42915 42916Now that there is a definitive ISO standard C++, G++ has a specification 42917to adhere to. The C++ language evolved over time, and features that 42918used to be acceptable in previous drafts of the standard, such as the 42919ARM [Annotated C++ Reference Manual], are no longer accepted. In order 42920to allow compilation of C++ written to such drafts, G++ contains some 42921backwards compatibilities. _All such backwards compatibility features 42922are liable to disappear in future versions of G++._ They should be 42923considered deprecated. *Note Deprecated Features::. 42924 42925`For scope' 42926 If a variable is declared at for scope, it used to remain in scope 42927 until the end of the scope that contained the for statement 42928 (rather than just within the for scope). G++ retains this, but 42929 issues a warning, if such a variable is accessed outside the for 42930 scope. 42931 42932`Implicit C language' 42933 Old C system header files did not contain an `extern "C" {...}' 42934 scope to set the language. On such systems, all header files are 42935 implicitly scoped inside a C language scope. Also, an empty 42936 prototype `()' is treated as an unspecified number of arguments, 42937 rather than no arguments, as C++ demands. 42938 42939 42940File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 42941 429428 GNU Objective-C Features 42943************************** 42944 42945This document is meant to describe some of the GNU Objective-C 42946features. It is not intended to teach you Objective-C. There are 42947several resources on the Internet that present the language. 42948 42949* Menu: 42950 42951* GNU Objective-C runtime API:: 42952* Executing code before main:: 42953* Type encoding:: 42954* Garbage Collection:: 42955* Constant string objects:: 42956* compatibility_alias:: 42957* Exceptions:: 42958* Synchronization:: 42959* Fast enumeration:: 42960* Messaging with the GNU Objective-C runtime:: 42961 42962 42963File: gcc.info, Node: GNU Objective-C runtime API, Next: Executing code before main, Up: Objective-C 42964 429658.1 GNU Objective-C Runtime API 42966=============================== 42967 42968This section is specific for the GNU Objective-C runtime. If you are 42969using a different runtime, you can skip it. 42970 42971 The GNU Objective-C runtime provides an API that allows you to 42972interact with the Objective-C runtime system, querying the live runtime 42973structures and even manipulating them. This allows you for example to 42974inspect and navigate classes, methods and protocols; to define new 42975classes or new methods, and even to modify existing classes or 42976protocols. 42977 42978 If you are using a "Foundation" library such as GNUstep-Base, this 42979library will provide you with a rich set of functionality to do most of 42980the inspection tasks, and you probably will only need direct access to 42981the GNU Objective-C runtime API to define new classes or methods. 42982 42983* Menu: 42984 42985* Modern GNU Objective-C runtime API:: 42986* Traditional GNU Objective-C runtime API:: 42987 42988 42989File: gcc.info, Node: Modern GNU Objective-C runtime API, Next: Traditional GNU Objective-C runtime API, Up: GNU Objective-C runtime API 42990 429918.1.1 Modern GNU Objective-C Runtime API 42992---------------------------------------- 42993 42994The GNU Objective-C runtime provides an API which is similar to the one 42995provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime. The 42996API is documented in the public header files of the GNU Objective-C 42997runtime: 42998 42999 * `objc/objc.h': this is the basic Objective-C header file, defining 43000 the basic Objective-C types such as `id', `Class' and `BOOL'. You 43001 have to include this header to do almost anything with Objective-C. 43002 43003 * `objc/runtime.h': this header declares most of the public runtime 43004 API functions allowing you to inspect and manipulate the 43005 Objective-C runtime data structures. These functions are fairly 43006 standardized across Objective-C runtimes and are almost identical 43007 to the Apple/NeXT Objective-C runtime ones. It does not declare 43008 functions in some specialized areas (constructing and forwarding 43009 message invocations, threading) which are in the other headers 43010 below. You have to include `objc/objc.h' and `objc/runtime.h' to 43011 use any of the functions, such as `class_getName()', declared in 43012 `objc/runtime.h'. 43013 43014 * `objc/message.h': this header declares public functions used to 43015 construct, deconstruct and forward message invocations. Because 43016 messaging is done in quite a different way on different runtimes, 43017 functions in this header are specific to the GNU Objective-C 43018 runtime implementation. 43019 43020 * `objc/objc-exception.h': this header declares some public 43021 functions related to Objective-C exceptions. For example 43022 functions in this header allow you to throw an Objective-C 43023 exception from plain C/C++ code. 43024 43025 * `objc/objc-sync.h': this header declares some public functions 43026 related to the Objective-C `@synchronized()' syntax, allowing you 43027 to emulate an Objective-C `@synchronized()' block in plain C/C++ 43028 code. 43029 43030 * `objc/thr.h': this header declares a public runtime API threading 43031 layer that is only provided by the GNU Objective-C runtime. It 43032 declares functions such as `objc_mutex_lock()', which provide a 43033 platform-independent set of threading functions. 43034 43035 43036 The header files contain detailed documentation for each function in 43037the GNU Objective-C runtime API. 43038 43039 43040File: gcc.info, Node: Traditional GNU Objective-C runtime API, Prev: Modern GNU Objective-C runtime API, Up: GNU Objective-C runtime API 43041 430428.1.2 Traditional GNU Objective-C Runtime API 43043--------------------------------------------- 43044 43045The GNU Objective-C runtime used to provide a different API, which we 43046call the "traditional" GNU Objective-C runtime API. Functions 43047belonging to this API are easy to recognize because they use a 43048different naming convention, such as `class_get_super_class()' 43049(traditional API) instead of `class_getSuperclass()' (modern API). 43050Software using this API includes the file `objc/objc-api.h' where it is 43051declared. 43052 43053 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer 43054available. 43055 43056 43057File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: GNU Objective-C runtime API, Up: Objective-C 43058 430598.2 `+load': Executing Code before `main' 43060========================================= 43061 43062This section is specific for the GNU Objective-C runtime. If you are 43063using a different runtime, you can skip it. 43064 43065 The GNU Objective-C runtime provides a way that allows you to execute 43066code before the execution of the program enters the `main' function. 43067The code is executed on a per-class and a per-category basis, through a 43068special class method `+load'. 43069 43070 This facility is very useful if you want to initialize global variables 43071which can be accessed by the program directly, without sending a message 43072to the class first. The usual way to initialize global variables, in 43073the `+initialize' method, might not be useful because `+initialize' is 43074only called when the first message is sent to a class object, which in 43075some cases could be too late. 43076 43077 Suppose for example you have a `FileStream' class that declares 43078`Stdin', `Stdout' and `Stderr' as global variables, like below: 43079 43080 43081 FileStream *Stdin = nil; 43082 FileStream *Stdout = nil; 43083 FileStream *Stderr = nil; 43084 43085 @implementation FileStream 43086 43087 + (void)initialize 43088 { 43089 Stdin = [[FileStream new] initWithFd:0]; 43090 Stdout = [[FileStream new] initWithFd:1]; 43091 Stderr = [[FileStream new] initWithFd:2]; 43092 } 43093 43094 /* Other methods here */ 43095 @end 43096 43097 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 43098in `+initialize' occurs too late. The programmer can send a message to 43099one of these objects before the variables are actually initialized, 43100thus sending messages to the `nil' object. The `+initialize' method 43101which actually initializes the global variables is not invoked until 43102the first message is sent to the class object. The solution would 43103require these variables to be initialized just before entering `main'. 43104 43105 The correct solution of the above problem is to use the `+load' method 43106instead of `+initialize': 43107 43108 43109 @implementation FileStream 43110 43111 + (void)load 43112 { 43113 Stdin = [[FileStream new] initWithFd:0]; 43114 Stdout = [[FileStream new] initWithFd:1]; 43115 Stderr = [[FileStream new] initWithFd:2]; 43116 } 43117 43118 /* Other methods here */ 43119 @end 43120 43121 The `+load' is a method that is not overridden by categories. If a 43122class and a category of it both implement `+load', both methods are 43123invoked. This allows some additional initializations to be performed in 43124a category. 43125 43126 This mechanism is not intended to be a replacement for `+initialize'. 43127You should be aware of its limitations when you decide to use it 43128instead of `+initialize'. 43129 43130* Menu: 43131 43132* What you can and what you cannot do in +load:: 43133 43134 43135File: gcc.info, Node: What you can and what you cannot do in +load, Up: Executing code before main 43136 431378.2.1 What You Can and Cannot Do in `+load' 43138------------------------------------------- 43139 43140`+load' is to be used only as a last resort. Because it is executed 43141very early, most of the Objective-C runtime machinery will not be ready 43142when `+load' is executed; hence `+load' works best for executing C code 43143that is independent on the Objective-C runtime. 43144 43145 The `+load' implementation in the GNU runtime guarantees you the 43146following things: 43147 43148 * you can write whatever C code you like; 43149 43150 * you can allocate and send messages to objects whose class is 43151 implemented in the same file; 43152 43153 * the `+load' implementation of all super classes of a class are 43154 executed before the `+load' of that class is executed; 43155 43156 * the `+load' implementation of a class is executed before the 43157 `+load' implementation of any category. 43158 43159 43160 In particular, the following things, even if they can work in a 43161particular case, are not guaranteed: 43162 43163 * allocation of or sending messages to arbitrary objects; 43164 43165 * allocation of or sending messages to objects whose classes have a 43166 category implemented in the same file; 43167 43168 * sending messages to Objective-C constant strings (`@"this is a 43169 constant string"'); 43170 43171 43172 You should make no assumptions about receiving `+load' in sibling 43173classes when you write `+load' of a class. The order in which sibling 43174classes receive `+load' is not guaranteed. 43175 43176 The order in which `+load' and `+initialize' are called could be 43177problematic if this matters. If you don't allocate objects inside 43178`+load', it is guaranteed that `+load' is called before `+initialize'. 43179If you create an object inside `+load' the `+initialize' method of 43180object's class is invoked even if `+load' was not invoked. Note if you 43181explicitly call `+load' on a class, `+initialize' will be called first. 43182To avoid possible problems try to implement only one of these methods. 43183 43184 The `+load' method is also invoked when a bundle is dynamically loaded 43185into your running program. This happens automatically without any 43186intervening operation from you. When you write bundles and you need to 43187write `+load' you can safely create and send messages to objects whose 43188classes already exist in the running program. The same restrictions as 43189above apply to classes defined in bundle. 43190 43191 43192File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 43193 431948.3 Type Encoding 43195================= 43196 43197This is an advanced section. Type encodings are used extensively by 43198the compiler and by the runtime, but you generally do not need to know 43199about them to use Objective-C. 43200 43201 The Objective-C compiler generates type encodings for all the types. 43202These type encodings are used at runtime to find out information about 43203selectors and methods and about objects and classes. 43204 43205 The types are encoded in the following way: 43206 43207`_Bool' `B' 43208`char' `c' 43209`unsigned char' `C' 43210`short' `s' 43211`unsigned short' `S' 43212`int' `i' 43213`unsigned int' `I' 43214`long' `l' 43215`unsigned long' `L' 43216`long long' `q' 43217`unsigned long `Q' 43218long' 43219`float' `f' 43220`double' `d' 43221`long double' `D' 43222`void' `v' 43223`id' `@' 43224`Class' `#' 43225`SEL' `:' 43226`char*' `*' 43227`enum' an `enum' is encoded exactly as the integer type that 43228 the compiler uses for it, which depends on the 43229 enumeration values. Often the compiler users 43230 `unsigned int', which is then encoded as `I'. 43231unknown type `?' 43232Complex types `j' followed by the inner type. For example 43233 `_Complex double' is encoded as "jd". 43234bit-fields `b' followed by the starting position of the 43235 bit-field, the type of the bit-field and the size of 43236 the bit-field (the bit-fields encoding was changed 43237 from the NeXT's compiler encoding, see below) 43238 43239 The encoding of bit-fields has changed to allow bit-fields to be 43240properly handled by the runtime functions that compute sizes and 43241alignments of types that contain bit-fields. The previous encoding 43242contained only the size of the bit-field. Using only this information 43243it is not possible to reliably compute the size occupied by the 43244bit-field. This is very important in the presence of the Boehm's 43245garbage collector because the objects are allocated using the typed 43246memory facility available in this collector. The typed memory 43247allocation requires information about where the pointers are located 43248inside the object. 43249 43250 The position in the bit-field is the position, counting in bits, of the 43251bit closest to the beginning of the structure. 43252 43253 The non-atomic types are encoded as follows: 43254 43255pointers `^' followed by the pointed type. 43256arrays `[' followed by the number of elements in the array 43257 followed by the type of the elements followed by `]' 43258structures `{' followed by the name of the structure (or `?' if the 43259 structure is unnamed), the `=' sign, the type of the 43260 members and by `}' 43261unions `(' followed by the name of the structure (or `?' if the 43262 union is unnamed), the `=' sign, the type of the members 43263 followed by `)' 43264vectors `![' followed by the vector_size (the number of bytes 43265 composing the vector) followed by a comma, followed by 43266 the alignment (in bytes) of the vector, followed by the 43267 type of the elements followed by `]' 43268 43269 Here are some types and their encodings, as they are generated by the 43270compiler on an i386 machine: 43271 43272 43273Objective-C type Compiler encoding 43274 int a[10]; `[10i]' 43275 struct { `{?=i[3f]b128i3b131i2c}' 43276 int i; 43277 float f[3]; 43278 int a:3; 43279 int b:2; 43280 char c; 43281 } 43282 int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine) 43283 43284 43285 In addition to the types the compiler also encodes the type 43286specifiers. The table below describes the encoding of the current 43287Objective-C type specifiers: 43288 43289 43290Specifier Encoding 43291`const' `r' 43292`in' `n' 43293`inout' `N' 43294`out' `o' 43295`bycopy' `O' 43296`byref' `R' 43297`oneway' `V' 43298 43299 43300 The type specifiers are encoded just before the type. Unlike types 43301however, the type specifiers are only encoded when they appear in method 43302argument types. 43303 43304 Note how `const' interacts with pointers: 43305 43306 43307Objective-C type Compiler encoding 43308 const int `ri' 43309 const int* `^ri' 43310 int *const `r^i' 43311 43312 43313 `const int*' is a pointer to a `const int', and so is encoded as 43314`^ri'. `int* const', instead, is a `const' pointer to an `int', and so 43315is encoded as `r^i'. 43316 43317 Finally, there is a complication when encoding `const char *' versus 43318`char * const'. Because `char *' is encoded as `*' and not as `^c', 43319there is no way to express the fact that `r' applies to the pointer or 43320to the pointee. 43321 43322 Hence, it is assumed as a convention that `r*' means `const char *' 43323(since it is what is most often meant), and there is no way to encode 43324`char *const'. `char *const' would simply be encoded as `*', and the 43325`const' is lost. 43326 43327* Menu: 43328 43329* Legacy type encoding:: 43330* @encode:: 43331* Method signatures:: 43332 43333 43334File: gcc.info, Node: Legacy type encoding, Next: @encode, Up: Type encoding 43335 433368.3.1 Legacy Type Encoding 43337-------------------------- 43338 43339Unfortunately, historically GCC used to have a number of bugs in its 43340encoding code. The NeXT runtime expects GCC to emit type encodings in 43341this historical format (compatible with GCC-3.3), so when using the 43342NeXT runtime, GCC will introduce on purpose a number of incorrect 43343encodings: 43344 43345 * the read-only qualifier of the pointee gets emitted before the '^'. 43346 The read-only qualifier of the pointer itself gets ignored, unless 43347 it is a typedef. Also, the 'r' is only emitted for the outermost 43348 type. 43349 43350 * 32-bit longs are encoded as 'l' or 'L', but not always. For 43351 typedefs, the compiler uses 'i' or 'I' instead if encoding a 43352 struct field or a pointer. 43353 43354 * `enum's are always encoded as 'i' (int) even if they are actually 43355 unsigned or long. 43356 43357 43358 In addition to that, the NeXT runtime uses a different encoding for 43359bitfields. It encodes them as `b' followed by the size, without a bit 43360offset or the underlying field type. 43361 43362 43363File: gcc.info, Node: @encode, Next: Method signatures, Prev: Legacy type encoding, Up: Type encoding 43364 433658.3.2 `@encode' 43366--------------- 43367 43368GNU Objective-C supports the `@encode' syntax that allows you to create 43369a type encoding from a C/Objective-C type. For example, `@encode(int)' 43370is compiled by the compiler into `"i"'. 43371 43372 `@encode' does not support type qualifiers other than `const'. For 43373example, `@encode(const char*)' is valid and is compiled into `"r*"', 43374while `@encode(bycopy char *)' is invalid and will cause a compilation 43375error. 43376 43377 43378File: gcc.info, Node: Method signatures, Prev: @encode, Up: Type encoding 43379 433808.3.3 Method Signatures 43381----------------------- 43382 43383This section documents the encoding of method types, which is rarely 43384needed to use Objective-C. You should skip it at a first reading; the 43385runtime provides functions that will work on methods and can walk 43386through the list of parameters and interpret them for you. These 43387functions are part of the public "API" and are the preferred way to 43388interact with method signatures from user code. 43389 43390 But if you need to debug a problem with method signatures and need to 43391know how they are implemented (i.e., the "ABI"), read on. 43392 43393 Methods have their "signature" encoded and made available to the 43394runtime. The "signature" encodes all the information required to 43395dynamically build invocations of the method at runtime: return type and 43396arguments. 43397 43398 The "signature" is a null-terminated string, composed of the following: 43399 43400 * The return type, including type qualifiers. For example, a method 43401 returning `int' would have `i' here. 43402 43403 * The total size (in bytes) required to pass all the parameters. 43404 This includes the two hidden parameters (the object `self' and the 43405 method selector `_cmd'). 43406 43407 * Each argument, with the type encoding, followed by the offset (in 43408 bytes) of the argument in the list of parameters. 43409 43410 43411 For example, a method with no arguments and returning `int' would have 43412the signature `i8@0:4' if the size of a pointer is 4. The signature is 43413interpreted as follows: the `i' is the return type (an `int'), the `8' 43414is the total size of the parameters in bytes (two pointers each of size 434154), the `@0' is the first parameter (an object at byte offset `0') and 43416`:4' is the second parameter (a `SEL' at byte offset `4'). 43417 43418 You can easily find more examples by running the "strings" program on 43419an Objective-C object file compiled by GCC. You'll see a lot of 43420strings that look very much like `i8@0:4'. They are signatures of 43421Objective-C methods. 43422 43423 43424File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 43425 434268.4 Garbage Collection 43427====================== 43428 43429This section is specific for the GNU Objective-C runtime. If you are 43430using a different runtime, you can skip it. 43431 43432 Support for garbage collection with the GNU runtime has been added by 43433using a powerful conservative garbage collector, known as the 43434Boehm-Demers-Weiser conservative garbage collector. 43435 43436 To enable the support for it you have to configure the compiler using 43437an additional argument, `--enable-objc-gc'. This will build the 43438boehm-gc library, and build an additional runtime library which has 43439several enhancements to support the garbage collector. The new library 43440has a new name, `libobjc_gc.a' to not conflict with the 43441non-garbage-collected library. 43442 43443 When the garbage collector is used, the objects are allocated using the 43444so-called typed memory allocation mechanism available in the 43445Boehm-Demers-Weiser collector. This mode requires precise information 43446on where pointers are located inside objects. This information is 43447computed once per class, immediately after the class has been 43448initialized. 43449 43450 There is a new runtime function `class_ivar_set_gcinvisible()' which 43451can be used to declare a so-called "weak pointer" reference. Such a 43452pointer is basically hidden for the garbage collector; this can be 43453useful in certain situations, especially when you want to keep track of 43454the allocated objects, yet allow them to be collected. This kind of 43455pointers can only be members of objects, you cannot declare a global 43456pointer as a weak reference. Every type which is a pointer type can be 43457declared a weak pointer, including `id', `Class' and `SEL'. 43458 43459 Here is an example of how to use this feature. Suppose you want to 43460implement a class whose instances hold a weak pointer reference; the 43461following class does this: 43462 43463 43464 @interface WeakPointer : Object 43465 { 43466 const void* weakPointer; 43467 } 43468 43469 - initWithPointer:(const void*)p; 43470 - (const void*)weakPointer; 43471 @end 43472 43473 43474 @implementation WeakPointer 43475 43476 + (void)initialize 43477 { 43478 if (self == objc_lookUpClass ("WeakPointer")) 43479 class_ivar_set_gcinvisible (self, "weakPointer", YES); 43480 } 43481 43482 - initWithPointer:(const void*)p 43483 { 43484 weakPointer = p; 43485 return self; 43486 } 43487 43488 - (const void*)weakPointer 43489 { 43490 return weakPointer; 43491 } 43492 43493 @end 43494 43495 Weak pointers are supported through a new type character specifier 43496represented by the `!' character. The `class_ivar_set_gcinvisible()' 43497function adds or removes this specifier to the string type description 43498of the instance variable named as argument. 43499 43500 43501File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 43502 435038.5 Constant String Objects 43504=========================== 43505 43506GNU Objective-C provides constant string objects that are generated 43507directly by the compiler. You declare a constant string object by 43508prefixing a C constant string with the character `@': 43509 43510 id myString = @"this is a constant string object"; 43511 43512 The constant string objects are by default instances of the 43513`NXConstantString' class which is provided by the GNU Objective-C 43514runtime. To get the definition of this class you must include the 43515`objc/NXConstStr.h' header file. 43516 43517 User defined libraries may want to implement their own constant string 43518class. To be able to support them, the GNU Objective-C compiler 43519provides a new command line options 43520`-fconstant-string-class=CLASS-NAME'. The provided class should adhere 43521to a strict structure, the same as `NXConstantString''s structure: 43522 43523 43524 @interface MyConstantStringClass 43525 { 43526 Class isa; 43527 char *c_string; 43528 unsigned int len; 43529 } 43530 @end 43531 43532 `NXConstantString' inherits from `Object'; user class libraries may 43533choose to inherit the customized constant string class from a different 43534class than `Object'. There is no requirement in the methods the 43535constant string class has to implement, but the final ivar layout of 43536the class must be the compatible with the given structure. 43537 43538 When the compiler creates the statically allocated constant string 43539object, the `c_string' field will be filled by the compiler with the 43540string; the `length' field will be filled by the compiler with the 43541string length; the `isa' pointer will be filled with `NULL' by the 43542compiler, and it will later be fixed up automatically at runtime by the 43543GNU Objective-C runtime library to point to the class which was set by 43544the `-fconstant-string-class' option when the object file is loaded (if 43545you wonder how it works behind the scenes, the name of the class to 43546use, and the list of static objects to fixup, are stored by the 43547compiler in the object file in a place where the GNU runtime library 43548will find them at runtime). 43549 43550 As a result, when a file is compiled with the 43551`-fconstant-string-class' option, all the constant string objects will 43552be instances of the class specified as argument to this option. It is 43553possible to have multiple compilation units referring to different 43554constant string classes, neither the compiler nor the linker impose any 43555restrictions in doing this. 43556 43557 43558File: gcc.info, Node: compatibility_alias, Next: Exceptions, Prev: Constant string objects, Up: Objective-C 43559 435608.6 `compatibility_alias' 43561========================= 43562 43563The keyword `@compatibility_alias' allows you to define a class name as 43564equivalent to another class name. For example: 43565 43566 @compatibility_alias WOApplication GSWApplication; 43567 43568 tells the compiler that each time it encounters `WOApplication' as a 43569class name, it should replace it with `GSWApplication' (that is, 43570`WOApplication' is just an alias for `GSWApplication'). 43571 43572 There are some constraints on how this can be used-- 43573 43574 * `WOApplication' (the alias) must not be an existing class; 43575 43576 * `GSWApplication' (the real class) must be an existing class. 43577 43578 43579 43580File: gcc.info, Node: Exceptions, Next: Synchronization, Prev: compatibility_alias, Up: Objective-C 43581 435828.7 Exceptions 43583============== 43584 43585GNU Objective-C provides exception support built into the language, as 43586in the following example: 43587 43588 @try { 43589 ... 43590 @throw expr; 43591 ... 43592 } 43593 @catch (AnObjCClass *exc) { 43594 ... 43595 @throw expr; 43596 ... 43597 @throw; 43598 ... 43599 } 43600 @catch (AnotherClass *exc) { 43601 ... 43602 } 43603 @catch (id allOthers) { 43604 ... 43605 } 43606 @finally { 43607 ... 43608 @throw expr; 43609 ... 43610 } 43611 43612 The `@throw' statement may appear anywhere in an Objective-C or 43613Objective-C++ program; when used inside of a `@catch' block, the 43614`@throw' may appear without an argument (as shown above), in which case 43615the object caught by the `@catch' will be rethrown. 43616 43617 Note that only (pointers to) Objective-C objects may be thrown and 43618caught using this scheme. When an object is thrown, it will be caught 43619by the nearest `@catch' clause capable of handling objects of that 43620type, analogously to how `catch' blocks work in C++ and Java. A 43621`@catch(id ...)' clause (as shown above) may also be provided to catch 43622any and all Objective-C exceptions not caught by previous `@catch' 43623clauses (if any). 43624 43625 The `@finally' clause, if present, will be executed upon exit from the 43626immediately preceding `@try ... @catch' section. This will happen 43627regardless of whether any exceptions are thrown, caught or rethrown 43628inside the `@try ... @catch' section, analogously to the behavior of 43629the `finally' clause in Java. 43630 43631 There are several caveats to using the new exception mechanism: 43632 43633 * The `-fobjc-exceptions' command line option must be used when 43634 compiling Objective-C files that use exceptions. 43635 43636 * With the GNU runtime, exceptions are always implemented as "native" 43637 exceptions and it is recommended that the `-fexceptions' and 43638 `-shared-libgcc' options are used when linking. 43639 43640 * With the NeXT runtime, although currently designed to be binary 43641 compatible with `NS_HANDLER'-style idioms provided by the 43642 `NSException' class, the new exceptions can only be used on Mac OS 43643 X 10.3 (Panther) and later systems, due to additional functionality 43644 needed in the NeXT Objective-C runtime. 43645 43646 * As mentioned above, the new exceptions do not support handling 43647 types other than Objective-C objects. Furthermore, when used from 43648 Objective-C++, the Objective-C exception model does not 43649 interoperate with C++ exceptions at this time. This means you 43650 cannot `@throw' an exception from Objective-C and `catch' it in 43651 C++, or vice versa (i.e., `throw ... @catch'). 43652 43653 43654File: gcc.info, Node: Synchronization, Next: Fast enumeration, Prev: Exceptions, Up: Objective-C 43655 436568.8 Synchronization 43657=================== 43658 43659GNU Objective-C provides support for synchronized blocks: 43660 43661 @synchronized (ObjCClass *guard) { 43662 ... 43663 } 43664 43665 Upon entering the `@synchronized' block, a thread of execution shall 43666first check whether a lock has been placed on the corresponding `guard' 43667object by another thread. If it has, the current thread shall wait 43668until the other thread relinquishes its lock. Once `guard' becomes 43669available, the current thread will place its own lock on it, execute 43670the code contained in the `@synchronized' block, and finally relinquish 43671the lock (thereby making `guard' available to other threads). 43672 43673 Unlike Java, Objective-C does not allow for entire methods to be 43674marked `@synchronized'. Note that throwing exceptions out of 43675`@synchronized' blocks is allowed, and will cause the guarding object 43676to be unlocked properly. 43677 43678 Because of the interactions between synchronization and exception 43679handling, you can only use `@synchronized' when compiling with 43680exceptions enabled, that is with the command line option 43681`-fobjc-exceptions'. 43682 43683 43684File: gcc.info, Node: Fast enumeration, Next: Messaging with the GNU Objective-C runtime, Prev: Synchronization, Up: Objective-C 43685 436868.9 Fast Enumeration 43687==================== 43688 43689* Menu: 43690 43691* Using fast enumeration:: 43692* c99-like fast enumeration syntax:: 43693* Fast enumeration details:: 43694* Fast enumeration protocol:: 43695 43696 43697File: gcc.info, Node: Using fast enumeration, Next: c99-like fast enumeration syntax, Up: Fast enumeration 43698 436998.9.1 Using Fast Enumeration 43700---------------------------- 43701 43702GNU Objective-C provides support for the fast enumeration syntax: 43703 43704 id array = ...; 43705 id object; 43706 43707 for (object in array) 43708 { 43709 /* Do something with 'object' */ 43710 } 43711 43712 `array' needs to be an Objective-C object (usually a collection 43713object, for example an array, a dictionary or a set) which implements 43714the "Fast Enumeration Protocol" (see below). If you are using a 43715Foundation library such as GNUstep Base or Apple Cocoa Foundation, all 43716collection objects in the library implement this protocol and can be 43717used in this way. 43718 43719 The code above would iterate over all objects in `array'. For each of 43720them, it assigns it to `object', then executes the `Do something with 43721'object'' statements. 43722 43723 Here is a fully worked-out example using a Foundation library (which 43724provides the implementation of `NSArray', `NSString' and `NSLog'): 43725 43726 NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil]; 43727 NSString *object; 43728 43729 for (object in array) 43730 NSLog (@"Iterating over %@", object); 43731 43732 43733File: gcc.info, Node: c99-like fast enumeration syntax, Next: Fast enumeration details, Prev: Using fast enumeration, Up: Fast enumeration 43734 437358.9.2 C99-Like Fast Enumeration Syntax 43736-------------------------------------- 43737 43738A c99-like declaration syntax is also allowed: 43739 43740 id array = ...; 43741 43742 for (id object in array) 43743 { 43744 /* Do something with 'object' */ 43745 } 43746 43747 this is completely equivalent to: 43748 43749 id array = ...; 43750 43751 { 43752 id object; 43753 for (object in array) 43754 { 43755 /* Do something with 'object' */ 43756 } 43757 } 43758 43759 but can save some typing. 43760 43761 Note that the option `-std=c99' is not required to allow this syntax 43762in Objective-C. 43763 43764 43765File: gcc.info, Node: Fast enumeration details, Next: Fast enumeration protocol, Prev: c99-like fast enumeration syntax, Up: Fast enumeration 43766 437678.9.3 Fast Enumeration Details 43768------------------------------ 43769 43770Here is a more technical description with the gory details. Consider 43771the code 43772 43773 for (OBJECT EXPRESSION in COLLECTION EXPRESSION) 43774 { 43775 STATEMENTS 43776 } 43777 43778 here is what happens when you run it: 43779 43780 * `COLLECTION EXPRESSION' is evaluated exactly once and the result 43781 is used as the collection object to iterate over. This means it 43782 is safe to write code such as `for (object in [NSDictionary 43783 keyEnumerator]) ...'. 43784 43785 * the iteration is implemented by the compiler by repeatedly getting 43786 batches of objects from the collection object using the fast 43787 enumeration protocol (see below), then iterating over all objects 43788 in the batch. This is faster than a normal enumeration where 43789 objects are retrieved one by one (hence the name "fast 43790 enumeration"). 43791 43792 * if there are no objects in the collection, then `OBJECT 43793 EXPRESSION' is set to `nil' and the loop immediately terminates. 43794 43795 * if there are objects in the collection, then for each object in the 43796 collection (in the order they are returned) `OBJECT EXPRESSION' is 43797 set to the object, then `STATEMENTS' are executed. 43798 43799 * `STATEMENTS' can contain `break' and `continue' commands, which 43800 will abort the iteration or skip to the next loop iteration as 43801 expected. 43802 43803 * when the iteration ends because there are no more objects to 43804 iterate over, `OBJECT EXPRESSION' is set to `nil'. This allows 43805 you to determine whether the iteration finished because a `break' 43806 command was used (in which case `OBJECT EXPRESSION' will remain 43807 set to the last object that was iterated over) or because it 43808 iterated over all the objects (in which case `OBJECT EXPRESSION' 43809 will be set to `nil'). 43810 43811 * `STATEMENTS' must not make any changes to the collection object; 43812 if they do, it is a hard error and the fast enumeration terminates 43813 by invoking `objc_enumerationMutation', a runtime function that 43814 normally aborts the program but which can be customized by 43815 Foundation libraries via `objc_set_mutation_handler' to do 43816 something different, such as raising an exception. 43817 43818 43819 43820File: gcc.info, Node: Fast enumeration protocol, Prev: Fast enumeration details, Up: Fast enumeration 43821 438228.9.4 Fast Enumeration Protocol 43823------------------------------- 43824 43825If you want your own collection object to be usable with fast 43826enumeration, you need to have it implement the method 43827 43828 - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state 43829 objects: (id *)objects 43830 count: (unsigned long)len; 43831 43832 where `NSFastEnumerationState' must be defined in your code as follows: 43833 43834 typedef struct 43835 { 43836 unsigned long state; 43837 id *itemsPtr; 43838 unsigned long *mutationsPtr; 43839 unsigned long extra[5]; 43840 } NSFastEnumerationState; 43841 43842 If no `NSFastEnumerationState' is defined in your code, the compiler 43843will automatically replace `NSFastEnumerationState *' with `struct 43844__objcFastEnumerationState *', where that type is silently defined by 43845the compiler in an identical way. This can be confusing and we 43846recommend that you define `NSFastEnumerationState' (as shown above) 43847instead. 43848 43849 The method is called repeatedly during a fast enumeration to retrieve 43850batches of objects. Each invocation of the method should retrieve the 43851next batch of objects. 43852 43853 The return value of the method is the number of objects in the current 43854batch; this should not exceed `len', which is the maximum size of a 43855batch as requested by the caller. The batch itself is returned in the 43856`itemsPtr' field of the `NSFastEnumerationState' struct. 43857 43858 To help with returning the objects, the `objects' array is a C array 43859preallocated by the caller (on the stack) of size `len'. In many cases 43860you can put the objects you want to return in that `objects' array, 43861then do `itemsPtr = objects'. But you don't have to; if your 43862collection already has the objects to return in some form of C array, 43863it could return them from there instead. 43864 43865 The `state' and `extra' fields of the `NSFastEnumerationState' 43866structure allows your collection object to keep track of the state of 43867the enumeration. In a simple array implementation, `state' may keep 43868track of the index of the last object that was returned, and `extra' 43869may be unused. 43870 43871 The `mutationsPtr' field of the `NSFastEnumerationState' is used to 43872keep track of mutations. It should point to a number; before working 43873on each object, the fast enumeration loop will check that this number 43874has not changed. If it has, a mutation has happened and the fast 43875enumeration will abort. So, `mutationsPtr' could be set to point to 43876some sort of version number of your collection, which is increased by 43877one every time there is a change (for example when an object is added 43878or removed). Or, if you are content with less strict mutation checks, 43879it could point to the number of objects in your collection or some 43880other value that can be checked to perform an approximate check that 43881the collection has not been mutated. 43882 43883 Finally, note how we declared the `len' argument and the return value 43884to be of type `unsigned long'. They could also be declared to be of 43885type `unsigned int' and everything would still work. 43886 43887 43888File: gcc.info, Node: Messaging with the GNU Objective-C runtime, Prev: Fast enumeration, Up: Objective-C 43889 438908.10 Messaging with the GNU Objective-C Runtime 43891=============================================== 43892 43893This section is specific for the GNU Objective-C runtime. If you are 43894using a different runtime, you can skip it. 43895 43896 The implementation of messaging in the GNU Objective-C runtime is 43897designed to be portable, and so is based on standard C. 43898 43899 Sending a message in the GNU Objective-C runtime is composed of two 43900separate steps. First, there is a call to the lookup function, 43901`objc_msg_lookup ()' (or, in the case of messages to super, 43902`objc_msg_lookup_super ()'). This runtime function takes as argument 43903the receiver and the selector of the method to be called; it returns 43904the `IMP', that is a pointer to the function implementing the method. 43905The second step of method invocation consists of casting this pointer 43906function to the appropriate function pointer type, and calling the 43907function pointed to it with the right arguments. 43908 43909 For example, when the compiler encounters a method invocation such as 43910`[object init]', it compiles it into a call to `objc_msg_lookup 43911(object, @selector(init))' followed by a cast of the returned value to 43912the appropriate function pointer type, and then it calls it. 43913 43914* Menu: 43915 43916* Dynamically registering methods:: 43917* Forwarding hook:: 43918 43919 43920File: gcc.info, Node: Dynamically registering methods, Next: Forwarding hook, Up: Messaging with the GNU Objective-C runtime 43921 439228.10.1 Dynamically Registering Methods 43923-------------------------------------- 43924 43925If `objc_msg_lookup()' does not find a suitable method implementation, 43926because the receiver does not implement the required method, it tries 43927to see if the class can dynamically register the method. 43928 43929 To do so, the runtime checks if the class of the receiver implements 43930the method 43931 43932 + (BOOL) resolveInstanceMethod: (SEL)selector; 43933 43934 in the case of an instance method, or 43935 43936 + (BOOL) resolveClassMethod: (SEL)selector; 43937 43938 in the case of a class method. If the class implements it, the 43939runtime invokes it, passing as argument the selector of the original 43940method, and if it returns `YES', the runtime tries the lookup again, 43941which could now succeed if a matching method was added dynamically by 43942`+resolveInstanceMethod:' or `+resolveClassMethod:'. 43943 43944 This allows classes to dynamically register methods (by adding them to 43945the class using `class_addMethod') when they are first called. To do 43946so, a class should implement `+resolveInstanceMethod:' (or, depending 43947on the case, `+resolveClassMethod:') and have it recognize the 43948selectors of methods that can be registered dynamically at runtime, 43949register them, and return `YES'. It should return `NO' for methods 43950that it does not dynamically registered at runtime. 43951 43952 If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not 43953implemented or returns `NO', the runtime then tries the forwarding hook. 43954 43955 Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was 43956added to the GNU Objective-C runtime in GCC version 4.6. 43957 43958 43959File: gcc.info, Node: Forwarding hook, Prev: Dynamically registering methods, Up: Messaging with the GNU Objective-C runtime 43960 439618.10.2 Forwarding Hook 43962---------------------- 43963 43964The GNU Objective-C runtime provides a hook, called 43965`__objc_msg_forward2', which is called by `objc_msg_lookup()' when it 43966can't find a method implementation in the runtime tables and after 43967calling `+resolveInstanceMethod:' and `+resolveClassMethod:' has been 43968attempted and did not succeed in dynamically registering the method. 43969 43970 To configure the hook, you set the global variable 43971`__objc_msg_forward2' to a function with the same argument and return 43972types of `objc_msg_lookup()'. When `objc_msg_lookup()' can not find a 43973method implementation, it invokes the hook function you provided to get 43974a method implementation to return. So, in practice 43975`__objc_msg_forward2' allows you to extend `objc_msg_lookup()' by 43976adding some custom code that is called to do a further lookup when no 43977standard method implementation can be found using the normal lookup. 43978 43979 This hook is generally reserved for "Foundation" libraries such as 43980GNUstep Base, which use it to implement their high-level method 43981forwarding API, typically based around the `forwardInvocation:' method. 43982So, unless you are implementing your own "Foundation" library, you 43983should not set this hook. 43984 43985 In a typical forwarding implementation, the `__objc_msg_forward2' hook 43986function determines the argument and return type of the method that is 43987being looked up, and then creates a function that takes these arguments 43988and has that return type, and returns it to the caller. Creating this 43989function is non-trivial and is typically performed using a dedicated 43990library such as `libffi'. 43991 43992 The forwarding method implementation thus created is returned by 43993`objc_msg_lookup()' and is executed as if it was a normal method 43994implementation. When the forwarding method implementation is called, 43995it is usually expected to pack all arguments into some sort of object 43996(typically, an `NSInvocation' in a "Foundation" library), and hand it 43997over to the programmer (`forwardInvocation:') who is then allowed to 43998manipulate the method invocation using a high-level API provided by the 43999"Foundation" library. For example, the programmer may want to examine 44000the method invocation arguments and name and potentially change them 44001before forwarding the method invocation to one or more local objects 44002(`performInvocation:') or even to remote objects (by using Distributed 44003Objects or some other mechanism). When all this completes, the return 44004value is passed back and must be returned correctly to the original 44005caller. 44006 44007 Note that the GNU Objective-C runtime currently provides no support 44008for method forwarding or method invocations other than the 44009`__objc_msg_forward2' hook. 44010 44011 If the forwarding hook does not exist or returns `NULL', the runtime 44012currently attempts forwarding using an older, deprecated API, and if 44013that fails, it aborts the program. In future versions of the GNU 44014Objective-C runtime, the runtime will immediately abort. 44015 44016 44017File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 44018 440199 Binary Compatibility 44020********************** 44021 44022Binary compatibility encompasses several related concepts: 44023 44024"application binary interface (ABI)" 44025 The set of runtime conventions followed by all of the tools that 44026 deal with binary representations of a program, including 44027 compilers, assemblers, linkers, and language runtime support. 44028 Some ABIs are formal with a written specification, possibly 44029 designed by multiple interested parties. Others are simply the 44030 way things are actually done by a particular set of tools. 44031 44032"ABI conformance" 44033 A compiler conforms to an ABI if it generates code that follows 44034 all of the specifications enumerated by that ABI. A library 44035 conforms to an ABI if it is implemented according to that ABI. An 44036 application conforms to an ABI if it is built using tools that 44037 conform to that ABI and does not contain source code that 44038 specifically changes behavior specified by the ABI. 44039 44040"calling conventions" 44041 Calling conventions are a subset of an ABI that specify of how 44042 arguments are passed and function results are returned. 44043 44044"interoperability" 44045 Different sets of tools are interoperable if they generate files 44046 that can be used in the same program. The set of tools includes 44047 compilers, assemblers, linkers, libraries, header files, startup 44048 files, and debuggers. Binaries produced by different sets of 44049 tools are not interoperable unless they implement the same ABI. 44050 This applies to different versions of the same tools as well as 44051 tools from different vendors. 44052 44053"intercallability" 44054 Whether a function in a binary built by one set of tools can call a 44055 function in a binary built by a different set of tools is a subset 44056 of interoperability. 44057 44058"implementation-defined features" 44059 Language standards include lists of implementation-defined 44060 features whose behavior can vary from one implementation to 44061 another. Some of these features are normally covered by a 44062 platform's ABI and others are not. The features that are not 44063 covered by an ABI generally affect how a program behaves, but not 44064 intercallability. 44065 44066"compatibility" 44067 Conformance to the same ABI and the same behavior of 44068 implementation-defined features are both relevant for 44069 compatibility. 44070 44071 The application binary interface implemented by a C or C++ compiler 44072affects code generation and runtime support for: 44073 44074 * size and alignment of data types 44075 44076 * layout of structured types 44077 44078 * calling conventions 44079 44080 * register usage conventions 44081 44082 * interfaces for runtime arithmetic support 44083 44084 * object file formats 44085 44086 In addition, the application binary interface implemented by a C++ 44087compiler affects code generation and runtime support for: 44088 * name mangling 44089 44090 * exception handling 44091 44092 * invoking constructors and destructors 44093 44094 * layout, alignment, and padding of classes 44095 44096 * layout and alignment of virtual tables 44097 44098 Some GCC compilation options cause the compiler to generate code that 44099does not conform to the platform's default ABI. Other options cause 44100different program behavior for implementation-defined features that are 44101not covered by an ABI. These options are provided for consistency with 44102other compilers that do not follow the platform's default ABI or the 44103usual behavior of implementation-defined features for the platform. Be 44104very careful about using such options. 44105 44106 Most platforms have a well-defined ABI that covers C code, but ABIs 44107that cover C++ functionality are not yet common. 44108 44109 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 44110written, vendor-neutral C++ ABI that was designed to be specific to 4411164-bit Itanium but also includes generic specifications that apply to 44112any platform. This C++ ABI is also implemented by other compiler 44113vendors on some platforms, notably GNU/Linux and BSD systems. We have 44114tried hard to provide a stable ABI that will be compatible with future 44115GCC releases, but it is possible that we will encounter problems that 44116make this difficult. Such problems could include different 44117interpretations of the C++ ABI by different vendors, bugs in the ABI, or 44118bugs in the implementation of the ABI in different compilers. GCC's 44119`-Wabi' switch warns when G++ generates code that is probably not 44120compatible with the C++ ABI. 44121 44122 The C++ library used with a C++ compiler includes the Standard C++ 44123Library, with functionality defined in the C++ Standard, plus language 44124runtime support. The runtime support is included in a C++ ABI, but 44125there is no formal ABI for the Standard C++ Library. Two 44126implementations of that library are interoperable if one follows the 44127de-facto ABI of the other and if they are both built with the same 44128compiler, or with compilers that conform to the same ABI for C++ 44129compiler and runtime support. 44130 44131 When G++ and another C++ compiler conform to the same C++ ABI, but the 44132implementations of the Standard C++ Library that they normally use do 44133not follow the same ABI for the Standard C++ Library, object files 44134built with those compilers can be used in the same program only if they 44135use the same C++ library. This requires specifying the location of the 44136C++ library header files when invoking the compiler whose usual library 44137is not being used. The location of GCC's C++ header files depends on 44138how the GCC build was configured, but can be seen by using the G++ `-v' 44139option. With default configuration options for G++ 3.3 the compile 44140line for a different C++ compiler needs to include 44141 44142 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 44143 44144 Similarly, compiling code with G++ that must use a C++ library other 44145than the GNU C++ library requires specifying the location of the header 44146files for that other library. 44147 44148 The most straightforward way to link a program to use a particular C++ 44149library is to use a C++ driver that specifies that C++ library by 44150default. The `g++' driver, for example, tells the linker where to find 44151GCC's C++ library (`libstdc++') plus the other libraries and startup 44152files it needs, in the proper order. 44153 44154 If a program must use a different C++ library and it's not possible to 44155do the final link using a C++ driver that uses that library by default, 44156it is necessary to tell `g++' the location and name of that library. 44157It might also be necessary to specify different startup files and other 44158runtime support libraries, and to suppress the use of GCC's support 44159libraries with one or more of the options `-nostdlib', `-nostartfiles', 44160and `-nodefaultlibs'. 44161 44162 44163File: gcc.info, Node: Gcov, Next: Gcov-tool, Prev: Compatibility, Up: Top 44164 4416510 `gcov'--a Test Coverage Program 44166********************************** 44167 44168`gcov' is a tool you can use in conjunction with GCC to test code 44169coverage in your programs. 44170 44171* Menu: 44172 44173* Gcov Intro:: Introduction to gcov. 44174* Invoking Gcov:: How to use gcov. 44175* Gcov and Optimization:: Using gcov with GCC optimization. 44176* Gcov Data Files:: The files used by gcov. 44177* Cross-profiling:: Data file relocation. 44178 44179 44180File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 44181 4418210.1 Introduction to `gcov' 44183=========================== 44184 44185`gcov' is a test coverage program. Use it in concert with GCC to 44186analyze your programs to help create more efficient, faster running 44187code and to discover untested parts of your program. You can use 44188`gcov' as a profiling tool to help discover where your optimization 44189efforts will best affect your code. You can also use `gcov' along with 44190the other profiling tool, `gprof', to assess which parts of your code 44191use the greatest amount of computing time. 44192 44193 Profiling tools help you analyze your code's performance. Using a 44194profiler such as `gcov' or `gprof', you can find out some basic 44195performance statistics, such as: 44196 44197 * how often each line of code executes 44198 44199 * what lines of code are actually executed 44200 44201 * how much computing time each section of code uses 44202 44203 Once you know these things about how your code works when compiled, you 44204can look at each module to see which modules should be optimized. 44205`gcov' helps you determine where to work on optimization. 44206 44207 Software developers also use coverage testing in concert with 44208testsuites, to make sure software is actually good enough for a release. 44209Testsuites can verify that a program works as expected; a coverage 44210program tests to see how much of the program is exercised by the 44211testsuite. Developers can then determine what kinds of test cases need 44212to be added to the testsuites to create both better testing and a better 44213final product. 44214 44215 You should compile your code without optimization if you plan to use 44216`gcov' because the optimization, by combining some lines of code into 44217one function, may not give you as much information as you need to look 44218for `hot spots' where the code is using a great deal of computer time. 44219Likewise, because `gcov' accumulates statistics by line (at the lowest 44220resolution), it works best with a programming style that places only 44221one statement on each line. If you use complicated macros that expand 44222to loops or to other control structures, the statistics are less 44223helpful--they only report on the line where the macro call appears. If 44224your complex macros behave like functions, you can replace them with 44225inline functions to solve this problem. 44226 44227 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 44228many times each line of a source file `SOURCEFILE.c' has executed. You 44229can use these logfiles along with `gprof' to aid in fine-tuning the 44230performance of your programs. `gprof' gives timing information you can 44231use along with the information you get from `gcov'. 44232 44233 `gcov' works only on code compiled with GCC. It is not compatible 44234with any other profiling or test coverage mechanism. 44235 44236 44237File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 44238 4423910.2 Invoking `gcov' 44240==================== 44241 44242 gcov [OPTIONS] FILES 44243 44244 `gcov' accepts the following options: 44245 44246`-h' 44247`--help' 44248 Display help about using `gcov' (on the standard output), and exit 44249 without doing any further processing. 44250 44251`-v' 44252`--version' 44253 Display the `gcov' version number (on the standard output), and 44254 exit without doing any further processing. 44255 44256`-a' 44257`--all-blocks' 44258 Write individual execution counts for every basic block. Normally 44259 gcov outputs execution counts only for the main blocks of a line. 44260 With this option you can determine if blocks within a single line 44261 are not being executed. 44262 44263`-b' 44264`--branch-probabilities' 44265 Write branch frequencies to the output file, and write branch 44266 summary info to the standard output. This option allows you to 44267 see how often each branch in your program was taken. 44268 Unconditional branches will not be shown, unless the `-u' option 44269 is given. 44270 44271`-c' 44272`--branch-counts' 44273 Write branch frequencies as the number of branches taken, rather 44274 than the percentage of branches taken. 44275 44276`-n' 44277`--no-output' 44278 Do not create the `gcov' output file. 44279 44280`-l' 44281`--long-file-names' 44282 Create long file names for included source files. For example, if 44283 the header file `x.h' contains code, and was included in the file 44284 `a.c', then running `gcov' on the file `a.c' will produce an 44285 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 44286 can be useful if `x.h' is included in multiple source files and 44287 you want to see the individual contributions. If you use the `-p' 44288 option, both the including and included file names will be 44289 complete path names. 44290 44291`-p' 44292`--preserve-paths' 44293 Preserve complete path information in the names of generated 44294 `.gcov' files. Without this option, just the filename component is 44295 used. With this option, all directories are used, with `/' 44296 characters translated to `#' characters, `.' directory components 44297 removed and unremoveable `..' components renamed to `^'. This is 44298 useful if sourcefiles are in several different directories. 44299 44300`-r' 44301`--relative-only' 44302 Only output information about source files with a relative pathname 44303 (after source prefix elision). Absolute paths are usually system 44304 header files and coverage of any inline functions therein is 44305 normally uninteresting. 44306 44307`-f' 44308`--function-summaries' 44309 Output summaries for each function in addition to the file level 44310 summary. 44311 44312`-o DIRECTORY|FILE' 44313`--object-directory DIRECTORY' 44314`--object-file FILE' 44315 Specify either the directory containing the gcov data files, or the 44316 object path name. The `.gcno', and `.gcda' data files are 44317 searched for using this option. If a directory is specified, the 44318 data files are in that directory and named after the input file 44319 name, without its extension. If a file is specified here, the 44320 data files are named after that file, without its extension. 44321 44322`-s DIRECTORY' 44323`--source-prefix DIRECTORY' 44324 A prefix for source file names to remove when generating the output 44325 coverage files. This option is useful when building in a separate 44326 directory, and the pathname to the source directory is not wanted 44327 when determining the output file names. Note that this prefix 44328 detection is applied before determining whether the source file is 44329 absolute. 44330 44331`-u' 44332`--unconditional-branches' 44333 When branch probabilities are given, include those of 44334 unconditional branches. Unconditional branches are normally not 44335 interesting. 44336 44337`-d' 44338`--display-progress' 44339 Display the progress on the standard output. 44340 44341`-i' 44342`--intermediate-format' 44343 Output gcov file in an easy-to-parse intermediate text format that 44344 can be used by `lcov' or other tools. The output is a single 44345 `.gcov' file per `.gcda' file. No source code is required. 44346 44347 The format of the intermediate `.gcov' file is plain text with one 44348 entry per line 44349 44350 file:SOURCE_FILE_NAME 44351 function:LINE_NUMBER,EXECUTION_COUNT,FUNCTION_NAME 44352 lcount:LINE NUMBER,EXECUTION_COUNT 44353 branch:LINE_NUMBER,BRANCH_COVERAGE_TYPE 44354 44355 Where the BRANCH_COVERAGE_TYPE is 44356 notexec (Branch not executed) 44357 taken (Branch executed and taken) 44358 nottaken (Branch executed, but not taken) 44359 44360 There can be multiple FILE entries in an intermediate gcov 44361 file. All entries following a FILE pertain to that source file 44362 until the next FILE entry. 44363 44364 Here is a sample when `-i' is used in conjunction with `-b' option: 44365 44366 file:array.cc 44367 function:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE 44368 function:22,1,main 44369 lcount:11,1 44370 lcount:12,1 44371 lcount:14,1 44372 branch:14,taken 44373 lcount:26,1 44374 branch:28,nottaken 44375 44376`-m' 44377`--demangled-names' 44378 Display demangled function names in output. The default is to show 44379 mangled function names. 44380 44381 44382 `gcov' should be run with the current directory the same as that when 44383you invoked the compiler. Otherwise it will not be able to locate the 44384source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 44385current directory. These contain the coverage information of the 44386source file they correspond to. One `.gcov' file is produced for each 44387source (or header) file containing code, which was compiled to produce 44388the data files. The MANGLEDNAME part of the output file name is 44389usually simply the source file name, but can be something more 44390complicated if the `-l' or `-p' options are given. Refer to those 44391options for details. 44392 44393 If you invoke `gcov' with multiple input files, the contributions from 44394each input file are summed. Typically you would invoke it with the 44395same list of files as the final link of your executable. 44396 44397 The `.gcov' files contain the `:' separated fields along with program 44398source code. The format is 44399 44400 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 44401 44402 Additional block information may succeed each line, when requested by 44403command line option. The EXECUTION_COUNT is `-' for lines containing 44404no code. Unexecuted lines are marked `#####' or `====', depending on 44405whether they are reachable by non-exceptional paths or only exceptional 44406paths such as C++ exception handlers, respectively. 44407 44408 Some lines of information at the start have LINE_NUMBER of zero. 44409These preamble lines are of the form 44410 44411 -:0:TAG:VALUE 44412 44413 The ordering and number of these preamble lines will be augmented as 44414`gcov' development progresses -- do not rely on them remaining 44415unchanged. Use TAG to locate a particular preamble line. 44416 44417 The additional block information is of the form 44418 44419 TAG INFORMATION 44420 44421 The INFORMATION is human readable, but designed to be simple enough 44422for machine parsing too. 44423 44424 When printing percentages, 0% and 100% are only printed when the values 44425are _exactly_ 0% and 100% respectively. Other values which would 44426conventionally be rounded to 0% or 100% are instead printed as the 44427nearest non-boundary value. 44428 44429 When using `gcov', you must first compile your program with two 44430special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 44431compiler to generate additional information needed by gcov (basically a 44432flow graph of the program) and also includes additional code in the 44433object files for generating the extra profiling information needed by 44434gcov. These additional files are placed in the directory where the 44435object file is located. 44436 44437 Running the program will cause profile output to be generated. For 44438each source file compiled with `-fprofile-arcs', an accompanying 44439`.gcda' file will be placed in the object file directory. 44440 44441 Running `gcov' with your program's source file names as arguments will 44442now produce a listing of the code along with frequency of execution for 44443each line. For example, if your program is called `tmp.c', this is 44444what you see when you use the basic `gcov' facility: 44445 44446 $ gcc -fprofile-arcs -ftest-coverage tmp.c 44447 $ a.out 44448 $ gcov tmp.c 44449 90.00% of 10 source lines executed in file tmp.c 44450 Creating tmp.c.gcov. 44451 44452 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 44453 44454 -: 0:Source:tmp.c 44455 -: 0:Graph:tmp.gcno 44456 -: 0:Data:tmp.gcda 44457 -: 0:Runs:1 44458 -: 0:Programs:1 44459 -: 1:#include <stdio.h> 44460 -: 2: 44461 -: 3:int main (void) 44462 1: 4:{ 44463 1: 5: int i, total; 44464 -: 6: 44465 1: 7: total = 0; 44466 -: 8: 44467 11: 9: for (i = 0; i < 10; i++) 44468 10: 10: total += i; 44469 -: 11: 44470 1: 12: if (total != 45) 44471 #####: 13: printf ("Failure\n"); 44472 -: 14: else 44473 1: 15: printf ("Success\n"); 44474 1: 16: return 0; 44475 -: 17:} 44476 44477 When you use the `-a' option, you will get individual block counts, 44478and the output looks like this: 44479 44480 -: 0:Source:tmp.c 44481 -: 0:Graph:tmp.gcno 44482 -: 0:Data:tmp.gcda 44483 -: 0:Runs:1 44484 -: 0:Programs:1 44485 -: 1:#include <stdio.h> 44486 -: 2: 44487 -: 3:int main (void) 44488 1: 4:{ 44489 1: 4-block 0 44490 1: 5: int i, total; 44491 -: 6: 44492 1: 7: total = 0; 44493 -: 8: 44494 11: 9: for (i = 0; i < 10; i++) 44495 11: 9-block 0 44496 10: 10: total += i; 44497 10: 10-block 0 44498 -: 11: 44499 1: 12: if (total != 45) 44500 1: 12-block 0 44501 #####: 13: printf ("Failure\n"); 44502 $$$$$: 13-block 0 44503 -: 14: else 44504 1: 15: printf ("Success\n"); 44505 1: 15-block 0 44506 1: 16: return 0; 44507 1: 16-block 0 44508 -: 17:} 44509 44510 In this mode, each basic block is only shown on one line - the last 44511line of the block. A multi-line block will only contribute to the 44512execution count of that last line, and other lines will not be shown to 44513contain code, unless previous blocks end on those lines. The total 44514execution count of a line is shown and subsequent lines show the 44515execution counts for individual blocks that end on that line. After 44516each block, the branch and call counts of the block will be shown, if 44517the `-b' option is given. 44518 44519 Because of the way GCC instruments calls, a call count can be shown 44520after a line with no individual blocks. As you can see, line 13 44521contains a basic block that was not executed. 44522 44523 When you use the `-b' option, your output looks like this: 44524 44525 $ gcov -b tmp.c 44526 90.00% of 10 source lines executed in file tmp.c 44527 80.00% of 5 branches executed in file tmp.c 44528 80.00% of 5 branches taken at least once in file tmp.c 44529 50.00% of 2 calls executed in file tmp.c 44530 Creating tmp.c.gcov. 44531 44532 Here is a sample of a resulting `tmp.c.gcov' file: 44533 44534 -: 0:Source:tmp.c 44535 -: 0:Graph:tmp.gcno 44536 -: 0:Data:tmp.gcda 44537 -: 0:Runs:1 44538 -: 0:Programs:1 44539 -: 1:#include <stdio.h> 44540 -: 2: 44541 -: 3:int main (void) 44542 function main called 1 returned 1 blocks executed 75% 44543 1: 4:{ 44544 1: 5: int i, total; 44545 -: 6: 44546 1: 7: total = 0; 44547 -: 8: 44548 11: 9: for (i = 0; i < 10; i++) 44549 branch 0 taken 91% (fallthrough) 44550 branch 1 taken 9% 44551 10: 10: total += i; 44552 -: 11: 44553 1: 12: if (total != 45) 44554 branch 0 taken 0% (fallthrough) 44555 branch 1 taken 100% 44556 #####: 13: printf ("Failure\n"); 44557 call 0 never executed 44558 -: 14: else 44559 1: 15: printf ("Success\n"); 44560 call 0 called 1 returned 100% 44561 1: 16: return 0; 44562 -: 17:} 44563 44564 For each function, a line is printed showing how many times the 44565function is called, how many times it returns and what percentage of the 44566function's blocks were executed. 44567 44568 For each basic block, a line is printed after the last line of the 44569basic block describing the branch or call that ends the basic block. 44570There can be multiple branches and calls listed for a single source 44571line if there are multiple basic blocks that end on that line. In this 44572case, the branches and calls are each given a number. There is no 44573simple way to map these branches and calls back to source constructs. 44574In general, though, the lowest numbered branch or call will correspond 44575to the leftmost construct on the source line. 44576 44577 For a branch, if it was executed at least once, then a percentage 44578indicating the number of times the branch was taken divided by the 44579number of times the branch was executed will be printed. Otherwise, the 44580message "never executed" is printed. 44581 44582 For a call, if it was executed at least once, then a percentage 44583indicating the number of times the call returned divided by the number 44584of times the call was executed will be printed. This will usually be 44585100%, but may be less for functions that call `exit' or `longjmp', and 44586thus may not return every time they are called. 44587 44588 The execution counts are cumulative. If the example program were 44589executed again without removing the `.gcda' file, the count for the 44590number of times each line in the source was executed would be added to 44591the results of the previous run(s). This is potentially useful in 44592several ways. For example, it could be used to accumulate data over a 44593number of program runs as part of a test verification suite, or to 44594provide more accurate long-term information over a large number of 44595program runs. 44596 44597 The data in the `.gcda' files is saved immediately before the program 44598exits. For each source file compiled with `-fprofile-arcs', the 44599profiling code first attempts to read in an existing `.gcda' file; if 44600the file doesn't match the executable (differing number of basic block 44601counts) it will ignore the contents of the file. It then adds in the 44602new execution counts and finally writes the data to the file. 44603 44604 44605File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 44606 4460710.3 Using `gcov' with GCC Optimization 44608======================================= 44609 44610If you plan to use `gcov' to help optimize your code, you must first 44611compile your program with two special GCC options: `-fprofile-arcs 44612-ftest-coverage'. Aside from that, you can use any other GCC options; 44613but if you want to prove that every single line in your program was 44614executed, you should not compile with optimization at the same time. 44615On some machines the optimizer can eliminate some simple code lines by 44616combining them with other lines. For example, code like this: 44617 44618 if (a != b) 44619 c = 1; 44620 else 44621 c = 0; 44622 44623can be compiled into one instruction on some machines. In this case, 44624there is no way for `gcov' to calculate separate execution counts for 44625each line because there isn't separate code for each line. Hence the 44626`gcov' output looks like this if you compiled the program with 44627optimization: 44628 44629 100: 12:if (a != b) 44630 100: 13: c = 1; 44631 100: 14:else 44632 100: 15: c = 0; 44633 44634 The output shows that this block of code, combined by optimization, 44635executed 100 times. In one sense this result is correct, because there 44636was only one instruction representing all four of these lines. However, 44637the output does not indicate how many times the result was 0 and how 44638many times the result was 1. 44639 44640 Inlineable functions can create unexpected line counts. Line counts 44641are shown for the source code of the inlineable function, but what is 44642shown depends on where the function is inlined, or if it is not inlined 44643at all. 44644 44645 If the function is not inlined, the compiler must emit an out of line 44646copy of the function, in any object file that needs it. If `fileA.o' 44647and `fileB.o' both contain out of line bodies of a particular 44648inlineable function, they will also both contain coverage counts for 44649that function. When `fileA.o' and `fileB.o' are linked together, the 44650linker will, on many systems, select one of those out of line bodies 44651for all calls to that function, and remove or ignore the other. 44652Unfortunately, it will not remove the coverage counters for the unused 44653function body. Hence when instrumented, all but one use of that 44654function will show zero counts. 44655 44656 If the function is inlined in several places, the block structure in 44657each location might not be the same. For instance, a condition might 44658now be calculable at compile time in some instances. Because the 44659coverage of all the uses of the inline function will be shown for the 44660same source lines, the line counts themselves might seem inconsistent. 44661 44662 Long-running applications can use the `_gcov_reset' and `_gcov_dump' 44663facilities to restrict profile collection to the program region of 44664interest. Calling `_gcov_reset(void)' will clear all profile counters 44665to zero, and calling `_gcov_dump(void)' will cause the profile 44666information collected at that point to be dumped to `.gcda' output 44667files. 44668 44669 44670File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 44671 4467210.4 Brief Description of `gcov' Data Files 44673=========================================== 44674 44675`gcov' uses two files for profiling. The names of these files are 44676derived from the original _object_ file by substituting the file suffix 44677with either `.gcno', or `.gcda'. The files contain coverage and 44678profile data stored in a platform-independent format. The `.gcno' 44679files are placed in the same directory as the object file. By default, 44680the `.gcda' files are also stored in the same directory as the object 44681file, but the GCC `-fprofile-dir' option may be used to store the 44682`.gcda' files in a separate directory. 44683 44684 The `.gcno' notes file is generated when the source file is compiled 44685with the GCC `-ftest-coverage' option. It contains information to 44686reconstruct the basic block graphs and assign source line numbers to 44687blocks. 44688 44689 The `.gcda' count data file is generated when a program containing 44690object files built with the GCC `-fprofile-arcs' option is executed. A 44691separate `.gcda' file is created for each object file compiled with 44692this option. It contains arc transition counts, value profile counts, 44693and some summary information. 44694 44695 The full details of the file format is specified in `gcov-io.h', and 44696functions provided in that header file should be used to access the 44697coverage files. 44698 44699 44700File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 44701 4470210.5 Data File Relocation to Support Cross-Profiling 44703==================================================== 44704 44705Running the program will cause profile output to be generated. For each 44706source file compiled with `-fprofile-arcs', an accompanying `.gcda' 44707file will be placed in the object file directory. That implicitly 44708requires running the program on the same system as it was built or 44709having the same absolute directory structure on the target system. The 44710program will try to create the needed directory structure, if it is not 44711already present. 44712 44713 To support cross-profiling, a program compiled with `-fprofile-arcs' 44714can relocate the data files based on two environment variables: 44715 44716 * GCOV_PREFIX contains the prefix to add to the absolute paths in 44717 the object file. Prefix can be absolute, or relative. The default 44718 is no prefix. 44719 44720 * GCOV_PREFIX_STRIP indicates the how many initial directory names 44721 to strip off the hardwired absolute paths. Default value is 0. 44722 44723 _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is 44724 undefined, then a relative path is made out of the hardwired 44725 absolute paths. 44726 44727 For example, if the object file `/user/build/foo.o' was built with 44728`-fprofile-arcs', the final executable will try to create the data file 44729`/user/build/foo.gcda' when running on the target system. This will 44730fail if the corresponding directory does not exist and it is unable to 44731create it. This can be overcome by, for example, setting the 44732environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. 44733Such a setting will name the data file `/target/run/build/foo.gcda'. 44734 44735 You must move the data files to the expected directory tree in order to 44736use them for profile directed optimizations (`--use-profile'), or to 44737use the `gcov' tool. 44738 44739 44740File: gcc.info, Node: Gcov-tool, Next: Trouble, Prev: Gcov, Up: Top 44741 4474211 `gcov-tool'--an Offline Gcda Profile Processing Tool 44743******************************************************* 44744 44745`gcov-tool' is a tool you can use in conjunction with GCC to manipulate 44746or process gcda profile files offline. 44747 44748* Menu: 44749 44750* Gcov-tool Intro:: Introduction to gcov-tool. 44751* Invoking Gcov-tool:: How to use gcov-tool. 44752 44753 44754File: gcc.info, Node: Gcov-tool Intro, Next: Invoking Gcov-tool, Up: Gcov-tool 44755 4475611.1 Introduction to `gcov-tool' 44757================================ 44758 44759`gcov-tool' is an offline tool to process gcc's gcda profile files. 44760 44761 Current gcov-tool supports the following functionalities: 44762 44763 * merge two sets of profiles with weights. 44764 44765 * read one set of profile and rewrite profile contents. One can 44766 scale or normalize the count values. 44767 44768 Examples of the use cases for this tool are: 44769 * Collect the profiles for different set of inputs, and use this 44770 tool to merge them. One can specify the weight to factor in the 44771 relative importance of each input. 44772 44773 * Rewrite the profile after removing a subset of the gcda files, 44774 while maintaining the consistency of the summary and the histogram. 44775 44776 * It can also be used to debug or libgcov code as the tools shares 44777 the majority code as the runtime library. 44778 44779 Note that for the merging operation, this profile generated offline may 44780contain slight different values from the online merged profile. Here are 44781a list of typical differences: 44782 44783 * histogram difference: This offline tool recomputes the histogram 44784 after merging the counters. The resulting histogram, therefore, is 44785 precise. The online merging does not have this capability - the 44786 histogram is merged from two histograms and the result is an 44787 approximation. 44788 44789 * summary checksum difference: Summary checksum uses a CRC32 44790 operation. The value depends on the link list order of gcov-info 44791 objects. This order is different in gcov-tool from that in the 44792 online merge. It's expected to have different summary checksums. 44793 It does not really matter as the compiler does not use this 44794 checksum anywhere. 44795 44796 * value profile counter values difference: Some counter values for 44797 value profile are runtime dependent, like heap addresses. It's 44798 normal to see some difference in these kind of counters. 44799 44800 44801File: gcc.info, Node: Invoking Gcov-tool, Prev: Gcov-tool Intro, Up: Gcov-tool 44802 4480311.2 Invoking `gcov-tool' 44804========================= 44805 44806 gcov-tool [GLOBAL-OPTIONS] SUB_COMMAND [SUB_COMMAND-OPTIONS] PROFILE_DIR 44807 44808 `gcov-tool' accepts the following options: 44809 44810`-h' 44811`--help' 44812 Display help about using `gcov-tool' (on the standard output), and 44813 exit without doing any further processing. 44814 44815`-v' 44816`--version' 44817 Display the `gcov-tool' version number (on the standard output), 44818 and exit without doing any further processing. 44819 44820`merge' 44821 Merge two profile directories. 44822 44823 `-v' 44824 `--verbose' 44825 Set the verbose mode. 44826 44827 `-o DIRECTORY' 44828 `--output DIRECTORY' 44829 Set the output profile directory. Default output directory 44830 name is MERGED_PROFILE. 44831 44832 `-w W1,W2' 44833 `--weight W1,W2' 44834 Set the merge weights of the DIRECTORY1 and DIRECTORY2, 44835 respectively. The default weights are 1 for both. 44836 44837`rewrite' 44838 Read the specified profile directory and rewrite to a new 44839 directory. 44840 44841 `-v' 44842 `--verbose' 44843 Set the verbose mode. 44844 44845 `-o DIRECTORY' 44846 `--output DIRECTORY' 44847 Set the output profile directory. Default output name is 44848 REWRITE_PROFILE. 44849 44850 `-s FLOAT_OR_SIMPLE-FRAC_VALUE' 44851 `--scale FLOAT_OR_SIMPLE-FRAC_VALUE' 44852 Scale the profile counters. The specified value can be in 44853 floating point value, or simple fraction value form, such 1, 44854 2, 2/3, and 5/3. 44855 44856 `-n LONG_LONG_VALUE' 44857 `--normalize <long_long_value>' 44858 Normalize the profile. The specified value is the max counter 44859 value in the new profile. 44860 44861`overlap' 44862 Computer the overlap score between the two specified profile 44863 directories. The overlap score is computed based on the arc 44864 profiles. It is defined as the sum of min (p1_counter[i] / 44865 p1_sum_all, p2_counter[i] / p2_sum_all), for all arc counter i, 44866 where p1_counter[i] and p2_counter[i] are two matched counters and 44867 p1_sum_all and p2_sum_all are the sum of counter values in profile 44868 1 and profile 2, respectively. 44869 44870 `-v' 44871 `--verbose' 44872 Set the verbose mode. 44873 44874 `-h' 44875 `--hotonly' 44876 Only print info for hot objects/functions. 44877 44878 `-f' 44879 `--function' 44880 Print function level overlap score. 44881 44882 `-F' 44883 `--fullname' 44884 Print full gcda filename. 44885 44886 `-o' 44887 `--object' 44888 Print object level overlap score. 44889 44890 `-t FLOAT' 44891 `--hot_threshold <float>' 44892 Set the threshold for hot counter value. 44893 44894 44895 44896File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov-tool, Up: Top 44897 4489812 Known Causes of Trouble with GCC 44899*********************************** 44900 44901This section describes known problems that affect users of GCC. Most 44902of these are not GCC bugs per se--if they were, we would fix them. But 44903the result for a user may be like the result of a bug. 44904 44905 Some of these problems are due to bugs in other software, some are 44906missing features that are too much work to add, and some are places 44907where people's opinions differ as to what is best. 44908 44909* Menu: 44910 44911* Actual Bugs:: Bugs we will fix later. 44912* Interoperation:: Problems using GCC with other compilers, 44913 and with certain linkers, assemblers and debuggers. 44914* Incompatibilities:: GCC is incompatible with traditional C. 44915* Fixed Headers:: GCC uses corrected versions of system header files. 44916 This is necessary, but doesn't always work smoothly. 44917* Standard Libraries:: GCC uses the system C library, which might not be 44918 compliant with the ISO C standard. 44919* Disappointments:: Regrettable things we can't change, but not quite bugs. 44920* C++ Misunderstandings:: Common misunderstandings with GNU C++. 44921* Non-bugs:: Things we think are right, but some others disagree. 44922* Warnings and Errors:: Which problems in your code get warnings, 44923 and which get errors. 44924 44925 44926File: gcc.info, Node: Actual Bugs, Next: Interoperation, Up: Trouble 44927 4492812.1 Actual Bugs We Haven't Fixed Yet 44929===================================== 44930 44931 * The `fixincludes' script interacts badly with automounters; if the 44932 directory of system header files is automounted, it tends to be 44933 unmounted while `fixincludes' is running. This would seem to be a 44934 bug in the automounter. We don't know any good way to work around 44935 it. 44936 44937 44938File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Actual Bugs, Up: Trouble 44939 4494012.2 Interoperation 44941=================== 44942 44943This section lists various difficulties encountered in using GCC 44944together with other compilers or with the assemblers, linkers, 44945libraries and debuggers on certain systems. 44946 44947 * On many platforms, GCC supports a different ABI for C++ than do 44948 other compilers, so the object files compiled by GCC cannot be 44949 used with object files generated by another C++ compiler. 44950 44951 An area where the difference is most apparent is name mangling. 44952 The use of different name mangling is intentional, to protect you 44953 from more subtle problems. Compilers differ as to many internal 44954 details of C++ implementation, including: how class instances are 44955 laid out, how multiple inheritance is implemented, and how virtual 44956 function calls are handled. If the name encoding were made the 44957 same, your programs would link against libraries provided from 44958 other compilers--but the programs would then crash when run. 44959 Incompatible libraries are then detected at link time, rather than 44960 at run time. 44961 44962 * On some BSD systems, including some versions of Ultrix, use of 44963 profiling causes static variable destructors (currently used only 44964 in C++) not to be run. 44965 44966 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 44967 boundary, and it expects every `double' to be so aligned. The Sun 44968 compiler usually gives `double' values 8-byte alignment, with one 44969 exception: function arguments of type `double' may not be aligned. 44970 44971 As a result, if a function compiled with Sun CC takes the address 44972 of an argument of type `double' and passes this pointer of type 44973 `double *' to a function compiled with GCC, dereferencing the 44974 pointer may cause a fatal signal. 44975 44976 One way to solve this problem is to compile your entire program 44977 with GCC. Another solution is to modify the function that is 44978 compiled with Sun CC to copy the argument into a local variable; 44979 local variables are always properly aligned. A third solution is 44980 to modify the function that uses the pointer to dereference it via 44981 the following function `access_double' instead of directly with 44982 `*': 44983 44984 inline double 44985 access_double (double *unaligned_ptr) 44986 { 44987 union d2i { double d; int i[2]; }; 44988 44989 union d2i *p = (union d2i *) unaligned_ptr; 44990 union d2i u; 44991 44992 u.i[0] = p->i[0]; 44993 u.i[1] = p->i[1]; 44994 44995 return u.d; 44996 } 44997 44998 Storing into the pointer can be done likewise with the same union. 44999 45000 * On Solaris, the `malloc' function in the `libmalloc.a' library may 45001 allocate memory that is only 4 byte aligned. Since GCC on the 45002 SPARC assumes that doubles are 8 byte aligned, this may result in a 45003 fatal signal if doubles are stored in memory allocated by the 45004 `libmalloc.a' library. 45005 45006 The solution is to not use the `libmalloc.a' library. Use instead 45007 `malloc' and related functions from `libc.a'; they do not have 45008 this problem. 45009 45010 * On the HP PA machine, ADB sometimes fails to work on functions 45011 compiled with GCC. Specifically, it fails to work on functions 45012 that use `alloca' or variable-size arrays. This is because GCC 45013 doesn't generate HP-UX unwind descriptors for such functions. It 45014 may even be impossible to generate them. 45015 45016 * Debugging (`-g') is not supported on the HP PA machine, unless you 45017 use the preliminary GNU tools. 45018 45019 * Taking the address of a label may generate errors from the HP-UX 45020 PA assembler. GAS for the PA does not have this problem. 45021 45022 * Using floating point parameters for indirect calls to static 45023 functions will not work when using the HP assembler. There simply 45024 is no way for GCC to specify what registers hold arguments for 45025 static functions when using the HP assembler. GAS for the PA does 45026 not have this problem. 45027 45028 * In extremely rare cases involving some very large functions you may 45029 receive errors from the HP linker complaining about an out of 45030 bounds unconditional branch offset. This used to occur more often 45031 in previous versions of GCC, but is now exceptionally rare. If 45032 you should run into it, you can work around by making your 45033 function smaller. 45034 45035 * GCC compiled code sometimes emits warnings from the HP-UX 45036 assembler of the form: 45037 45038 (warning) Use of GR3 when 45039 frame >= 8192 may cause conflict. 45040 45041 These warnings are harmless and can be safely ignored. 45042 45043 * In extremely rare cases involving some very large functions you may 45044 receive errors from the AIX Assembler complaining about a 45045 displacement that is too large. If you should run into it, you 45046 can work around by making your function smaller. 45047 45048 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 45049 semantics which merges global symbols between libraries and 45050 applications, especially necessary for C++ streams functionality. 45051 This is not the default behavior of AIX shared libraries and 45052 dynamic linking. `libstdc++.a' is built on AIX with 45053 "runtime-linking" enabled so that symbol merging can occur. To 45054 utilize this feature, the application linked with `libstdc++.a' 45055 must include the `-Wl,-brtl' flag on the link line. G++ cannot 45056 impose this because this option may interfere with the semantics 45057 of the user program and users may not always use `g++' to link his 45058 or her application. Applications are not required to use the 45059 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 45060 library which is not dependent on the symbol merging semantics 45061 will continue to function correctly. 45062 45063 * An application can interpose its own definition of functions for 45064 functions invoked by `libstdc++.a' with "runtime-linking" enabled 45065 on AIX. To accomplish this the application must be linked with 45066 "runtime-linking" option and the functions explicitly must be 45067 exported by the application (`-Wl,-brtl,-bE:exportfile'). 45068 45069 * AIX on the RS/6000 provides support (NLS) for environments outside 45070 of the United States. Compilers and assemblers use NLS to support 45071 locale-specific representations of various objects including 45072 floating-point numbers (`.' vs `,' for separating decimal 45073 fractions). There have been problems reported where the library 45074 linked with GCC does not produce the same floating-point formats 45075 that the assembler accepts. If you have this problem, set the 45076 `LANG' environment variable to `C' or `En_US'. 45077 45078 * Even if you specify `-fdollars-in-identifiers', you cannot 45079 successfully use `$' in identifiers on the RS/6000 due to a 45080 restriction in the IBM assembler. GAS supports these identifiers. 45081 45082 45083 45084File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 45085 4508612.3 Incompatibilities of GCC 45087============================= 45088 45089There are several noteworthy incompatibilities between GNU C and K&R 45090(non-ISO) versions of C. 45091 45092 * GCC normally makes string constants read-only. If several 45093 identical-looking string constants are used, GCC stores only one 45094 copy of the string. 45095 45096 One consequence is that you cannot call `mktemp' with a string 45097 constant argument. The function `mktemp' always alters the string 45098 its argument points to. 45099 45100 Another consequence is that `sscanf' does not work on some very 45101 old systems when passed a string constant as its format control 45102 string or input. This is because `sscanf' incorrectly tries to 45103 write into the string constant. Likewise `fscanf' and `scanf'. 45104 45105 The solution to these problems is to change the program to use 45106 `char'-array variables with initialization strings for these 45107 purposes instead of string constants. 45108 45109 * `-2147483648' is positive. 45110 45111 This is because 2147483648 cannot fit in the type `int', so 45112 (following the ISO C rules) its data type is `unsigned long int'. 45113 Negating this value yields 2147483648 again. 45114 45115 * GCC does not substitute macro arguments when they appear inside of 45116 string constants. For example, the following macro in GCC 45117 45118 #define foo(a) "a" 45119 45120 will produce output `"a"' regardless of what the argument A is. 45121 45122 * When you use `setjmp' and `longjmp', the only automatic variables 45123 guaranteed to remain valid are those declared `volatile'. This is 45124 a consequence of automatic register allocation. Consider this 45125 function: 45126 45127 jmp_buf j; 45128 45129 foo () 45130 { 45131 int a, b; 45132 45133 a = fun1 (); 45134 if (setjmp (j)) 45135 return a; 45136 45137 a = fun2 (); 45138 /* `longjmp (j)' may occur in `fun3'. */ 45139 return a + fun3 (); 45140 } 45141 45142 Here `a' may or may not be restored to its first value when the 45143 `longjmp' occurs. If `a' is allocated in a register, then its 45144 first value is restored; otherwise, it keeps the last value stored 45145 in it. 45146 45147 If you use the `-W' option with the `-O' option, you will get a 45148 warning when GCC thinks such a problem might be possible. 45149 45150 * Programs that use preprocessing directives in the middle of macro 45151 arguments do not work with GCC. For example, a program like this 45152 will not work: 45153 45154 foobar ( 45155 #define luser 45156 hack) 45157 45158 ISO C does not permit such a construct. 45159 45160 * K&R compilers allow comments to cross over an inclusion boundary 45161 (i.e. started in an include file and ended in the including file). 45162 45163 * Declarations of external variables and functions within a block 45164 apply only to the block containing the declaration. In other 45165 words, they have the same scope as any other declaration in the 45166 same place. 45167 45168 In some other C compilers, an `extern' declaration affects all the 45169 rest of the file even if it happens within a block. 45170 45171 * In traditional C, you can combine `long', etc., with a typedef 45172 name, as shown here: 45173 45174 typedef int foo; 45175 typedef long foo bar; 45176 45177 In ISO C, this is not allowed: `long' and other type modifiers 45178 require an explicit `int'. 45179 45180 * PCC allows typedef names to be used as function parameters. 45181 45182 * Traditional C allows the following erroneous pair of declarations 45183 to appear together in a given scope: 45184 45185 typedef int foo; 45186 typedef foo foo; 45187 45188 * GCC treats all characters of identifiers as significant. 45189 According to K&R-1 (2.2), "No more than the first eight characters 45190 are significant, although more may be used.". Also according to 45191 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 45192 the first character must be a letter. The underscore _ counts as 45193 a letter.", but GCC also allows dollar signs in identifiers. 45194 45195 * PCC allows whitespace in the middle of compound assignment 45196 operators such as `+='. GCC, following the ISO standard, does not 45197 allow this. 45198 45199 * GCC complains about unterminated character constants inside of 45200 preprocessing conditionals that fail. Some programs have English 45201 comments enclosed in conditionals that are guaranteed to fail; if 45202 these comments contain apostrophes, GCC will probably report an 45203 error. For example, this code would produce an error: 45204 45205 #if 0 45206 You can't expect this to work. 45207 #endif 45208 45209 The best solution to such a problem is to put the text into an 45210 actual C comment delimited by `/*...*/'. 45211 45212 * Many user programs contain the declaration `long time ();'. In the 45213 past, the system header files on many systems did not actually 45214 declare `time', so it did not matter what type your program 45215 declared it to return. But in systems with ISO C headers, `time' 45216 is declared to return `time_t', and if that is not the same as 45217 `long', then `long time ();' is erroneous. 45218 45219 The solution is to change your program to use appropriate system 45220 headers (`<time.h>' on systems with ISO C headers) and not to 45221 declare `time' if the system header files declare it, or failing 45222 that to use `time_t' as the return type of `time'. 45223 45224 * When compiling functions that return `float', PCC converts it to a 45225 double. GCC actually returns a `float'. If you are concerned 45226 with PCC compatibility, you should declare your functions to return 45227 `double'; you might as well say what you mean. 45228 45229 * When compiling functions that return structures or unions, GCC 45230 output code normally uses a method different from that used on most 45231 versions of Unix. As a result, code compiled with GCC cannot call 45232 a structure-returning function compiled with PCC, and vice versa. 45233 45234 The method used by GCC is as follows: a structure or union which is 45235 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 45236 union with any other size is stored into an address supplied by 45237 the caller (usually in a special, fixed register, but on some 45238 machines it is passed on the stack). The target hook 45239 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 45240 45241 By contrast, PCC on most target machines returns structures and 45242 unions of any size by copying the data into an area of static 45243 storage, and then returning the address of that storage as if it 45244 were a pointer value. The caller must copy the data from that 45245 memory area to the place where the value is wanted. GCC does not 45246 use this method because it is slower and nonreentrant. 45247 45248 On some newer machines, PCC uses a reentrant convention for all 45249 structure and union returning. GCC on most of these machines uses 45250 a compatible convention when returning structures and unions in 45251 memory, but still returns small structures and unions in registers. 45252 45253 You can tell GCC to use a compatible convention for all structure 45254 and union returning with the option `-fpcc-struct-return'. 45255 45256 * GCC complains about program fragments such as `0x74ae-0x4000' 45257 which appear to be two hexadecimal constants separated by the minus 45258 operator. Actually, this string is a single "preprocessing token". 45259 Each such token must correspond to one token in C. Since this 45260 does not, GCC prints an error message. Although it may appear 45261 obvious that what is meant is an operator and two values, the ISO 45262 C standard specifically requires that this be treated as erroneous. 45263 45264 A "preprocessing token" is a "preprocessing number" if it begins 45265 with a digit and is followed by letters, underscores, digits, 45266 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 45267 character sequences. (In strict C90 mode, the sequences `p+', 45268 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 45269 45270 To make the above program fragment valid, place whitespace in 45271 front of the minus sign. This whitespace will end the 45272 preprocessing number. 45273 45274 45275File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 45276 4527712.4 Fixed Header Files 45278======================= 45279 45280GCC needs to install corrected versions of some system header files. 45281This is because most target systems have some header files that won't 45282work with GCC unless they are changed. Some have bugs, some are 45283incompatible with ISO C, and some depend on special features of other 45284compilers. 45285 45286 Installing GCC automatically creates and installs the fixed header 45287files, by running a program called `fixincludes'. Normally, you don't 45288need to pay attention to this. But there are cases where it doesn't do 45289the right thing automatically. 45290 45291 * If you update the system's header files, such as by installing a 45292 new system version, the fixed header files of GCC are not 45293 automatically updated. They can be updated using the `mkheaders' 45294 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 45295 45296 * On some systems, header file directories contain machine-specific 45297 symbolic links in certain places. This makes it possible to share 45298 most of the header files among hosts running the same version of 45299 the system on different machine models. 45300 45301 The programs that fix the header files do not understand this 45302 special way of using symbolic links; therefore, the directory of 45303 fixed header files is good only for the machine model used to 45304 build it. 45305 45306 It is possible to make separate sets of fixed header files for the 45307 different machine models, and arrange a structure of symbolic 45308 links so as to use the proper set, but you'll have to do this by 45309 hand. 45310 45311 45312File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 45313 4531412.5 Standard Libraries 45315======================= 45316 45317GCC by itself attempts to be a conforming freestanding implementation. 45318*Note Language Standards Supported by GCC: Standards, for details of 45319what this means. Beyond the library facilities required of such an 45320implementation, the rest of the C library is supplied by the vendor of 45321the operating system. If that C library doesn't conform to the C 45322standards, then your programs might get warnings (especially when using 45323`-Wall') that you don't expect. 45324 45325 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 45326while the C standard says that `sprintf' returns an `int'. The 45327`fixincludes' program could make the prototype for this function match 45328the Standard, but that would be wrong, since the function will still 45329return `char *'. 45330 45331 If you need a Standard compliant library, then you need to find one, as 45332GCC does not provide one. The GNU C library (called `glibc') provides 45333ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 45334HURD-based GNU systems; no recent version of it supports other systems, 45335though some very old versions did. Version 2.2 of the GNU C library 45336includes nearly complete C99 support. You could also ask your 45337operating system vendor if newer libraries are available. 45338 45339 45340File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 45341 4534212.6 Disappointments and Misunderstandings 45343========================================== 45344 45345These problems are perhaps regrettable, but we don't know any practical 45346way around them. 45347 45348 * Certain local variables aren't recognized by debuggers when you 45349 compile with optimization. 45350 45351 This occurs because sometimes GCC optimizes the variable out of 45352 existence. There is no way to tell the debugger how to compute the 45353 value such a variable "would have had", and it is not clear that 45354 would be desirable anyway. So GCC simply does not mention the 45355 eliminated variable when it writes debugging information. 45356 45357 You have to expect a certain amount of disagreement between the 45358 executable and your source code, when you use optimization. 45359 45360 * Users often think it is a bug when GCC reports an error for code 45361 like this: 45362 45363 int foo (struct mumble *); 45364 45365 struct mumble { ... }; 45366 45367 int foo (struct mumble *x) 45368 { ... } 45369 45370 This code really is erroneous, because the scope of `struct 45371 mumble' in the prototype is limited to the argument list 45372 containing it. It does not refer to the `struct mumble' defined 45373 with file scope immediately below--they are two unrelated types 45374 with similar names in different scopes. 45375 45376 But in the definition of `foo', the file-scope type is used 45377 because that is available to be inherited. Thus, the definition 45378 and the prototype do not match, and you get an error. 45379 45380 This behavior may seem silly, but it's what the ISO standard 45381 specifies. It is easy enough for you to make your code work by 45382 moving the definition of `struct mumble' above the prototype. 45383 It's not worth being incompatible with ISO C just to avoid an 45384 error for the example shown above. 45385 45386 * Accesses to bit-fields even in volatile objects works by accessing 45387 larger objects, such as a byte or a word. You cannot rely on what 45388 size of object is accessed in order to read or write the 45389 bit-field; it may even vary for a given bit-field according to the 45390 precise usage. 45391 45392 If you care about controlling the amount of memory that is 45393 accessed, use volatile but do not use bit-fields. 45394 45395 * GCC comes with shell scripts to fix certain known problems in 45396 system header files. They install corrected copies of various 45397 header files in a special directory where only GCC will normally 45398 look for them. The scripts adapt to various systems by searching 45399 all the system header files for the problem cases that we know 45400 about. 45401 45402 If new system header files are installed, nothing automatically 45403 arranges to update the corrected header files. They can be 45404 updated using the `mkheaders' script installed in 45405 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 45406 45407 * On 68000 and x86 systems, for instance, you can get paradoxical 45408 results if you test the precise values of floating point numbers. 45409 For example, you can find that a floating point value which is not 45410 a NaN is not equal to itself. This results from the fact that the 45411 floating point registers hold a few more bits of precision than 45412 fit in a `double' in memory. Compiled code moves values between 45413 memory and floating point registers at its convenience, and moving 45414 them into memory truncates them. 45415 45416 You can partially avoid this problem by using the `-ffloat-store' 45417 option (*note Optimize Options::). 45418 45419 * On AIX and other platforms without weak symbol support, templates 45420 need to be instantiated explicitly and symbols for static members 45421 of templates will not be generated. 45422 45423 * On AIX, GCC scans object files and library archives for static 45424 constructors and destructors when linking an application before the 45425 linker prunes unreferenced symbols. This is necessary to prevent 45426 the AIX linker from mistakenly assuming that static constructor or 45427 destructor are unused and removing them before the scanning can 45428 occur. All static constructors and destructors found will be 45429 referenced even though the modules in which they occur may not be 45430 used by the program. This may lead to both increased executable 45431 size and unexpected symbol references. 45432 45433 45434File: gcc.info, Node: C++ Misunderstandings, Next: Non-bugs, Prev: Disappointments, Up: Trouble 45435 4543612.7 Common Misunderstandings with GNU C++ 45437========================================== 45438 45439C++ is a complex language and an evolving one, and its standard 45440definition (the ISO C++ standard) was only recently completed. As a 45441result, your C++ compiler may occasionally surprise you, even when its 45442behavior is correct. This section discusses some areas that frequently 45443give rise to questions of this sort. 45444 45445* Menu: 45446 45447* Static Definitions:: Static member declarations are not definitions 45448* Name lookup:: Name lookup, templates, and accessing members of base classes 45449* Temporaries:: Temporaries may vanish before you expect 45450* Copy Assignment:: Copy Assignment operators copy virtual bases twice 45451 45452 45453File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 45454 4545512.7.1 Declare _and_ Define Static Members 45456------------------------------------------ 45457 45458When a class has static data members, it is not enough to _declare_ the 45459static member; you must also _define_ it. For example: 45460 45461 class Foo 45462 { 45463 ... 45464 void method(); 45465 static int bar; 45466 }; 45467 45468 This declaration only establishes that the class `Foo' has an `int' 45469named `Foo::bar', and a member function named `Foo::method'. But you 45470still need to define _both_ `method' and `bar' elsewhere. According to 45471the ISO standard, you must supply an initializer in one (and only one) 45472source file, such as: 45473 45474 int Foo::bar = 0; 45475 45476 Other C++ compilers may not correctly implement the standard behavior. 45477As a result, when you switch to `g++' from one of these compilers, you 45478may discover that a program that appeared to work correctly in fact 45479does not conform to the standard: `g++' reports as undefined symbols 45480any static data members that lack definitions. 45481 45482 45483File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 45484 4548512.7.2 Name Lookup, Templates, and Accessing Members of Base Classes 45486-------------------------------------------------------------------- 45487 45488The C++ standard prescribes that all names that are not dependent on 45489template parameters are bound to their present definitions when parsing 45490a template function or class.(1) Only names that are dependent are 45491looked up at the point of instantiation. For example, consider 45492 45493 void foo(double); 45494 45495 struct A { 45496 template <typename T> 45497 void f () { 45498 foo (1); // 1 45499 int i = N; // 2 45500 T t; 45501 t.bar(); // 3 45502 foo (t); // 4 45503 } 45504 45505 static const int N; 45506 }; 45507 45508 Here, the names `foo' and `N' appear in a context that does not depend 45509on the type of `T'. The compiler will thus require that they are 45510defined in the context of use in the template, not only before the 45511point of instantiation, and will here use `::foo(double)' and `A::N', 45512respectively. In particular, it will convert the integer value to a 45513`double' when passing it to `::foo(double)'. 45514 45515 Conversely, `bar' and the call to `foo' in the fourth marked line are 45516used in contexts that do depend on the type of `T', so they are only 45517looked up at the point of instantiation, and you can provide 45518declarations for them after declaring the template, but before 45519instantiating it. In particular, if you instantiate `A::f<int>', the 45520last line will call an overloaded `::foo(int)' if one was provided, 45521even if after the declaration of `struct A'. 45522 45523 This distinction between lookup of dependent and non-dependent names is 45524called two-stage (or dependent) name lookup. G++ implements it since 45525version 3.4. 45526 45527 Two-stage name lookup sometimes leads to situations with behavior 45528different from non-template codes. The most common is probably this: 45529 45530 template <typename T> struct Base { 45531 int i; 45532 }; 45533 45534 template <typename T> struct Derived : public Base<T> { 45535 int get_i() { return i; } 45536 }; 45537 45538 In `get_i()', `i' is not used in a dependent context, so the compiler 45539will look for a name declared at the enclosing namespace scope (which 45540is the global scope here). It will not look into the base class, since 45541that is dependent and you may declare specializations of `Base' even 45542after declaring `Derived', so the compiler can't really know what `i' 45543would refer to. If there is no global variable `i', then you will get 45544an error message. 45545 45546 In order to make it clear that you want the member of the base class, 45547you need to defer lookup until instantiation time, at which the base 45548class is known. For this, you need to access `i' in a dependent 45549context, by either using `this->i' (remember that `this' is of type 45550`Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 45551Alternatively, `Base<T>::i' might be brought into scope by a 45552`using'-declaration. 45553 45554 Another, similar example involves calling member functions of a base 45555class: 45556 45557 template <typename T> struct Base { 45558 int f(); 45559 }; 45560 45561 template <typename T> struct Derived : Base<T> { 45562 int g() { return f(); }; 45563 }; 45564 45565 Again, the call to `f()' is not dependent on template arguments (there 45566are no arguments that depend on the type `T', and it is also not 45567otherwise specified that the call should be in a dependent context). 45568Thus a global declaration of such a function must be available, since 45569the one in the base class is not visible until instantiation time. The 45570compiler will consequently produce the following error message: 45571 45572 x.cc: In member function `int Derived<T>::g()': 45573 x.cc:6: error: there are no arguments to `f' that depend on a template 45574 parameter, so a declaration of `f' must be available 45575 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 45576 allowing the use of an undeclared name is deprecated) 45577 45578 To make the code valid either use `this->f()', or `Base<T>::f()'. 45579Using the `-fpermissive' flag will also let the compiler accept the 45580code, by marking all function calls for which no declaration is visible 45581at the time of definition of the template for later lookup at 45582instantiation time, as if it were a dependent call. We do not 45583recommend using `-fpermissive' to work around invalid code, and it will 45584also only catch cases where functions in base classes are called, not 45585where variables in base classes are used (as in the example above). 45586 45587 Note that some compilers (including G++ versions prior to 3.4) get 45588these examples wrong and accept above code without an error. Those 45589compilers do not implement two-stage name lookup correctly. 45590 45591 ---------- Footnotes ---------- 45592 45593 (1) The C++ standard just uses the term "dependent" for names that 45594depend on the type or value of template parameters. This shorter term 45595will also be used in the rest of this section. 45596 45597 45598File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 45599 4560012.7.3 Temporaries May Vanish Before You Expect 45601----------------------------------------------- 45602 45603It is dangerous to use pointers or references to _portions_ of a 45604temporary object. The compiler may very well delete the object before 45605you expect it to, leaving a pointer to garbage. The most common place 45606where this problem crops up is in classes like string classes, 45607especially ones that define a conversion function to type `char *' or 45608`const char *'--which is one reason why the standard `string' class 45609requires you to call the `c_str' member function. However, any class 45610that returns a pointer to some internal structure is potentially 45611subject to this problem. 45612 45613 For example, a program may use a function `strfunc' that returns 45614`string' objects, and another function `charfunc' that operates on 45615pointers to `char': 45616 45617 string strfunc (); 45618 void charfunc (const char *); 45619 45620 void 45621 f () 45622 { 45623 const char *p = strfunc().c_str(); 45624 ... 45625 charfunc (p); 45626 ... 45627 charfunc (p); 45628 } 45629 45630In this situation, it may seem reasonable to save a pointer to the C 45631string returned by the `c_str' member function and use that rather than 45632call `c_str' repeatedly. However, the temporary string created by the 45633call to `strfunc' is destroyed after `p' is initialized, at which point 45634`p' is left pointing to freed memory. 45635 45636 Code like this may run successfully under some other compilers, 45637particularly obsolete cfront-based compilers that delete temporaries 45638along with normal local variables. However, the GNU C++ behavior is 45639standard-conforming, so if your program depends on late destruction of 45640temporaries it is not portable. 45641 45642 The safe way to write such code is to give the temporary a name, which 45643forces it to remain until the end of the scope of the name. For 45644example: 45645 45646 const string& tmp = strfunc (); 45647 charfunc (tmp.c_str ()); 45648 45649 45650File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 45651 4565212.7.4 Implicit Copy-Assignment for Virtual Bases 45653------------------------------------------------- 45654 45655When a base class is virtual, only one subobject of the base class 45656belongs to each full object. Also, the constructors and destructors are 45657invoked only once, and called from the most-derived class. However, 45658such objects behave unspecified when being assigned. For example: 45659 45660 struct Base{ 45661 char *name; 45662 Base(char *n) : name(strdup(n)){} 45663 Base& operator= (const Base& other){ 45664 free (name); 45665 name = strdup (other.name); 45666 } 45667 }; 45668 45669 struct A:virtual Base{ 45670 int val; 45671 A():Base("A"){} 45672 }; 45673 45674 struct B:virtual Base{ 45675 int bval; 45676 B():Base("B"){} 45677 }; 45678 45679 struct Derived:public A, public B{ 45680 Derived():Base("Derived"){} 45681 }; 45682 45683 void func(Derived &d1, Derived &d2) 45684 { 45685 d1 = d2; 45686 } 45687 45688 The C++ standard specifies that `Base::Base' is only called once when 45689constructing or copy-constructing a Derived object. It is unspecified 45690whether `Base::operator=' is called more than once when the implicit 45691copy-assignment for Derived objects is invoked (as it is inside `func' 45692in the example). 45693 45694 G++ implements the "intuitive" algorithm for copy-assignment: assign 45695all direct bases, then assign all members. In that algorithm, the 45696virtual base subobject can be encountered more than once. In the 45697example, copying proceeds in the following order: `val', `name' (via 45698`strdup'), `bval', and `name' again. 45699 45700 If application code relies on copy-assignment, a user-defined 45701copy-assignment operator removes any uncertainties. With such an 45702operator, the application can define whether and how the virtual base 45703subobject is assigned. 45704 45705 45706File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: C++ Misunderstandings, Up: Trouble 45707 4570812.8 Certain Changes We Don't Want to Make 45709========================================== 45710 45711This section lists changes that people frequently request, but which we 45712do not make because we think GCC is better without them. 45713 45714 * Checking the number and type of arguments to a function which has 45715 an old-fashioned definition and no prototype. 45716 45717 Such a feature would work only occasionally--only for calls that 45718 appear in the same file as the called function, following the 45719 definition. The only way to check all calls reliably is to add a 45720 prototype for the function. But adding a prototype eliminates the 45721 motivation for this feature. So the feature is not worthwhile. 45722 45723 * Warning about using an expression whose type is signed as a shift 45724 count. 45725 45726 Shift count operands are probably signed more often than unsigned. 45727 Warning about this would cause far more annoyance than good. 45728 45729 * Warning about assigning a signed value to an unsigned variable. 45730 45731 Such assignments must be very common; warning about them would 45732 cause more annoyance than good. 45733 45734 * Warning when a non-void function value is ignored. 45735 45736 C contains many standard functions that return a value that most 45737 programs choose to ignore. One obvious example is `printf'. 45738 Warning about this practice only leads the defensive programmer to 45739 clutter programs with dozens of casts to `void'. Such casts are 45740 required so frequently that they become visual noise. Writing 45741 those casts becomes so automatic that they no longer convey useful 45742 information about the intentions of the programmer. For functions 45743 where the return value should never be ignored, use the 45744 `warn_unused_result' function attribute (*note Function 45745 Attributes::). 45746 45747 * Making `-fshort-enums' the default. 45748 45749 This would cause storage layout to be incompatible with most other 45750 C compilers. And it doesn't seem very important, given that you 45751 can get the same result in other ways. The case where it matters 45752 most is when the enumeration-valued object is inside a structure, 45753 and in that case you can specify a field width explicitly. 45754 45755 * Making bit-fields unsigned by default on particular machines where 45756 "the ABI standard" says to do so. 45757 45758 The ISO C standard leaves it up to the implementation whether a 45759 bit-field declared plain `int' is signed or not. This in effect 45760 creates two alternative dialects of C. 45761 45762 The GNU C compiler supports both dialects; you can specify the 45763 signed dialect with `-fsigned-bitfields' and the unsigned dialect 45764 with `-funsigned-bitfields'. However, this leaves open the 45765 question of which dialect to use by default. 45766 45767 Currently, the preferred dialect makes plain bit-fields signed, 45768 because this is simplest. Since `int' is the same as `signed int' 45769 in every other context, it is cleanest for them to be the same in 45770 bit-fields as well. 45771 45772 Some computer manufacturers have published Application Binary 45773 Interface standards which specify that plain bit-fields should be 45774 unsigned. It is a mistake, however, to say anything about this 45775 issue in an ABI. This is because the handling of plain bit-fields 45776 distinguishes two dialects of C. Both dialects are meaningful on 45777 every type of machine. Whether a particular object file was 45778 compiled using signed bit-fields or unsigned is of no concern to 45779 other object files, even if they access the same bit-fields in the 45780 same data structures. 45781 45782 A given program is written in one or the other of these two 45783 dialects. The program stands a chance to work on most any machine 45784 if it is compiled with the proper dialect. It is unlikely to work 45785 at all if compiled with the wrong dialect. 45786 45787 Many users appreciate the GNU C compiler because it provides an 45788 environment that is uniform across machines. These users would be 45789 inconvenienced if the compiler treated plain bit-fields 45790 differently on certain machines. 45791 45792 Occasionally users write programs intended only for a particular 45793 machine type. On these occasions, the users would benefit if the 45794 GNU C compiler were to support by default the same dialect as the 45795 other compilers on that machine. But such applications are rare. 45796 And users writing a program to run on more than one type of 45797 machine cannot possibly benefit from this kind of compatibility. 45798 45799 This is why GCC does and will treat plain bit-fields in the same 45800 fashion on all types of machines (by default). 45801 45802 There are some arguments for making bit-fields unsigned by default 45803 on all machines. If, for example, this becomes a universal de 45804 facto standard, it would make sense for GCC to go along with it. 45805 This is something to be considered in the future. 45806 45807 (Of course, users strongly concerned about portability should 45808 indicate explicitly in each bit-field whether it is signed or not. 45809 In this way, they write programs which have the same meaning in 45810 both C dialects.) 45811 45812 * Undefining `__STDC__' when `-ansi' is not used. 45813 45814 Currently, GCC defines `__STDC__' unconditionally. This provides 45815 good results in practice. 45816 45817 Programmers normally use conditionals on `__STDC__' to ask whether 45818 it is safe to use certain features of ISO C, such as function 45819 prototypes or ISO token concatenation. Since plain `gcc' supports 45820 all the features of ISO C, the correct answer to these questions is 45821 "yes". 45822 45823 Some users try to use `__STDC__' to check for the availability of 45824 certain library facilities. This is actually incorrect usage in 45825 an ISO C program, because the ISO C standard says that a conforming 45826 freestanding implementation should define `__STDC__' even though it 45827 does not have the library facilities. `gcc -ansi -pedantic' is a 45828 conforming freestanding implementation, and it is therefore 45829 required to define `__STDC__', even though it does not come with 45830 an ISO C library. 45831 45832 Sometimes people say that defining `__STDC__' in a compiler that 45833 does not completely conform to the ISO C standard somehow violates 45834 the standard. This is illogical. The standard is a standard for 45835 compilers that claim to support ISO C, such as `gcc -ansi'--not 45836 for other compilers such as plain `gcc'. Whatever the ISO C 45837 standard says is relevant to the design of plain `gcc' without 45838 `-ansi' only for pragmatic reasons, not as a requirement. 45839 45840 GCC normally defines `__STDC__' to be 1, and in addition defines 45841 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 45842 option for strict conformance to some version of ISO C. On some 45843 hosts, system include files use a different convention, where 45844 `__STDC__' is normally 0, but is 1 if the user specifies strict 45845 conformance to the C Standard. GCC follows the host convention 45846 when processing system include files, but when processing user 45847 files it follows the usual GNU C convention. 45848 45849 * Undefining `__STDC__' in C++. 45850 45851 Programs written to compile with C++-to-C translators get the 45852 value of `__STDC__' that goes with the C compiler that is 45853 subsequently used. These programs must test `__STDC__' to 45854 determine what kind of C preprocessor that compiler uses: whether 45855 they should concatenate tokens in the ISO C fashion or in the 45856 traditional fashion. 45857 45858 These programs work properly with GNU C++ if `__STDC__' is defined. 45859 They would not work otherwise. 45860 45861 In addition, many header files are written to provide prototypes 45862 in ISO C but not in traditional C. Many of these header files can 45863 work without change in C++ provided `__STDC__' is defined. If 45864 `__STDC__' is not defined, they will all fail, and will all need 45865 to be changed to test explicitly for C++ as well. 45866 45867 * Deleting "empty" loops. 45868 45869 Historically, GCC has not deleted "empty" loops under the 45870 assumption that the most likely reason you would put one in a 45871 program is to have a delay, so deleting them will not make real 45872 programs run any faster. 45873 45874 However, the rationale here is that optimization of a nonempty loop 45875 cannot produce an empty one. This held for carefully written C 45876 compiled with less powerful optimizers but is not always the case 45877 for carefully written C++ or with more powerful optimizers. Thus 45878 GCC will remove operations from loops whenever it can determine 45879 those operations are not externally visible (apart from the time 45880 taken to execute them, of course). In case the loop can be proved 45881 to be finite, GCC will also remove the loop itself. 45882 45883 Be aware of this when performing timing tests, for instance the 45884 following loop can be completely removed, provided 45885 `some_expression' can provably not change any global state. 45886 45887 { 45888 int sum = 0; 45889 int ix; 45890 45891 for (ix = 0; ix != 10000; ix++) 45892 sum += some_expression; 45893 } 45894 45895 Even though `sum' is accumulated in the loop, no use is made of 45896 that summation, so the accumulation can be removed. 45897 45898 * Making side effects happen in the same order as in some other 45899 compiler. 45900 45901 It is never safe to depend on the order of evaluation of side 45902 effects. For example, a function call like this may very well 45903 behave differently from one compiler to another: 45904 45905 void func (int, int); 45906 45907 int i = 2; 45908 func (i++, i++); 45909 45910 There is no guarantee (in either the C or the C++ standard language 45911 definitions) that the increments will be evaluated in any 45912 particular order. Either increment might happen first. `func' 45913 might get the arguments `2, 3', or it might get `3, 2', or even 45914 `2, 2'. 45915 45916 * Making certain warnings into errors by default. 45917 45918 Some ISO C testsuites report failure when the compiler does not 45919 produce an error message for a certain program. 45920 45921 ISO C requires a "diagnostic" message for certain kinds of invalid 45922 programs, but a warning is defined by GCC to count as a 45923 diagnostic. If GCC produces a warning but not an error, that is 45924 correct ISO C support. If testsuites call this "failure", they 45925 should be run with the GCC option `-pedantic-errors', which will 45926 turn these warnings into errors. 45927 45928 45929 45930File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 45931 4593212.9 Warning Messages and Error Messages 45933======================================== 45934 45935The GNU compiler can produce two kinds of diagnostics: errors and 45936warnings. Each kind has a different purpose: 45937 45938 "Errors" report problems that make it impossible to compile your 45939 program. GCC reports errors with the source file name and line 45940 number where the problem is apparent. 45941 45942 "Warnings" report other unusual conditions in your code that _may_ 45943 indicate a problem, although compilation can (and does) proceed. 45944 Warning messages also report the source file name and line number, 45945 but include the text `warning:' to distinguish them from error 45946 messages. 45947 45948 Warnings may indicate danger points where you should check to make sure 45949that your program really does what you intend; or the use of obsolete 45950features; or the use of nonstandard features of GNU C or C++. Many 45951warnings are issued only if you ask for them, with one of the `-W' 45952options (for instance, `-Wall' requests a variety of useful warnings). 45953 45954 GCC always tries to compile your program if possible; it never 45955gratuitously rejects a program whose meaning is clear merely because 45956(for instance) it fails to conform to a standard. In some cases, 45957however, the C and C++ standards specify that certain extensions are 45958forbidden, and a diagnostic _must_ be issued by a conforming compiler. 45959The `-pedantic' option tells GCC to issue warnings in such cases; 45960`-pedantic-errors' says to make them errors instead. This does not 45961mean that _all_ non-ISO constructs get warnings or errors. 45962 45963 *Note Options to Request or Suppress Warnings: Warning Options, for 45964more detail on these and related command-line options. 45965 45966 45967File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 45968 4596913 Reporting Bugs 45970***************** 45971 45972Your bug reports play an essential role in making GCC reliable. 45973 45974 When you encounter a problem, the first thing to do is to see if it is 45975already known. *Note Trouble::. If it isn't known, then you should 45976report the problem. 45977 45978* Menu: 45979 45980* Criteria: Bug Criteria. Have you really found a bug? 45981* Reporting: Bug Reporting. How to report a bug effectively. 45982 45983 45984File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 45985 4598613.1 Have You Found a Bug? 45987========================== 45988 45989If you are not sure whether you have found a bug, here are some 45990guidelines: 45991 45992 * If the compiler gets a fatal signal, for any input whatever, that 45993 is a compiler bug. Reliable compilers never crash. 45994 45995 * If the compiler produces invalid assembly code, for any input 45996 whatever (except an `asm' statement), that is a compiler bug, 45997 unless the compiler reports errors (not just warnings) which would 45998 ordinarily prevent the assembler from being run. 45999 46000 * If the compiler produces valid assembly code that does not 46001 correctly execute the input source code, that is a compiler bug. 46002 46003 However, you must double-check to make sure, because you may have a 46004 program whose behavior is undefined, which happened by chance to 46005 give the desired results with another C or C++ compiler. 46006 46007 For example, in many nonoptimizing compilers, you can write `x;' 46008 at the end of a function instead of `return x;', with the same 46009 results. But the value of the function is undefined if `return' 46010 is omitted; it is not a bug when GCC produces different results. 46011 46012 Problems often result from expressions with two increment 46013 operators, as in `f (*p++, *p++)'. Your previous compiler might 46014 have interpreted that expression the way you intended; GCC might 46015 interpret it another way. Neither compiler is wrong. The bug is 46016 in your code. 46017 46018 After you have localized the error to a single source line, it 46019 should be easy to check for these things. If your program is 46020 correct and well defined, you have found a compiler bug. 46021 46022 * If the compiler produces an error message for valid input, that is 46023 a compiler bug. 46024 46025 * If the compiler does not produce an error message for invalid 46026 input, that is a compiler bug. However, you should note that your 46027 idea of "invalid input" might be someone else's idea of "an 46028 extension" or "support for traditional practice". 46029 46030 * If you are an experienced user of one of the languages GCC 46031 supports, your suggestions for improvement of GCC are welcome in 46032 any case. 46033 46034 46035File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 46036 4603713.2 How and Where to Report Bugs 46038================================= 46039 46040Bugs should be reported to the bug database at 46041`http://www.NetBSD.org/Misc/send-pr.html'. 46042 46043 46044File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 46045 4604614 How To Get Help with GCC 46047*************************** 46048 46049If you need help installing, using or changing GCC, there are two ways 46050to find it: 46051 46052 * Send a message to a suitable network mailing list. First try 46053 <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if 46054 that brings no response, try <gcc@gcc.gnu.org>. For help changing 46055 GCC, ask <gcc@gcc.gnu.org>. If you think you have found a bug in 46056 GCC, please report it following the instructions at *note Bug 46057 Reporting::. 46058 46059 * Look in the service directory for someone who might help you for a 46060 fee. The service directory is found at 46061 `http://www.fsf.org/resources/service'. 46062 46063 For further information, see `http://gcc.gnu.org/faq.html#support'. 46064 46065 46066File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 46067 4606815 Contributing to GCC Development 46069********************************** 46070 46071If you would like to help pretest GCC releases to assure they work well, 46072current development sources are available by SVN (see 46073`http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 46074available for FTP; see `http://gcc.gnu.org/snapshots.html'. 46075 46076 If you would like to work on improvements to GCC, please read the 46077advice at these URLs: 46078 46079 `http://gcc.gnu.org/contribute.html' 46080 `http://gcc.gnu.org/contributewhy.html' 46081 46082for information on how to make useful contributions and avoid 46083duplication of effort. Suggested projects are listed at 46084`http://gcc.gnu.org/projects/'. 46085 46086 46087File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 46088 46089Funding Free Software 46090********************* 46091 46092If you want to have more free software a few years from now, it makes 46093sense for you to help encourage people to contribute funds for its 46094development. The most effective approach known is to encourage 46095commercial redistributors to donate. 46096 46097 Users of free software systems can boost the pace of development by 46098encouraging for-a-fee distributors to donate part of their selling price 46099to free software developers--the Free Software Foundation, and others. 46100 46101 The way to convince distributors to do this is to demand it and expect 46102it from them. So when you compare distributors, judge them partly by 46103how much they give to free software development. Show distributors 46104they must compete to be the one who gives the most. 46105 46106 To make this approach work, you must insist on numbers that you can 46107compare, such as, "We will donate ten dollars to the Frobnitz project 46108for each disk sold." Don't be satisfied with a vague promise, such as 46109"A portion of the profits are donated," since it doesn't give a basis 46110for comparison. 46111 46112 Even a precise fraction "of the profits from this disk" is not very 46113meaningful, since creative accounting and unrelated business decisions 46114can greatly alter what fraction of the sales price counts as profit. 46115If the price you pay is $50, ten percent of the profit is probably less 46116than a dollar; it might be a few cents, or nothing at all. 46117 46118 Some redistributors do development work themselves. This is useful 46119too; but to keep everyone honest, you need to inquire how much they do, 46120and what kind. Some kinds of development make much more long-term 46121difference than others. For example, maintaining a separate version of 46122a program contributes very little; maintaining the standard version of a 46123program for the whole community contributes much. Easy new ports 46124contribute little, since someone else would surely do them; difficult 46125ports such as adding a new CPU to the GNU Compiler Collection 46126contribute more; major new features or packages contribute the most. 46127 46128 By establishing the idea that supporting further development is "the 46129proper thing to do" when distributing free software for a fee, we can 46130assure a steady flow of resources into making more free software. 46131 46132 Copyright (C) 1994 Free Software Foundation, Inc. 46133 Verbatim copying and redistribution of this section is permitted 46134 without royalty; alteration is not permitted. 46135 46136 46137File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 46138 46139The GNU Project and GNU/Linux 46140***************************** 46141 46142The GNU Project was launched in 1984 to develop a complete Unix-like 46143operating system which is free software: the GNU system. (GNU is a 46144recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 46145Variants of the GNU operating system, which use the kernel Linux, are 46146now widely used; though these systems are often referred to as "Linux", 46147they are more accurately called GNU/Linux systems. 46148 46149 For more information, see: 46150 `http://www.gnu.org/' 46151 `http://www.gnu.org/gnu/linux-and-gnu.html' 46152 46153 46154File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 46155 46156GNU General Public License 46157************************** 46158 46159 Version 3, 29 June 2007 46160 46161 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' 46162 46163 Everyone is permitted to copy and distribute verbatim copies of this 46164 license document, but changing it is not allowed. 46165 46166Preamble 46167======== 46168 46169The GNU General Public License is a free, copyleft license for software 46170and other kinds of works. 46171 46172 The licenses for most software and other practical works are designed 46173to take away your freedom to share and change the works. By contrast, 46174the GNU General Public License is intended to guarantee your freedom to 46175share and change all versions of a program-to make sure it remains free 46176software for all its users. We, the Free Software Foundation, use the 46177GNU General Public License for most of our software; it applies also to 46178any other work released this way by its authors. You can apply it to 46179your programs, too. 46180 46181 When we speak of free software, we are referring to freedom, not 46182price. Our General Public Licenses are designed to make sure that you 46183have the freedom to distribute copies of free software (and charge for 46184them if you wish), that you receive source code or can get it if you 46185want it, that you can change the software or use pieces of it in new 46186free programs, and that you know you can do these things. 46187 46188 To protect your rights, we need to prevent others from denying you 46189these rights or asking you to surrender the rights. Therefore, you 46190have certain responsibilities if you distribute copies of the software, 46191or if you modify it: responsibilities to respect the freedom of others. 46192 46193 For example, if you distribute copies of such a program, whether 46194gratis or for a fee, you must pass on to the recipients the same 46195freedoms that you received. You must make sure that they, too, receive 46196or can get the source code. And you must show them these terms so they 46197know their rights. 46198 46199 Developers that use the GNU GPL protect your rights with two steps: 46200(1) assert copyright on the software, and (2) offer you this License 46201giving you legal permission to copy, distribute and/or modify it. 46202 46203 For the developers' and authors' protection, the GPL clearly explains 46204that there is no warranty for this free software. For both users' and 46205authors' sake, the GPL requires that modified versions be marked as 46206changed, so that their problems will not be attributed erroneously to 46207authors of previous versions. 46208 46209 Some devices are designed to deny users access to install or run 46210modified versions of the software inside them, although the 46211manufacturer can do so. This is fundamentally incompatible with the 46212aim of protecting users' freedom to change the software. The 46213systematic pattern of such abuse occurs in the area of products for 46214individuals to use, which is precisely where it is most unacceptable. 46215Therefore, we have designed this version of the GPL to prohibit the 46216practice for those products. If such problems arise substantially in 46217other domains, we stand ready to extend this provision to those domains 46218in future versions of the GPL, as needed to protect the freedom of 46219users. 46220 46221 Finally, every program is threatened constantly by software patents. 46222States should not allow patents to restrict development and use of 46223software on general-purpose computers, but in those that do, we wish to 46224avoid the special danger that patents applied to a free program could 46225make it effectively proprietary. To prevent this, the GPL assures that 46226patents cannot be used to render the program non-free. 46227 46228 The precise terms and conditions for copying, distribution and 46229modification follow. 46230 46231TERMS AND CONDITIONS 46232==================== 46233 46234 0. Definitions. 46235 46236 "This License" refers to version 3 of the GNU General Public 46237 License. 46238 46239 "Copyright" also means copyright-like laws that apply to other 46240 kinds of works, such as semiconductor masks. 46241 46242 "The Program" refers to any copyrightable work licensed under this 46243 License. Each licensee is addressed as "you". "Licensees" and 46244 "recipients" may be individuals or organizations. 46245 46246 To "modify" a work means to copy from or adapt all or part of the 46247 work in a fashion requiring copyright permission, other than the 46248 making of an exact copy. The resulting work is called a "modified 46249 version" of the earlier work or a work "based on" the earlier work. 46250 46251 A "covered work" means either the unmodified Program or a work 46252 based on the Program. 46253 46254 To "propagate" a work means to do anything with it that, without 46255 permission, would make you directly or secondarily liable for 46256 infringement under applicable copyright law, except executing it 46257 on a computer or modifying a private copy. Propagation includes 46258 copying, distribution (with or without modification), making 46259 available to the public, and in some countries other activities as 46260 well. 46261 46262 To "convey" a work means any kind of propagation that enables other 46263 parties to make or receive copies. Mere interaction with a user 46264 through a computer network, with no transfer of a copy, is not 46265 conveying. 46266 46267 An interactive user interface displays "Appropriate Legal Notices" 46268 to the extent that it includes a convenient and prominently visible 46269 feature that (1) displays an appropriate copyright notice, and (2) 46270 tells the user that there is no warranty for the work (except to 46271 the extent that warranties are provided), that licensees may 46272 convey the work under this License, and how to view a copy of this 46273 License. If the interface presents a list of user commands or 46274 options, such as a menu, a prominent item in the list meets this 46275 criterion. 46276 46277 1. Source Code. 46278 46279 The "source code" for a work means the preferred form of the work 46280 for making modifications to it. "Object code" means any 46281 non-source form of a work. 46282 46283 A "Standard Interface" means an interface that either is an 46284 official standard defined by a recognized standards body, or, in 46285 the case of interfaces specified for a particular programming 46286 language, one that is widely used among developers working in that 46287 language. 46288 46289 The "System Libraries" of an executable work include anything, 46290 other than the work as a whole, that (a) is included in the normal 46291 form of packaging a Major Component, but which is not part of that 46292 Major Component, and (b) serves only to enable use of the work 46293 with that Major Component, or to implement a Standard Interface 46294 for which an implementation is available to the public in source 46295 code form. A "Major Component", in this context, means a major 46296 essential component (kernel, window system, and so on) of the 46297 specific operating system (if any) on which the executable work 46298 runs, or a compiler used to produce the work, or an object code 46299 interpreter used to run it. 46300 46301 The "Corresponding Source" for a work in object code form means all 46302 the source code needed to generate, install, and (for an executable 46303 work) run the object code and to modify the work, including 46304 scripts to control those activities. However, it does not include 46305 the work's System Libraries, or general-purpose tools or generally 46306 available free programs which are used unmodified in performing 46307 those activities but which are not part of the work. For example, 46308 Corresponding Source includes interface definition files 46309 associated with source files for the work, and the source code for 46310 shared libraries and dynamically linked subprograms that the work 46311 is specifically designed to require, such as by intimate data 46312 communication or control flow between those subprograms and other 46313 parts of the work. 46314 46315 The Corresponding Source need not include anything that users can 46316 regenerate automatically from other parts of the Corresponding 46317 Source. 46318 46319 The Corresponding Source for a work in source code form is that 46320 same work. 46321 46322 2. Basic Permissions. 46323 46324 All rights granted under this License are granted for the term of 46325 copyright on the Program, and are irrevocable provided the stated 46326 conditions are met. This License explicitly affirms your unlimited 46327 permission to run the unmodified Program. The output from running 46328 a covered work is covered by this License only if the output, 46329 given its content, constitutes a covered work. This License 46330 acknowledges your rights of fair use or other equivalent, as 46331 provided by copyright law. 46332 46333 You may make, run and propagate covered works that you do not 46334 convey, without conditions so long as your license otherwise 46335 remains in force. You may convey covered works to others for the 46336 sole purpose of having them make modifications exclusively for 46337 you, or provide you with facilities for running those works, 46338 provided that you comply with the terms of this License in 46339 conveying all material for which you do not control copyright. 46340 Those thus making or running the covered works for you must do so 46341 exclusively on your behalf, under your direction and control, on 46342 terms that prohibit them from making any copies of your 46343 copyrighted material outside their relationship with you. 46344 46345 Conveying under any other circumstances is permitted solely under 46346 the conditions stated below. Sublicensing is not allowed; section 46347 10 makes it unnecessary. 46348 46349 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 46350 46351 No covered work shall be deemed part of an effective technological 46352 measure under any applicable law fulfilling obligations under 46353 article 11 of the WIPO copyright treaty adopted on 20 December 46354 1996, or similar laws prohibiting or restricting circumvention of 46355 such measures. 46356 46357 When you convey a covered work, you waive any legal power to forbid 46358 circumvention of technological measures to the extent such 46359 circumvention is effected by exercising rights under this License 46360 with respect to the covered work, and you disclaim any intention 46361 to limit operation or modification of the work as a means of 46362 enforcing, against the work's users, your or third parties' legal 46363 rights to forbid circumvention of technological measures. 46364 46365 4. Conveying Verbatim Copies. 46366 46367 You may convey verbatim copies of the Program's source code as you 46368 receive it, in any medium, provided that you conspicuously and 46369 appropriately publish on each copy an appropriate copyright notice; 46370 keep intact all notices stating that this License and any 46371 non-permissive terms added in accord with section 7 apply to the 46372 code; keep intact all notices of the absence of any warranty; and 46373 give all recipients a copy of this License along with the Program. 46374 46375 You may charge any price or no price for each copy that you convey, 46376 and you may offer support or warranty protection for a fee. 46377 46378 5. Conveying Modified Source Versions. 46379 46380 You may convey a work based on the Program, or the modifications to 46381 produce it from the Program, in the form of source code under the 46382 terms of section 4, provided that you also meet all of these 46383 conditions: 46384 46385 a. The work must carry prominent notices stating that you 46386 modified it, and giving a relevant date. 46387 46388 b. The work must carry prominent notices stating that it is 46389 released under this License and any conditions added under 46390 section 7. This requirement modifies the requirement in 46391 section 4 to "keep intact all notices". 46392 46393 c. You must license the entire work, as a whole, under this 46394 License to anyone who comes into possession of a copy. This 46395 License will therefore apply, along with any applicable 46396 section 7 additional terms, to the whole of the work, and all 46397 its parts, regardless of how they are packaged. This License 46398 gives no permission to license the work in any other way, but 46399 it does not invalidate such permission if you have separately 46400 received it. 46401 46402 d. If the work has interactive user interfaces, each must display 46403 Appropriate Legal Notices; however, if the Program has 46404 interactive interfaces that do not display Appropriate Legal 46405 Notices, your work need not make them do so. 46406 46407 A compilation of a covered work with other separate and independent 46408 works, which are not by their nature extensions of the covered 46409 work, and which are not combined with it such as to form a larger 46410 program, in or on a volume of a storage or distribution medium, is 46411 called an "aggregate" if the compilation and its resulting 46412 copyright are not used to limit the access or legal rights of the 46413 compilation's users beyond what the individual works permit. 46414 Inclusion of a covered work in an aggregate does not cause this 46415 License to apply to the other parts of the aggregate. 46416 46417 6. Conveying Non-Source Forms. 46418 46419 You may convey a covered work in object code form under the terms 46420 of sections 4 and 5, provided that you also convey the 46421 machine-readable Corresponding Source under the terms of this 46422 License, in one of these ways: 46423 46424 a. Convey the object code in, or embodied in, a physical product 46425 (including a physical distribution medium), accompanied by the 46426 Corresponding Source fixed on a durable physical medium 46427 customarily used for software interchange. 46428 46429 b. Convey the object code in, or embodied in, a physical product 46430 (including a physical distribution medium), accompanied by a 46431 written offer, valid for at least three years and valid for 46432 as long as you offer spare parts or customer support for that 46433 product model, to give anyone who possesses the object code 46434 either (1) a copy of the Corresponding Source for all the 46435 software in the product that is covered by this License, on a 46436 durable physical medium customarily used for software 46437 interchange, for a price no more than your reasonable cost of 46438 physically performing this conveying of source, or (2) access 46439 to copy the Corresponding Source from a network server at no 46440 charge. 46441 46442 c. Convey individual copies of the object code with a copy of 46443 the written offer to provide the Corresponding Source. This 46444 alternative is allowed only occasionally and noncommercially, 46445 and only if you received the object code with such an offer, 46446 in accord with subsection 6b. 46447 46448 d. Convey the object code by offering access from a designated 46449 place (gratis or for a charge), and offer equivalent access 46450 to the Corresponding Source in the same way through the same 46451 place at no further charge. You need not require recipients 46452 to copy the Corresponding Source along with the object code. 46453 If the place to copy the object code is a network server, the 46454 Corresponding Source may be on a different server (operated 46455 by you or a third party) that supports equivalent copying 46456 facilities, provided you maintain clear directions next to 46457 the object code saying where to find the Corresponding Source. 46458 Regardless of what server hosts the Corresponding Source, you 46459 remain obligated to ensure that it is available for as long 46460 as needed to satisfy these requirements. 46461 46462 e. Convey the object code using peer-to-peer transmission, 46463 provided you inform other peers where the object code and 46464 Corresponding Source of the work are being offered to the 46465 general public at no charge under subsection 6d. 46466 46467 46468 A separable portion of the object code, whose source code is 46469 excluded from the Corresponding Source as a System Library, need 46470 not be included in conveying the object code work. 46471 46472 A "User Product" is either (1) a "consumer product", which means 46473 any tangible personal property which is normally used for personal, 46474 family, or household purposes, or (2) anything designed or sold for 46475 incorporation into a dwelling. In determining whether a product 46476 is a consumer product, doubtful cases shall be resolved in favor of 46477 coverage. For a particular product received by a particular user, 46478 "normally used" refers to a typical or common use of that class of 46479 product, regardless of the status of the particular user or of the 46480 way in which the particular user actually uses, or expects or is 46481 expected to use, the product. A product is a consumer product 46482 regardless of whether the product has substantial commercial, 46483 industrial or non-consumer uses, unless such uses represent the 46484 only significant mode of use of the product. 46485 46486 "Installation Information" for a User Product means any methods, 46487 procedures, authorization keys, or other information required to 46488 install and execute modified versions of a covered work in that 46489 User Product from a modified version of its Corresponding Source. 46490 The information must suffice to ensure that the continued 46491 functioning of the modified object code is in no case prevented or 46492 interfered with solely because modification has been made. 46493 46494 If you convey an object code work under this section in, or with, 46495 or specifically for use in, a User Product, and the conveying 46496 occurs as part of a transaction in which the right of possession 46497 and use of the User Product is transferred to the recipient in 46498 perpetuity or for a fixed term (regardless of how the transaction 46499 is characterized), the Corresponding Source conveyed under this 46500 section must be accompanied by the Installation Information. But 46501 this requirement does not apply if neither you nor any third party 46502 retains the ability to install modified object code on the User 46503 Product (for example, the work has been installed in ROM). 46504 46505 The requirement to provide Installation Information does not 46506 include a requirement to continue to provide support service, 46507 warranty, or updates for a work that has been modified or 46508 installed by the recipient, or for the User Product in which it 46509 has been modified or installed. Access to a network may be denied 46510 when the modification itself materially and adversely affects the 46511 operation of the network or violates the rules and protocols for 46512 communication across the network. 46513 46514 Corresponding Source conveyed, and Installation Information 46515 provided, in accord with this section must be in a format that is 46516 publicly documented (and with an implementation available to the 46517 public in source code form), and must require no special password 46518 or key for unpacking, reading or copying. 46519 46520 7. Additional Terms. 46521 46522 "Additional permissions" are terms that supplement the terms of 46523 this License by making exceptions from one or more of its 46524 conditions. Additional permissions that are applicable to the 46525 entire Program shall be treated as though they were included in 46526 this License, to the extent that they are valid under applicable 46527 law. If additional permissions apply only to part of the Program, 46528 that part may be used separately under those permissions, but the 46529 entire Program remains governed by this License without regard to 46530 the additional permissions. 46531 46532 When you convey a copy of a covered work, you may at your option 46533 remove any additional permissions from that copy, or from any part 46534 of it. (Additional permissions may be written to require their own 46535 removal in certain cases when you modify the work.) You may place 46536 additional permissions on material, added by you to a covered work, 46537 for which you have or can give appropriate copyright permission. 46538 46539 Notwithstanding any other provision of this License, for material 46540 you add to a covered work, you may (if authorized by the copyright 46541 holders of that material) supplement the terms of this License 46542 with terms: 46543 46544 a. Disclaiming warranty or limiting liability differently from 46545 the terms of sections 15 and 16 of this License; or 46546 46547 b. Requiring preservation of specified reasonable legal notices 46548 or author attributions in that material or in the Appropriate 46549 Legal Notices displayed by works containing it; or 46550 46551 c. Prohibiting misrepresentation of the origin of that material, 46552 or requiring that modified versions of such material be 46553 marked in reasonable ways as different from the original 46554 version; or 46555 46556 d. Limiting the use for publicity purposes of names of licensors 46557 or authors of the material; or 46558 46559 e. Declining to grant rights under trademark law for use of some 46560 trade names, trademarks, or service marks; or 46561 46562 f. Requiring indemnification of licensors and authors of that 46563 material by anyone who conveys the material (or modified 46564 versions of it) with contractual assumptions of liability to 46565 the recipient, for any liability that these contractual 46566 assumptions directly impose on those licensors and authors. 46567 46568 All other non-permissive additional terms are considered "further 46569 restrictions" within the meaning of section 10. If the Program as 46570 you received it, or any part of it, contains a notice stating that 46571 it is governed by this License along with a term that is a further 46572 restriction, you may remove that term. If a license document 46573 contains a further restriction but permits relicensing or 46574 conveying under this License, you may add to a covered work 46575 material governed by the terms of that license document, provided 46576 that the further restriction does not survive such relicensing or 46577 conveying. 46578 46579 If you add terms to a covered work in accord with this section, you 46580 must place, in the relevant source files, a statement of the 46581 additional terms that apply to those files, or a notice indicating 46582 where to find the applicable terms. 46583 46584 Additional terms, permissive or non-permissive, may be stated in 46585 the form of a separately written license, or stated as exceptions; 46586 the above requirements apply either way. 46587 46588 8. Termination. 46589 46590 You may not propagate or modify a covered work except as expressly 46591 provided under this License. Any attempt otherwise to propagate or 46592 modify it is void, and will automatically terminate your rights 46593 under this License (including any patent licenses granted under 46594 the third paragraph of section 11). 46595 46596 However, if you cease all violation of this License, then your 46597 license from a particular copyright holder is reinstated (a) 46598 provisionally, unless and until the copyright holder explicitly 46599 and finally terminates your license, and (b) permanently, if the 46600 copyright holder fails to notify you of the violation by some 46601 reasonable means prior to 60 days after the cessation. 46602 46603 Moreover, your license from a particular copyright holder is 46604 reinstated permanently if the copyright holder notifies you of the 46605 violation by some reasonable means, this is the first time you have 46606 received notice of violation of this License (for any work) from 46607 that copyright holder, and you cure the violation prior to 30 days 46608 after your receipt of the notice. 46609 46610 Termination of your rights under this section does not terminate 46611 the licenses of parties who have received copies or rights from 46612 you under this License. If your rights have been terminated and 46613 not permanently reinstated, you do not qualify to receive new 46614 licenses for the same material under section 10. 46615 46616 9. Acceptance Not Required for Having Copies. 46617 46618 You are not required to accept this License in order to receive or 46619 run a copy of the Program. Ancillary propagation of a covered work 46620 occurring solely as a consequence of using peer-to-peer 46621 transmission to receive a copy likewise does not require 46622 acceptance. However, nothing other than this License grants you 46623 permission to propagate or modify any covered work. These actions 46624 infringe copyright if you do not accept this License. Therefore, 46625 by modifying or propagating a covered work, you indicate your 46626 acceptance of this License to do so. 46627 46628 10. Automatic Licensing of Downstream Recipients. 46629 46630 Each time you convey a covered work, the recipient automatically 46631 receives a license from the original licensors, to run, modify and 46632 propagate that work, subject to this License. You are not 46633 responsible for enforcing compliance by third parties with this 46634 License. 46635 46636 An "entity transaction" is a transaction transferring control of an 46637 organization, or substantially all assets of one, or subdividing an 46638 organization, or merging organizations. If propagation of a 46639 covered work results from an entity transaction, each party to that 46640 transaction who receives a copy of the work also receives whatever 46641 licenses to the work the party's predecessor in interest had or 46642 could give under the previous paragraph, plus a right to 46643 possession of the Corresponding Source of the work from the 46644 predecessor in interest, if the predecessor has it or can get it 46645 with reasonable efforts. 46646 46647 You may not impose any further restrictions on the exercise of the 46648 rights granted or affirmed under this License. For example, you 46649 may not impose a license fee, royalty, or other charge for 46650 exercise of rights granted under this License, and you may not 46651 initiate litigation (including a cross-claim or counterclaim in a 46652 lawsuit) alleging that any patent claim is infringed by making, 46653 using, selling, offering for sale, or importing the Program or any 46654 portion of it. 46655 46656 11. Patents. 46657 46658 A "contributor" is a copyright holder who authorizes use under this 46659 License of the Program or a work on which the Program is based. 46660 The work thus licensed is called the contributor's "contributor 46661 version". 46662 46663 A contributor's "essential patent claims" are all patent claims 46664 owned or controlled by the contributor, whether already acquired or 46665 hereafter acquired, that would be infringed by some manner, 46666 permitted by this License, of making, using, or selling its 46667 contributor version, but do not include claims that would be 46668 infringed only as a consequence of further modification of the 46669 contributor version. For purposes of this definition, "control" 46670 includes the right to grant patent sublicenses in a manner 46671 consistent with the requirements of this License. 46672 46673 Each contributor grants you a non-exclusive, worldwide, 46674 royalty-free patent license under the contributor's essential 46675 patent claims, to make, use, sell, offer for sale, import and 46676 otherwise run, modify and propagate the contents of its 46677 contributor version. 46678 46679 In the following three paragraphs, a "patent license" is any 46680 express agreement or commitment, however denominated, not to 46681 enforce a patent (such as an express permission to practice a 46682 patent or covenant not to sue for patent infringement). To 46683 "grant" such a patent license to a party means to make such an 46684 agreement or commitment not to enforce a patent against the party. 46685 46686 If you convey a covered work, knowingly relying on a patent 46687 license, and the Corresponding Source of the work is not available 46688 for anyone to copy, free of charge and under the terms of this 46689 License, through a publicly available network server or other 46690 readily accessible means, then you must either (1) cause the 46691 Corresponding Source to be so available, or (2) arrange to deprive 46692 yourself of the benefit of the patent license for this particular 46693 work, or (3) arrange, in a manner consistent with the requirements 46694 of this License, to extend the patent license to downstream 46695 recipients. "Knowingly relying" means you have actual knowledge 46696 that, but for the patent license, your conveying the covered work 46697 in a country, or your recipient's use of the covered work in a 46698 country, would infringe one or more identifiable patents in that 46699 country that you have reason to believe are valid. 46700 46701 If, pursuant to or in connection with a single transaction or 46702 arrangement, you convey, or propagate by procuring conveyance of, a 46703 covered work, and grant a patent license to some of the parties 46704 receiving the covered work authorizing them to use, propagate, 46705 modify or convey a specific copy of the covered work, then the 46706 patent license you grant is automatically extended to all 46707 recipients of the covered work and works based on it. 46708 46709 A patent license is "discriminatory" if it does not include within 46710 the scope of its coverage, prohibits the exercise of, or is 46711 conditioned on the non-exercise of one or more of the rights that 46712 are specifically granted under this License. You may not convey a 46713 covered work if you are a party to an arrangement with a third 46714 party that is in the business of distributing software, under 46715 which you make payment to the third party based on the extent of 46716 your activity of conveying the work, and under which the third 46717 party grants, to any of the parties who would receive the covered 46718 work from you, a discriminatory patent license (a) in connection 46719 with copies of the covered work conveyed by you (or copies made 46720 from those copies), or (b) primarily for and in connection with 46721 specific products or compilations that contain the covered work, 46722 unless you entered into that arrangement, or that patent license 46723 was granted, prior to 28 March 2007. 46724 46725 Nothing in this License shall be construed as excluding or limiting 46726 any implied license or other defenses to infringement that may 46727 otherwise be available to you under applicable patent law. 46728 46729 12. No Surrender of Others' Freedom. 46730 46731 If conditions are imposed on you (whether by court order, 46732 agreement or otherwise) that contradict the conditions of this 46733 License, they do not excuse you from the conditions of this 46734 License. If you cannot convey a covered work so as to satisfy 46735 simultaneously your obligations under this License and any other 46736 pertinent obligations, then as a consequence you may not convey it 46737 at all. For example, if you agree to terms that obligate you to 46738 collect a royalty for further conveying from those to whom you 46739 convey the Program, the only way you could satisfy both those 46740 terms and this License would be to refrain entirely from conveying 46741 the Program. 46742 46743 13. Use with the GNU Affero General Public License. 46744 46745 Notwithstanding any other provision of this License, you have 46746 permission to link or combine any covered work with a work licensed 46747 under version 3 of the GNU Affero General Public License into a 46748 single combined work, and to convey the resulting work. The terms 46749 of this License will continue to apply to the part which is the 46750 covered work, but the special requirements of the GNU Affero 46751 General Public License, section 13, concerning interaction through 46752 a network will apply to the combination as such. 46753 46754 14. Revised Versions of this License. 46755 46756 The Free Software Foundation may publish revised and/or new 46757 versions of the GNU General Public License from time to time. 46758 Such new versions will be similar in spirit to the present 46759 version, but may differ in detail to address new problems or 46760 concerns. 46761 46762 Each version is given a distinguishing version number. If the 46763 Program specifies that a certain numbered version of the GNU 46764 General Public License "or any later version" applies to it, you 46765 have the option of following the terms and conditions either of 46766 that numbered version or of any later version published by the 46767 Free Software Foundation. If the Program does not specify a 46768 version number of the GNU General Public License, you may choose 46769 any version ever published by the Free Software Foundation. 46770 46771 If the Program specifies that a proxy can decide which future 46772 versions of the GNU General Public License can be used, that 46773 proxy's public statement of acceptance of a version permanently 46774 authorizes you to choose that version for the Program. 46775 46776 Later license versions may give you additional or different 46777 permissions. However, no additional obligations are imposed on any 46778 author or copyright holder as a result of your choosing to follow a 46779 later version. 46780 46781 15. Disclaimer of Warranty. 46782 46783 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 46784 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 46785 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 46786 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 46787 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 46788 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 46789 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 46790 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 46791 NECESSARY SERVICING, REPAIR OR CORRECTION. 46792 46793 16. Limitation of Liability. 46794 46795 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 46796 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 46797 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU 46798 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 46799 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 46800 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 46801 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 46802 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 46803 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 46804 THE POSSIBILITY OF SUCH DAMAGES. 46805 46806 17. Interpretation of Sections 15 and 16. 46807 46808 If the disclaimer of warranty and limitation of liability provided 46809 above cannot be given local legal effect according to their terms, 46810 reviewing courts shall apply local law that most closely 46811 approximates an absolute waiver of all civil liability in 46812 connection with the Program, unless a warranty or assumption of 46813 liability accompanies a copy of the Program in return for a fee. 46814 46815 46816END OF TERMS AND CONDITIONS 46817=========================== 46818 46819How to Apply These Terms to Your New Programs 46820============================================= 46821 46822If you develop a new program, and you want it to be of the greatest 46823possible use to the public, the best way to achieve this is to make it 46824free software which everyone can redistribute and change under these 46825terms. 46826 46827 To do so, attach the following notices to the program. It is safest 46828to attach them to the start of each source file to most effectively 46829state the exclusion of warranty; and each file should have at least the 46830"copyright" line and a pointer to where the full notice is found. 46831 46832 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 46833 Copyright (C) YEAR NAME OF AUTHOR 46834 46835 This program is free software: you can redistribute it and/or modify 46836 it under the terms of the GNU General Public License as published by 46837 the Free Software Foundation, either version 3 of the License, or (at 46838 your option) any later version. 46839 46840 This program is distributed in the hope that it will be useful, but 46841 WITHOUT ANY WARRANTY; without even the implied warranty of 46842 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 46843 General Public License for more details. 46844 46845 You should have received a copy of the GNU General Public License 46846 along with this program. If not, see `http://www.gnu.org/licenses/'. 46847 46848 Also add information on how to contact you by electronic and paper 46849mail. 46850 46851 If the program does terminal interaction, make it output a short 46852notice like this when it starts in an interactive mode: 46853 46854 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 46855 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 46856 This is free software, and you are welcome to redistribute it 46857 under certain conditions; type `show c' for details. 46858 46859 The hypothetical commands `show w' and `show c' should show the 46860appropriate parts of the General Public License. Of course, your 46861program's commands might be different; for a GUI interface, you would 46862use an "about box". 46863 46864 You should also get your employer (if you work as a programmer) or 46865school, if any, to sign a "copyright disclaimer" for the program, if 46866necessary. For more information on this, and how to apply and follow 46867the GNU GPL, see `http://www.gnu.org/licenses/'. 46868 46869 The GNU General Public License does not permit incorporating your 46870program into proprietary programs. If your program is a subroutine 46871library, you may consider it more useful to permit linking proprietary 46872applications with the library. If this is what you want to do, use the 46873GNU Lesser General Public License instead of this License. But first, 46874please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. 46875 46876 46877File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 46878 46879GNU Free Documentation License 46880****************************** 46881 46882 Version 1.3, 3 November 2008 46883 46884 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 46885 `http://fsf.org/' 46886 46887 Everyone is permitted to copy and distribute verbatim copies 46888 of this license document, but changing it is not allowed. 46889 46890 0. PREAMBLE 46891 46892 The purpose of this License is to make a manual, textbook, or other 46893 functional and useful document "free" in the sense of freedom: to 46894 assure everyone the effective freedom to copy and redistribute it, 46895 with or without modifying it, either commercially or 46896 noncommercially. Secondarily, this License preserves for the 46897 author and publisher a way to get credit for their work, while not 46898 being considered responsible for modifications made by others. 46899 46900 This License is a kind of "copyleft", which means that derivative 46901 works of the document must themselves be free in the same sense. 46902 It complements the GNU General Public License, which is a copyleft 46903 license designed for free software. 46904 46905 We have designed this License in order to use it for manuals for 46906 free software, because free software needs free documentation: a 46907 free program should come with manuals providing the same freedoms 46908 that the software does. But this License is not limited to 46909 software manuals; it can be used for any textual work, regardless 46910 of subject matter or whether it is published as a printed book. 46911 We recommend this License principally for works whose purpose is 46912 instruction or reference. 46913 46914 1. APPLICABILITY AND DEFINITIONS 46915 46916 This License applies to any manual or other work, in any medium, 46917 that contains a notice placed by the copyright holder saying it 46918 can be distributed under the terms of this License. Such a notice 46919 grants a world-wide, royalty-free license, unlimited in duration, 46920 to use that work under the conditions stated herein. The 46921 "Document", below, refers to any such manual or work. Any member 46922 of the public is a licensee, and is addressed as "you". You 46923 accept the license if you copy, modify or distribute the work in a 46924 way requiring permission under copyright law. 46925 46926 A "Modified Version" of the Document means any work containing the 46927 Document or a portion of it, either copied verbatim, or with 46928 modifications and/or translated into another language. 46929 46930 A "Secondary Section" is a named appendix or a front-matter section 46931 of the Document that deals exclusively with the relationship of the 46932 publishers or authors of the Document to the Document's overall 46933 subject (or to related matters) and contains nothing that could 46934 fall directly within that overall subject. (Thus, if the Document 46935 is in part a textbook of mathematics, a Secondary Section may not 46936 explain any mathematics.) The relationship could be a matter of 46937 historical connection with the subject or with related matters, or 46938 of legal, commercial, philosophical, ethical or political position 46939 regarding them. 46940 46941 The "Invariant Sections" are certain Secondary Sections whose 46942 titles are designated, as being those of Invariant Sections, in 46943 the notice that says that the Document is released under this 46944 License. If a section does not fit the above definition of 46945 Secondary then it is not allowed to be designated as Invariant. 46946 The Document may contain zero Invariant Sections. If the Document 46947 does not identify any Invariant Sections then there are none. 46948 46949 The "Cover Texts" are certain short passages of text that are 46950 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 46951 that says that the Document is released under this License. A 46952 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 46953 be at most 25 words. 46954 46955 A "Transparent" copy of the Document means a machine-readable copy, 46956 represented in a format whose specification is available to the 46957 general public, that is suitable for revising the document 46958 straightforwardly with generic text editors or (for images 46959 composed of pixels) generic paint programs or (for drawings) some 46960 widely available drawing editor, and that is suitable for input to 46961 text formatters or for automatic translation to a variety of 46962 formats suitable for input to text formatters. A copy made in an 46963 otherwise Transparent file format whose markup, or absence of 46964 markup, has been arranged to thwart or discourage subsequent 46965 modification by readers is not Transparent. An image format is 46966 not Transparent if used for any substantial amount of text. A 46967 copy that is not "Transparent" is called "Opaque". 46968 46969 Examples of suitable formats for Transparent copies include plain 46970 ASCII without markup, Texinfo input format, LaTeX input format, 46971 SGML or XML using a publicly available DTD, and 46972 standard-conforming simple HTML, PostScript or PDF designed for 46973 human modification. Examples of transparent image formats include 46974 PNG, XCF and JPG. Opaque formats include proprietary formats that 46975 can be read and edited only by proprietary word processors, SGML or 46976 XML for which the DTD and/or processing tools are not generally 46977 available, and the machine-generated HTML, PostScript or PDF 46978 produced by some word processors for output purposes only. 46979 46980 The "Title Page" means, for a printed book, the title page itself, 46981 plus such following pages as are needed to hold, legibly, the 46982 material this License requires to appear in the title page. For 46983 works in formats which do not have any title page as such, "Title 46984 Page" means the text near the most prominent appearance of the 46985 work's title, preceding the beginning of the body of the text. 46986 46987 The "publisher" means any person or entity that distributes copies 46988 of the Document to the public. 46989 46990 A section "Entitled XYZ" means a named subunit of the Document 46991 whose title either is precisely XYZ or contains XYZ in parentheses 46992 following text that translates XYZ in another language. (Here XYZ 46993 stands for a specific section name mentioned below, such as 46994 "Acknowledgements", "Dedications", "Endorsements", or "History".) 46995 To "Preserve the Title" of such a section when you modify the 46996 Document means that it remains a section "Entitled XYZ" according 46997 to this definition. 46998 46999 The Document may include Warranty Disclaimers next to the notice 47000 which states that this License applies to the Document. These 47001 Warranty Disclaimers are considered to be included by reference in 47002 this License, but only as regards disclaiming warranties: any other 47003 implication that these Warranty Disclaimers may have is void and 47004 has no effect on the meaning of this License. 47005 47006 2. VERBATIM COPYING 47007 47008 You may copy and distribute the Document in any medium, either 47009 commercially or noncommercially, provided that this License, the 47010 copyright notices, and the license notice saying this License 47011 applies to the Document are reproduced in all copies, and that you 47012 add no other conditions whatsoever to those of this License. You 47013 may not use technical measures to obstruct or control the reading 47014 or further copying of the copies you make or distribute. However, 47015 you may accept compensation in exchange for copies. If you 47016 distribute a large enough number of copies you must also follow 47017 the conditions in section 3. 47018 47019 You may also lend copies, under the same conditions stated above, 47020 and you may publicly display copies. 47021 47022 3. COPYING IN QUANTITY 47023 47024 If you publish printed copies (or copies in media that commonly 47025 have printed covers) of the Document, numbering more than 100, and 47026 the Document's license notice requires Cover Texts, you must 47027 enclose the copies in covers that carry, clearly and legibly, all 47028 these Cover Texts: Front-Cover Texts on the front cover, and 47029 Back-Cover Texts on the back cover. Both covers must also clearly 47030 and legibly identify you as the publisher of these copies. The 47031 front cover must present the full title with all words of the 47032 title equally prominent and visible. You may add other material 47033 on the covers in addition. Copying with changes limited to the 47034 covers, as long as they preserve the title of the Document and 47035 satisfy these conditions, can be treated as verbatim copying in 47036 other respects. 47037 47038 If the required texts for either cover are too voluminous to fit 47039 legibly, you should put the first ones listed (as many as fit 47040 reasonably) on the actual cover, and continue the rest onto 47041 adjacent pages. 47042 47043 If you publish or distribute Opaque copies of the Document 47044 numbering more than 100, you must either include a 47045 machine-readable Transparent copy along with each Opaque copy, or 47046 state in or with each Opaque copy a computer-network location from 47047 which the general network-using public has access to download 47048 using public-standard network protocols a complete Transparent 47049 copy of the Document, free of added material. If you use the 47050 latter option, you must take reasonably prudent steps, when you 47051 begin distribution of Opaque copies in quantity, to ensure that 47052 this Transparent copy will remain thus accessible at the stated 47053 location until at least one year after the last time you 47054 distribute an Opaque copy (directly or through your agents or 47055 retailers) of that edition to the public. 47056 47057 It is requested, but not required, that you contact the authors of 47058 the Document well before redistributing any large number of 47059 copies, to give them a chance to provide you with an updated 47060 version of the Document. 47061 47062 4. MODIFICATIONS 47063 47064 You may copy and distribute a Modified Version of the Document 47065 under the conditions of sections 2 and 3 above, provided that you 47066 release the Modified Version under precisely this License, with 47067 the Modified Version filling the role of the Document, thus 47068 licensing distribution and modification of the Modified Version to 47069 whoever possesses a copy of it. In addition, you must do these 47070 things in the Modified Version: 47071 47072 A. Use in the Title Page (and on the covers, if any) a title 47073 distinct from that of the Document, and from those of 47074 previous versions (which should, if there were any, be listed 47075 in the History section of the Document). You may use the 47076 same title as a previous version if the original publisher of 47077 that version gives permission. 47078 47079 B. List on the Title Page, as authors, one or more persons or 47080 entities responsible for authorship of the modifications in 47081 the Modified Version, together with at least five of the 47082 principal authors of the Document (all of its principal 47083 authors, if it has fewer than five), unless they release you 47084 from this requirement. 47085 47086 C. State on the Title page the name of the publisher of the 47087 Modified Version, as the publisher. 47088 47089 D. Preserve all the copyright notices of the Document. 47090 47091 E. Add an appropriate copyright notice for your modifications 47092 adjacent to the other copyright notices. 47093 47094 F. Include, immediately after the copyright notices, a license 47095 notice giving the public permission to use the Modified 47096 Version under the terms of this License, in the form shown in 47097 the Addendum below. 47098 47099 G. Preserve in that license notice the full lists of Invariant 47100 Sections and required Cover Texts given in the Document's 47101 license notice. 47102 47103 H. Include an unaltered copy of this License. 47104 47105 I. Preserve the section Entitled "History", Preserve its Title, 47106 and add to it an item stating at least the title, year, new 47107 authors, and publisher of the Modified Version as given on 47108 the Title Page. If there is no section Entitled "History" in 47109 the Document, create one stating the title, year, authors, 47110 and publisher of the Document as given on its Title Page, 47111 then add an item describing the Modified Version as stated in 47112 the previous sentence. 47113 47114 J. Preserve the network location, if any, given in the Document 47115 for public access to a Transparent copy of the Document, and 47116 likewise the network locations given in the Document for 47117 previous versions it was based on. These may be placed in 47118 the "History" section. You may omit a network location for a 47119 work that was published at least four years before the 47120 Document itself, or if the original publisher of the version 47121 it refers to gives permission. 47122 47123 K. For any section Entitled "Acknowledgements" or "Dedications", 47124 Preserve the Title of the section, and preserve in the 47125 section all the substance and tone of each of the contributor 47126 acknowledgements and/or dedications given therein. 47127 47128 L. Preserve all the Invariant Sections of the Document, 47129 unaltered in their text and in their titles. Section numbers 47130 or the equivalent are not considered part of the section 47131 titles. 47132 47133 M. Delete any section Entitled "Endorsements". Such a section 47134 may not be included in the Modified Version. 47135 47136 N. Do not retitle any existing section to be Entitled 47137 "Endorsements" or to conflict in title with any Invariant 47138 Section. 47139 47140 O. Preserve any Warranty Disclaimers. 47141 47142 If the Modified Version includes new front-matter sections or 47143 appendices that qualify as Secondary Sections and contain no 47144 material copied from the Document, you may at your option 47145 designate some or all of these sections as invariant. To do this, 47146 add their titles to the list of Invariant Sections in the Modified 47147 Version's license notice. These titles must be distinct from any 47148 other section titles. 47149 47150 You may add a section Entitled "Endorsements", provided it contains 47151 nothing but endorsements of your Modified Version by various 47152 parties--for example, statements of peer review or that the text 47153 has been approved by an organization as the authoritative 47154 definition of a standard. 47155 47156 You may add a passage of up to five words as a Front-Cover Text, 47157 and a passage of up to 25 words as a Back-Cover Text, to the end 47158 of the list of Cover Texts in the Modified Version. Only one 47159 passage of Front-Cover Text and one of Back-Cover Text may be 47160 added by (or through arrangements made by) any one entity. If the 47161 Document already includes a cover text for the same cover, 47162 previously added by you or by arrangement made by the same entity 47163 you are acting on behalf of, you may not add another; but you may 47164 replace the old one, on explicit permission from the previous 47165 publisher that added the old one. 47166 47167 The author(s) and publisher(s) of the Document do not by this 47168 License give permission to use their names for publicity for or to 47169 assert or imply endorsement of any Modified Version. 47170 47171 5. COMBINING DOCUMENTS 47172 47173 You may combine the Document with other documents released under 47174 this License, under the terms defined in section 4 above for 47175 modified versions, provided that you include in the combination 47176 all of the Invariant Sections of all of the original documents, 47177 unmodified, and list them all as Invariant Sections of your 47178 combined work in its license notice, and that you preserve all 47179 their Warranty Disclaimers. 47180 47181 The combined work need only contain one copy of this License, and 47182 multiple identical Invariant Sections may be replaced with a single 47183 copy. If there are multiple Invariant Sections with the same name 47184 but different contents, make the title of each such section unique 47185 by adding at the end of it, in parentheses, the name of the 47186 original author or publisher of that section if known, or else a 47187 unique number. Make the same adjustment to the section titles in 47188 the list of Invariant Sections in the license notice of the 47189 combined work. 47190 47191 In the combination, you must combine any sections Entitled 47192 "History" in the various original documents, forming one section 47193 Entitled "History"; likewise combine any sections Entitled 47194 "Acknowledgements", and any sections Entitled "Dedications". You 47195 must delete all sections Entitled "Endorsements." 47196 47197 6. COLLECTIONS OF DOCUMENTS 47198 47199 You may make a collection consisting of the Document and other 47200 documents released under this License, and replace the individual 47201 copies of this License in the various documents with a single copy 47202 that is included in the collection, provided that you follow the 47203 rules of this License for verbatim copying of each of the 47204 documents in all other respects. 47205 47206 You may extract a single document from such a collection, and 47207 distribute it individually under this License, provided you insert 47208 a copy of this License into the extracted document, and follow 47209 this License in all other respects regarding verbatim copying of 47210 that document. 47211 47212 7. AGGREGATION WITH INDEPENDENT WORKS 47213 47214 A compilation of the Document or its derivatives with other 47215 separate and independent documents or works, in or on a volume of 47216 a storage or distribution medium, is called an "aggregate" if the 47217 copyright resulting from the compilation is not used to limit the 47218 legal rights of the compilation's users beyond what the individual 47219 works permit. When the Document is included in an aggregate, this 47220 License does not apply to the other works in the aggregate which 47221 are not themselves derivative works of the Document. 47222 47223 If the Cover Text requirement of section 3 is applicable to these 47224 copies of the Document, then if the Document is less than one half 47225 of the entire aggregate, the Document's Cover Texts may be placed 47226 on covers that bracket the Document within the aggregate, or the 47227 electronic equivalent of covers if the Document is in electronic 47228 form. Otherwise they must appear on printed covers that bracket 47229 the whole aggregate. 47230 47231 8. TRANSLATION 47232 47233 Translation is considered a kind of modification, so you may 47234 distribute translations of the Document under the terms of section 47235 4. Replacing Invariant Sections with translations requires special 47236 permission from their copyright holders, but you may include 47237 translations of some or all Invariant Sections in addition to the 47238 original versions of these Invariant Sections. You may include a 47239 translation of this License, and all the license notices in the 47240 Document, and any Warranty Disclaimers, provided that you also 47241 include the original English version of this License and the 47242 original versions of those notices and disclaimers. In case of a 47243 disagreement between the translation and the original version of 47244 this License or a notice or disclaimer, the original version will 47245 prevail. 47246 47247 If a section in the Document is Entitled "Acknowledgements", 47248 "Dedications", or "History", the requirement (section 4) to 47249 Preserve its Title (section 1) will typically require changing the 47250 actual title. 47251 47252 9. TERMINATION 47253 47254 You may not copy, modify, sublicense, or distribute the Document 47255 except as expressly provided under this License. Any attempt 47256 otherwise to copy, modify, sublicense, or distribute it is void, 47257 and will automatically terminate your rights under this License. 47258 47259 However, if you cease all violation of this License, then your 47260 license from a particular copyright holder is reinstated (a) 47261 provisionally, unless and until the copyright holder explicitly 47262 and finally terminates your license, and (b) permanently, if the 47263 copyright holder fails to notify you of the violation by some 47264 reasonable means prior to 60 days after the cessation. 47265 47266 Moreover, your license from a particular copyright holder is 47267 reinstated permanently if the copyright holder notifies you of the 47268 violation by some reasonable means, this is the first time you have 47269 received notice of violation of this License (for any work) from 47270 that copyright holder, and you cure the violation prior to 30 days 47271 after your receipt of the notice. 47272 47273 Termination of your rights under this section does not terminate 47274 the licenses of parties who have received copies or rights from 47275 you under this License. If your rights have been terminated and 47276 not permanently reinstated, receipt of a copy of some or all of 47277 the same material does not give you any rights to use it. 47278 47279 10. FUTURE REVISIONS OF THIS LICENSE 47280 47281 The Free Software Foundation may publish new, revised versions of 47282 the GNU Free Documentation License from time to time. Such new 47283 versions will be similar in spirit to the present version, but may 47284 differ in detail to address new problems or concerns. See 47285 `http://www.gnu.org/copyleft/'. 47286 47287 Each version of the License is given a distinguishing version 47288 number. If the Document specifies that a particular numbered 47289 version of this License "or any later version" applies to it, you 47290 have the option of following the terms and conditions either of 47291 that specified version or of any later version that has been 47292 published (not as a draft) by the Free Software Foundation. If 47293 the Document does not specify a version number of this License, 47294 you may choose any version ever published (not as a draft) by the 47295 Free Software Foundation. If the Document specifies that a proxy 47296 can decide which future versions of this License can be used, that 47297 proxy's public statement of acceptance of a version permanently 47298 authorizes you to choose that version for the Document. 47299 47300 11. RELICENSING 47301 47302 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 47303 World Wide Web server that publishes copyrightable works and also 47304 provides prominent facilities for anybody to edit those works. A 47305 public wiki that anybody can edit is an example of such a server. 47306 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 47307 site means any set of copyrightable works thus published on the MMC 47308 site. 47309 47310 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 47311 license published by Creative Commons Corporation, a not-for-profit 47312 corporation with a principal place of business in San Francisco, 47313 California, as well as future copyleft versions of that license 47314 published by that same organization. 47315 47316 "Incorporate" means to publish or republish a Document, in whole or 47317 in part, as part of another Document. 47318 47319 An MMC is "eligible for relicensing" if it is licensed under this 47320 License, and if all works that were first published under this 47321 License somewhere other than this MMC, and subsequently 47322 incorporated in whole or in part into the MMC, (1) had no cover 47323 texts or invariant sections, and (2) were thus incorporated prior 47324 to November 1, 2008. 47325 47326 The operator of an MMC Site may republish an MMC contained in the 47327 site under CC-BY-SA on the same site at any time before August 1, 47328 2009, provided the MMC is eligible for relicensing. 47329 47330 47331ADDENDUM: How to use this License for your documents 47332==================================================== 47333 47334To use this License in a document you have written, include a copy of 47335the License in the document and put the following copyright and license 47336notices just after the title page: 47337 47338 Copyright (C) YEAR YOUR NAME. 47339 Permission is granted to copy, distribute and/or modify this document 47340 under the terms of the GNU Free Documentation License, Version 1.3 47341 or any later version published by the Free Software Foundation; 47342 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 47343 Texts. A copy of the license is included in the section entitled ``GNU 47344 Free Documentation License''. 47345 47346 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 47347replace the "with...Texts." line with this: 47348 47349 with the Invariant Sections being LIST THEIR TITLES, with 47350 the Front-Cover Texts being LIST, and with the Back-Cover Texts 47351 being LIST. 47352 47353 If you have Invariant Sections without Cover Texts, or some other 47354combination of the three, merge those two alternatives to suit the 47355situation. 47356 47357 If your document contains nontrivial examples of program code, we 47358recommend releasing these examples in parallel under your choice of 47359free software license, such as the GNU General Public License, to 47360permit their use in free software. 47361 47362 47363File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 47364 47365Contributors to GCC 47366******************* 47367 47368The GCC project would like to thank its many contributors. Without 47369them the project would not have been nearly as successful as it has 47370been. Any omissions in this list are accidental. Feel free to contact 47371<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or 47372some of your contributions are not listed. Please keep this list in 47373alphabetical order. 47374 47375 * Analog Devices helped implement the support for complex data types 47376 and iterators. 47377 47378 * John David Anglin for threading-related fixes and improvements to 47379 libstdc++-v3, and the HP-UX port. 47380 47381 * James van Artsdalen wrote the code that makes efficient use of the 47382 Intel 80387 register stack. 47383 47384 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 47385 Series port. 47386 47387 * Alasdair Baird for various bug fixes. 47388 47389 * Giovanni Bajo for analyzing lots of complicated C++ problem 47390 reports. 47391 47392 * Peter Barada for his work to improve code generation for new 47393 ColdFire cores. 47394 47395 * Gerald Baumgartner added the signature extension to the C++ front 47396 end. 47397 47398 * Godmar Back for his Java improvements and encouragement. 47399 47400 * Scott Bambrough for help porting the Java compiler. 47401 47402 * Wolfgang Bangerth for processing tons of bug reports. 47403 47404 * Jon Beniston for his Microsoft Windows port of Java and port to 47405 Lattice Mico32. 47406 47407 * Daniel Berlin for better DWARF2 support, faster/better 47408 optimizations, improved alias analysis, plus migrating GCC to 47409 Bugzilla. 47410 47411 * Geoff Berry for his Java object serialization work and various 47412 patches. 47413 47414 * David Binderman tests weekly snapshots of GCC trunk against Fedora 47415 Rawhide for several architectures. 47416 47417 * Laurynas Biveinis for memory management work and DJGPP port fixes. 47418 47419 * Uros Bizjak for the implementation of x87 math built-in functions 47420 and for various middle end and i386 back end improvements and bug 47421 fixes. 47422 47423 * Eric Blake for helping to make GCJ and libgcj conform to the 47424 specifications. 47425 47426 * Janne Blomqvist for contributions to GNU Fortran. 47427 47428 * Segher Boessenkool for various fixes. 47429 47430 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 47431 other Java work. 47432 47433 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 47434 miscellaneous clean-ups. 47435 47436 * Steven Bosscher for integrating the GNU Fortran front end into GCC 47437 and for contributing to the tree-ssa branch. 47438 47439 * Eric Botcazou for fixing middle- and backend bugs left and right. 47440 47441 * Per Bothner for his direction via the steering committee and 47442 various improvements to the infrastructure for supporting new 47443 languages. Chill front end implementation. Initial 47444 implementations of cpplib, fix-header, config.guess, libio, and 47445 past C++ library (libg++) maintainer. Dreaming up, designing and 47446 implementing much of GCJ. 47447 47448 * Devon Bowen helped port GCC to the Tahoe. 47449 47450 * Don Bowman for mips-vxworks contributions. 47451 47452 * Dave Brolley for work on cpplib and Chill. 47453 47454 * Paul Brook for work on the ARM architecture and maintaining GNU 47455 Fortran. 47456 47457 * Robert Brown implemented the support for Encore 32000 systems. 47458 47459 * Christian Bruel for improvements to local store elimination. 47460 47461 * Herman A.J. ten Brugge for various fixes. 47462 47463 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 47464 FAQ. 47465 47466 * Joe Buck for his direction via the steering committee from its 47467 creation to 2013. 47468 47469 * Craig Burley for leadership of the G77 Fortran effort. 47470 47471 * Stephan Buys for contributing Doxygen notes for libstdc++. 47472 47473 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 47474 to the C++ strings, streambufs and formatted I/O, hard detective 47475 work on the frustrating localization issues, and keeping up with 47476 the problem reports. 47477 47478 * John Carr for his alias work, SPARC hacking, infrastructure 47479 improvements, previous contributions to the steering committee, 47480 loop optimizations, etc. 47481 47482 * Stephane Carrez for 68HC11 and 68HC12 ports. 47483 47484 * Steve Chamberlain for support for the Renesas SH and H8 processors 47485 and the PicoJava processor, and for GCJ config fixes. 47486 47487 * Glenn Chambers for help with the GCJ FAQ. 47488 47489 * John-Marc Chandonia for various libgcj patches. 47490 47491 * Denis Chertykov for contributing and maintaining the AVR port, the 47492 first GCC port for an 8-bit architecture. 47493 47494 * Scott Christley for his Objective-C contributions. 47495 47496 * Eric Christopher for his Java porting help and clean-ups. 47497 47498 * Branko Cibej for more warning contributions. 47499 47500 * The GNU Classpath project for all of their merged runtime code. 47501 47502 * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work, 47503 `--help', and other random hacking. 47504 47505 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 47506 47507 * R. Kelley Cook for making GCC buildable from a read-only directory 47508 as well as other miscellaneous build process and documentation 47509 clean-ups. 47510 47511 * Ralf Corsepius for SH testing and minor bug fixing. 47512 47513 * Stan Cox for care and feeding of the x86 port and lots of behind 47514 the scenes hacking. 47515 47516 * Alex Crain provided changes for the 3b1. 47517 47518 * Ian Dall for major improvements to the NS32k port. 47519 47520 * Paul Dale for his work to add uClinux platform support to the m68k 47521 backend. 47522 47523 * Dario Dariol contributed the four varieties of sample programs 47524 that print a copy of their source. 47525 47526 * Russell Davidson for fstream and stringstream fixes in libstdc++. 47527 47528 * Bud Davis for work on the G77 and GNU Fortran compilers. 47529 47530 * Mo DeJong for GCJ and libgcj bug fixes. 47531 47532 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 47533 various bug fixes, and the M32C, MeP, MSP430, and RL78 ports. 47534 47535 * Arnaud Desitter for helping to debug GNU Fortran. 47536 47537 * Gabriel Dos Reis for contributions to G++, contributions and 47538 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 47539 including `valarray<>', `complex<>', maintaining the numerics 47540 library (including that pesky `<limits>' :-) and keeping 47541 up-to-date anything to do with numbers. 47542 47543 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 47544 ISO C99 support, CFG dumping support, etc., plus support of the 47545 C++ runtime libraries including for all kinds of C interface 47546 issues, contributing and maintaining `complex<>', sanity checking 47547 and disbursement, configuration architecture, libio maintenance, 47548 and early math work. 47549 47550 * Franc,ois Dumont for his work on libstdc++-v3, especially 47551 maintaining and improving `debug-mode' and associative and 47552 unordered containers. 47553 47554 * Zdenek Dvorak for a new loop unroller and various fixes. 47555 47556 * Michael Eager for his work on the Xilinx MicroBlaze port. 47557 47558 * Richard Earnshaw for his ongoing work with the ARM. 47559 47560 * David Edelsohn for his direction via the steering committee, 47561 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 47562 loop changes, doing the entire AIX port of libstdc++ with his bare 47563 hands, and for ensuring GCC properly keeps working on AIX. 47564 47565 * Kevin Ediger for the floating point formatting of num_put::do_put 47566 in libstdc++. 47567 47568 * Phil Edwards for libstdc++ work including configuration hackery, 47569 documentation maintainer, chief breaker of the web pages, the 47570 occasional iostream bug fix, and work on shared library symbol 47571 versioning. 47572 47573 * Paul Eggert for random hacking all over GCC. 47574 47575 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 47576 configuration support for locales and fstream-related fixes. 47577 47578 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 47579 iostreams. 47580 47581 * Christian Ehrhardt for dealing with bug reports. 47582 47583 * Ben Elliston for his work to move the Objective-C runtime into its 47584 own subdirectory and for his work on autoconf. 47585 47586 * Revital Eres for work on the PowerPC 750CL port. 47587 47588 * Marc Espie for OpenBSD support. 47589 47590 * Doug Evans for much of the global optimization framework, arc, 47591 m32r, and SPARC work. 47592 47593 * Christopher Faylor for his work on the Cygwin port and for caring 47594 and feeding the gcc.gnu.org box and saving its users tons of spam. 47595 47596 * Fred Fish for BeOS support and Ada fixes. 47597 47598 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 47599 47600 * Peter Gerwinski for various bug fixes and the Pascal front end. 47601 47602 * Kaveh R. Ghazi for his direction via the steering committee, 47603 amazing work to make `-W -Wall -W* -Werror' useful, and testing 47604 GCC on a plethora of platforms. Kaveh extends his gratitude to 47605 the CAIP Center at Rutgers University for providing him with 47606 computing resources to work on Free Software from the late 1980s 47607 to 2010. 47608 47609 * John Gilmore for a donation to the FSF earmarked improving GNU 47610 Java. 47611 47612 * Judy Goldberg for c++ contributions. 47613 47614 * Torbjorn Granlund for various fixes and the c-torture testsuite, 47615 multiply- and divide-by-constant optimization, improved long long 47616 support, improved leaf function register allocation, and his 47617 direction via the steering committee. 47618 47619 * Jonny Grant for improvements to `collect2's' `--help' 47620 documentation. 47621 47622 * Anthony Green for his `-Os' contributions, the moxie port, and 47623 Java front end work. 47624 47625 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 47626 Java code. 47627 47628 * Michael K. Gschwind contributed the port to the PDP-11. 47629 47630 * Richard Biener for his ongoing middle-end contributions and bug 47631 fixes and for release management. 47632 47633 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 47634 the support for Dwarf symbolic debugging information, and much of 47635 the support for System V Release 4. He has also worked heavily on 47636 the Intel 386 and 860 support. 47637 47638 * Sumanth Gundapaneni for contributing the CR16 port. 47639 47640 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 47641 GCSE. 47642 47643 * Bruno Haible for improvements in the runtime overhead for EH, new 47644 warnings and assorted bug fixes. 47645 47646 * Andrew Haley for his amazing Java compiler and library efforts. 47647 47648 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 47649 series 300. 47650 47651 * Michael Hayes for various thankless work he's done trying to get 47652 the c30/c40 ports functional. Lots of loop and unroll 47653 improvements and fixes. 47654 47655 * Dara Hazeghi for wading through myriads of target-specific bug 47656 reports. 47657 47658 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 47659 47660 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 47661 work, loop opts, and generally fixing lots of old problems we've 47662 ignored for years, flow rewrite and lots of further stuff, 47663 including reviewing tons of patches. 47664 47665 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 47666 various fixes. 47667 47668 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 47669 contributed the support for the Sony NEWS machine. 47670 47671 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 47672 various fixes. 47673 47674 * Katherine Holcomb for work on GNU Fortran. 47675 47676 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 47677 of testing and bug fixing, particularly of GCC configury code. 47678 47679 * Steve Holmgren for MachTen patches. 47680 47681 * Mat Hostetter for work on the TILE-Gx and TILEPro ports. 47682 47683 * Jan Hubicka for his x86 port improvements. 47684 47685 * Falk Hueffner for working on C and optimization bug reports. 47686 47687 * Bernardo Innocenti for his m68k work, including merging of 47688 ColdFire improvements and uClinux support. 47689 47690 * Christian Iseli for various bug fixes. 47691 47692 * Kamil Iskra for general m68k hacking. 47693 47694 * Lee Iverson for random fixes and MIPS testing. 47695 47696 * Balaji V. Iyer for Cilk+ development and merging. 47697 47698 * Andreas Jaeger for testing and benchmarking of GCC and various bug 47699 fixes. 47700 47701 * Martin Jambor for his work on inter-procedural optimizations, the 47702 switch conversion pass, and scalar replacement of aggregates. 47703 47704 * Jakub Jelinek for his SPARC work and sibling call optimizations as 47705 well as lots of bug fixes and test cases, and for improving the 47706 Java build system. 47707 47708 * Janis Johnson for ia64 testing and fixes, her quality improvement 47709 sidetracks, and web page maintenance. 47710 47711 * Kean Johnston for SCO OpenServer support and various fixes. 47712 47713 * Tim Josling for the sample language treelang based originally on 47714 Richard Kenner's "toy" language. 47715 47716 * Nicolai Josuttis for additional libstdc++ documentation. 47717 47718 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 47719 target. 47720 47721 * Steven G. Kargl for work on GNU Fortran. 47722 47723 * David Kashtan of SRI adapted GCC to VMS. 47724 47725 * Ryszard Kabatek for many, many libstdc++ bug fixes and 47726 optimizations of strings, especially member functions, and for 47727 auto_ptr fixes. 47728 47729 * Geoffrey Keating for his ongoing work to make the PPC work for 47730 GNU/Linux and his automatic regression tester. 47731 47732 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 47733 work in just about every part of libstdc++. 47734 47735 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 47736 MIL-STD-1750A. 47737 47738 * Richard Kenner of the New York University Ultracomputer Research 47739 Laboratory wrote the machine descriptions for the AMD 29000, the 47740 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 47741 support for instruction attributes. He also made changes to 47742 better support RISC processors including changes to common 47743 subexpression elimination, strength reduction, function calling 47744 sequence handling, and condition code support, in addition to 47745 generalizing the code for frame pointer elimination and delay slot 47746 scheduling. Richard Kenner was also the head maintainer of GCC 47747 for several years. 47748 47749 * Mumit Khan for various contributions to the Cygwin and Mingw32 47750 ports and maintaining binary releases for Microsoft Windows hosts, 47751 and for massive libstdc++ porting work to Cygwin/Mingw32. 47752 47753 * Robin Kirkham for cpu32 support. 47754 47755 * Mark Klein for PA improvements. 47756 47757 * Thomas Koenig for various bug fixes. 47758 47759 * Bruce Korb for the new and improved fixincludes code. 47760 47761 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 47762 effort. 47763 47764 * Maxim Kuvyrkov for contributions to the instruction scheduler, the 47765 Android and m68k/Coldfire ports, and optimizations. 47766 47767 * Charles LaBrec contributed the support for the Integrated Solutions 47768 68020 system. 47769 47770 * Asher Langton and Mike Kumbera for contributing Cray pointer 47771 support to GNU Fortran, and for other GNU Fortran improvements. 47772 47773 * Jeff Law for his direction via the steering committee, 47774 coordinating the entire egcs project and GCC 2.95, rolling out 47775 snapshots and releases, handling merges from GCC2, reviewing tons 47776 of patches that might have fallen through the cracks else, and 47777 random but extensive hacking. 47778 47779 * Walter Lee for work on the TILE-Gx and TILEPro ports. 47780 47781 * Marc Lehmann for his direction via the steering committee and 47782 helping with analysis and improvements of x86 performance. 47783 47784 * Victor Leikehman for work on GNU Fortran. 47785 47786 * Ted Lemon wrote parts of the RTL reader and printer. 47787 47788 * Kriang Lerdsuwanakij for C++ improvements including template as 47789 template parameter support, and many C++ fixes. 47790 47791 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 47792 and random work on the Java front end. 47793 47794 * Alain Lichnewsky ported GCC to the MIPS CPU. 47795 47796 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 47797 and patches. 47798 47799 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 47800 47801 * Chen Liqin for various S+core related fixes/improvement, and for 47802 maintaining the S+core port. 47803 47804 * Weiwen Liu for testing and various bug fixes. 47805 47806 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other 47807 diagnostics fixes and improvements. 47808 47809 * Dave Love for his ongoing work with the Fortran front end and 47810 runtime libraries. 47811 47812 * Martin von Lo"wis for internal consistency checking infrastructure, 47813 various C++ improvements including namespace support, and tons of 47814 assistance with libstdc++/compiler merges. 47815 47816 * H.J. Lu for his previous contributions to the steering committee, 47817 many x86 bug reports, prototype patches, and keeping the GNU/Linux 47818 ports working. 47819 47820 * Greg McGary for random fixes and (someday) bounded pointers. 47821 47822 * Andrew MacLeod for his ongoing work in building a real EH system, 47823 various code generation improvements, work on the global 47824 optimizer, etc. 47825 47826 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 47827 hacking improvements to compile-time performance, overall 47828 knowledge and direction in the area of instruction scheduling, and 47829 design and implementation of the automaton based instruction 47830 scheduler. 47831 47832 * Bob Manson for his behind the scenes work on dejagnu. 47833 47834 * John Marino for contributing the DragonFly BSD port. 47835 47836 * Philip Martin for lots of libstdc++ string and vector iterator 47837 fixes and improvements, and string clean up and testsuites. 47838 47839 * Michael Matz for his work on dominance tree discovery, the x86-64 47840 port, link-time optimization framework and general optimization 47841 improvements. 47842 47843 * All of the Mauve project contributors, for Java test code. 47844 47845 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 47846 47847 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 47848 47849 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 47850 powerpc, haifa, ECOFF debug support, and other assorted hacking. 47851 47852 * Jason Merrill for his direction via the steering committee and 47853 leading the G++ effort. 47854 47855 * Martin Michlmayr for testing GCC on several architectures using the 47856 entire Debian archive. 47857 47858 * David Miller for his direction via the steering committee, lots of 47859 SPARC work, improvements in jump.c and interfacing with the Linux 47860 kernel developers. 47861 47862 * Gary Miller ported GCC to Charles River Data Systems machines. 47863 47864 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 47865 the entire libstdc++ testsuite namespace-compatible. 47866 47867 * Mark Mitchell for his direction via the steering committee, 47868 mountains of C++ work, load/store hoisting out of loops, alias 47869 analysis improvements, ISO C `restrict' support, and serving as 47870 release manager from 2000 to 2011. 47871 47872 * Alan Modra for various GNU/Linux bits and testing. 47873 47874 * Toon Moene for his direction via the steering committee, Fortran 47875 maintenance, and his ongoing work to make us make Fortran run fast. 47876 47877 * Jason Molenda for major help in the care and feeding of all the 47878 services on the gcc.gnu.org (formerly egcs.cygnus.com) 47879 machine--mail, web services, ftp services, etc etc. Doing all 47880 this work on scrap paper and the backs of envelopes would have 47881 been... difficult. 47882 47883 * Catherine Moore for fixing various ugly problems we have sent her 47884 way, including the haifa bug which was killing the Alpha & PowerPC 47885 Linux kernels. 47886 47887 * Mike Moreton for his various Java patches. 47888 47889 * David Mosberger-Tang for various Alpha improvements, and for the 47890 initial IA-64 port. 47891 47892 * Stephen Moshier contributed the floating point emulator that 47893 assists in cross-compilation and permits support for floating 47894 point numbers wider than 64 bits and for ISO C99 support. 47895 47896 * Bill Moyer for his behind the scenes work on various issues. 47897 47898 * Philippe De Muyter for his work on the m68k port. 47899 47900 * Joseph S. Myers for his work on the PDP-11 port, format checking 47901 and ISO C99 support, and continuous emphasis on (and contributions 47902 to) documentation. 47903 47904 * Nathan Myers for his work on libstdc++-v3: architecture and 47905 authorship through the first three snapshots, including 47906 implementation of locale infrastructure, string, shadow C headers, 47907 and the initial project documentation (DESIGN, CHECKLIST, and so 47908 forth). Later, more work on MT-safe string and shadow headers. 47909 47910 * Felix Natter for documentation on porting libstdc++. 47911 47912 * Nathanael Nerode for cleaning up the configuration/build process. 47913 47914 * NeXT, Inc. donated the front end that supports the Objective-C 47915 language. 47916 47917 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 47918 the search engine setup, various documentation fixes and other 47919 small fixes. 47920 47921 * Geoff Noer for his work on getting cygwin native builds working. 47922 47923 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 47924 tracking web pages, GIMPLE tuples, and assorted fixes. 47925 47926 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 47927 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 47928 related infrastructure improvements. 47929 47930 * Alexandre Oliva for various build infrastructure improvements, 47931 scripts and amazing testing work, including keeping libtool issues 47932 sane and happy. 47933 47934 * Stefan Olsson for work on mt_alloc. 47935 47936 * Melissa O'Neill for various NeXT fixes. 47937 47938 * Rainer Orth for random MIPS work, including improvements to GCC's 47939 o32 ABI support, improvements to dejagnu's MIPS support, Java 47940 configuration clean-ups and porting work, and maintaining the 47941 IRIX, Solaris 2, and Tru64 UNIX ports. 47942 47943 * Hartmut Penner for work on the s390 port. 47944 47945 * Paul Petersen wrote the machine description for the Alliant FX/8. 47946 47947 * Alexandre Petit-Bianco for implementing much of the Java compiler 47948 and continued Java maintainership. 47949 47950 * Matthias Pfaller for major improvements to the NS32k port. 47951 47952 * Gerald Pfeifer for his direction via the steering committee, 47953 pointing out lots of problems we need to solve, maintenance of the 47954 web pages, and taking care of documentation maintenance in general. 47955 47956 * Andrew Pinski for processing bug reports by the dozen. 47957 47958 * Ovidiu Predescu for his work on the Objective-C front end and 47959 runtime libraries. 47960 47961 * Jerry Quinn for major performance improvements in C++ formatted 47962 I/O. 47963 47964 * Ken Raeburn for various improvements to checker, MIPS ports and 47965 various cleanups in the compiler. 47966 47967 * Rolf W. Rasmussen for hacking on AWT. 47968 47969 * David Reese of Sun Microsystems contributed to the Solaris on 47970 PowerPC port. 47971 47972 * Volker Reichelt for keeping up with the problem reports. 47973 47974 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 47975 hacking and developing and maintaining the Epiphany port. 47976 47977 * Loren J. Rittle for improvements to libstdc++-v3 including the 47978 FreeBSD port, threading fixes, thread-related configury changes, 47979 critical threading documentation, and solutions to really tricky 47980 I/O problems, as well as keeping GCC properly working on FreeBSD 47981 and continuous testing. 47982 47983 * Craig Rodrigues for processing tons of bug reports. 47984 47985 * Ola Ro"nnerup for work on mt_alloc. 47986 47987 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 47988 47989 * David Ronis inspired and encouraged Craig to rewrite the G77 47990 documentation in texinfo format by contributing a first pass at a 47991 translation of the old `g77-0.5.16/f/DOC' file. 47992 47993 * Ken Rose for fixes to GCC's delay slot filling code. 47994 47995 * Ira Rosen for her contributions to the auto-vectorizer. 47996 47997 * Paul Rubin wrote most of the preprocessor. 47998 47999 * Pe'tur Runo'lfsson for major performance improvements in C++ 48000 formatted I/O and large file support in C++ filebuf. 48001 48002 * Chip Salzenberg for libstdc++ patches and improvements to locales, 48003 traits, Makefiles, libio, libtool hackery, and "long long" support. 48004 48005 * Juha Sarlin for improvements to the H8 code generator. 48006 48007 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 48008 300. 48009 48010 * Roger Sayle for improvements to constant folding and GCC's RTL 48011 optimizers as well as for fixing numerous bugs. 48012 48013 * Bradley Schatz for his work on the GCJ FAQ. 48014 48015 * Peter Schauer wrote the code to allow debugging to work on the 48016 Alpha. 48017 48018 * William Schelter did most of the work on the Intel 80386 support. 48019 48020 * Tobias Schlu"ter for work on GNU Fortran. 48021 48022 * Bernd Schmidt for various code generation improvements and major 48023 work in the reload pass, serving as release manager for GCC 48024 2.95.3, and work on the Blackfin and C6X ports. 48025 48026 * Peter Schmid for constant testing of libstdc++--especially 48027 application testing, going above and beyond what was requested for 48028 the release criteria--and libstdc++ header file tweaks. 48029 48030 * Jason Schroeder for jcf-dump patches. 48031 48032 * Andreas Schwab for his work on the m68k port. 48033 48034 * Lars Segerlund for work on GNU Fortran. 48035 48036 * Dodji Seketeli for numerous C++ bug fixes and debug info 48037 improvements. 48038 48039 * Tim Shen for major work on `<regex>'. 48040 48041 * Joel Sherrill for his direction via the steering committee, RTEMS 48042 contributions and RTEMS testing. 48043 48044 * Nathan Sidwell for many C++ fixes/improvements. 48045 48046 * Jeffrey Siegal for helping RMS with the original design of GCC, 48047 some code which handles the parse tree and RTL data structures, 48048 constant folding and help with the original VAX & m68k ports. 48049 48050 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 48051 from the LWG (thereby keeping GCC in line with updates from the 48052 ISO). 48053 48054 * Franz Sirl for his ongoing work with making the PPC port stable 48055 for GNU/Linux. 48056 48057 * Andrey Slepuhin for assorted AIX hacking. 48058 48059 * Trevor Smigiel for contributing the SPU port. 48060 48061 * Christopher Smith did the port for Convex machines. 48062 48063 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 48064 Retired from GCC maintainership August 2010, having mentored two 48065 new maintainers into the role. 48066 48067 * Randy Smith finished the Sun FPA support. 48068 48069 * Ed Smith-Rowland for his continuous work on libstdc++-v3, special 48070 functions, `<random>', and various improvements to C++11 features. 48071 48072 * Scott Snyder for queue, iterator, istream, and string fixes and 48073 libstdc++ testsuite entries. Also for providing the patch to G77 48074 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 48075 `LOGICAL*1'. 48076 48077 * Zdenek Sojka for running automated regression testing of GCC and 48078 reporting numerous bugs. 48079 48080 * Jayant Sonar for contributing the CR16 port. 48081 48082 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 48083 48084 * Richard Stallman, for writing the original GCC and launching the 48085 GNU project. 48086 48087 * Jan Stein of the Chalmers Computer Society provided support for 48088 Genix, as well as part of the 32000 machine description. 48089 48090 * Nigel Stephens for various mips16 related fixes/improvements. 48091 48092 * Jonathan Stone wrote the machine description for the Pyramid 48093 computer. 48094 48095 * Graham Stott for various infrastructure improvements. 48096 48097 * John Stracke for his Java HTTP protocol fixes. 48098 48099 * Mike Stump for his Elxsi port, G++ contributions over the years 48100 and more recently his vxworks contributions 48101 48102 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 48103 48104 * Shigeya Suzuki for this fixes for the bsdi platforms. 48105 48106 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 48107 support, general configury hacking, fixincludes, etc. 48108 48109 * Holger Teutsch provided the support for the Clipper CPU. 48110 48111 * Gary Thomas for his ongoing work to make the PPC work for 48112 GNU/Linux. 48113 48114 * Philipp Thomas for random bug fixes throughout the compiler 48115 48116 * Jason Thorpe for thread support in libstdc++ on NetBSD. 48117 48118 * Kresten Krab Thorup wrote the run time support for the Objective-C 48119 language and the fantastic Java bytecode interpreter. 48120 48121 * Michael Tiemann for random bug fixes, the first instruction 48122 scheduler, initial C++ support, function integration, NS32k, SPARC 48123 and M88k machine description work, delay slot scheduling. 48124 48125 * Andreas Tobler for his work porting libgcj to Darwin. 48126 48127 * Teemu Torma for thread safe exception handling support. 48128 48129 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 48130 definitions, and of the VAX machine description. 48131 48132 * Daniel Towner and Hariharan Sandanagobalane contributed and 48133 maintain the picoChip port. 48134 48135 * Tom Tromey for internationalization support and for his many Java 48136 contributions and libgcj maintainership. 48137 48138 * Lassi Tuura for improvements to config.guess to determine HP 48139 processor types. 48140 48141 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 48142 48143 * Andy Vaught for the design and initial implementation of the GNU 48144 Fortran front end. 48145 48146 * Brent Verner for work with the libstdc++ cshadow files and their 48147 associated configure steps. 48148 48149 * Todd Vierling for contributions for NetBSD ports. 48150 48151 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 48152 guidance. 48153 48154 * Dean Wakerley for converting the install documentation from HTML 48155 to texinfo in time for GCC 3.0. 48156 48157 * Krister Walfridsson for random bug fixes. 48158 48159 * Feng Wang for contributions to GNU Fortran. 48160 48161 * Stephen M. Webb for time and effort on making libstdc++ shadow 48162 files work with the tricky Solaris 8+ headers, and for pushing the 48163 build-time header tree. Also, for starting and driving the 48164 `<regex>' effort. 48165 48166 * John Wehle for various improvements for the x86 code generator, 48167 related infrastructure improvements to help x86 code generation, 48168 value range propagation and other work, WE32k port. 48169 48170 * Ulrich Weigand for work on the s390 port. 48171 48172 * Zack Weinberg for major work on cpplib and various other bug fixes. 48173 48174 * Matt Welsh for help with Linux Threads support in GCJ. 48175 48176 * Urban Widmark for help fixing java.io. 48177 48178 * Mark Wielaard for new Java library code and his work integrating 48179 with Classpath. 48180 48181 * Dale Wiles helped port GCC to the Tahoe. 48182 48183 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 48184 48185 * Jim Wilson for his direction via the steering committee, tackling 48186 hard problems in various places that nobody else wanted to work 48187 on, strength reduction and other loop optimizations. 48188 48189 * Paul Woegerer and Tal Agmon for the CRX port. 48190 48191 * Carlo Wood for various fixes. 48192 48193 * Tom Wood for work on the m88k port. 48194 48195 * Chung-Ju Wu for his work on the Andes NDS32 port. 48196 48197 * Canqun Yang for work on GNU Fortran. 48198 48199 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 48200 description for the Tron architecture (specifically, the Gmicro). 48201 48202 * Kevin Zachmann helped port GCC to the Tahoe. 48203 48204 * Ayal Zaks for Swing Modulo Scheduling (SMS). 48205 48206 * Xiaoqiang Zhang for work on GNU Fortran. 48207 48208 * Gilles Zunino for help porting Java to Irix. 48209 48210 48211 The following people are recognized for their contributions to GNAT, 48212the Ada front end of GCC: 48213 * Bernard Banner 48214 48215 * Romain Berrendonner 48216 48217 * Geert Bosch 48218 48219 * Emmanuel Briot 48220 48221 * Joel Brobecker 48222 48223 * Ben Brosgol 48224 48225 * Vincent Celier 48226 48227 * Arnaud Charlet 48228 48229 * Chien Chieng 48230 48231 * Cyrille Comar 48232 48233 * Cyrille Crozes 48234 48235 * Robert Dewar 48236 48237 * Gary Dismukes 48238 48239 * Robert Duff 48240 48241 * Ed Falis 48242 48243 * Ramon Fernandez 48244 48245 * Sam Figueroa 48246 48247 * Vasiliy Fofanov 48248 48249 * Michael Friess 48250 48251 * Franco Gasperoni 48252 48253 * Ted Giering 48254 48255 * Matthew Gingell 48256 48257 * Laurent Guerby 48258 48259 * Jerome Guitton 48260 48261 * Olivier Hainque 48262 48263 * Jerome Hugues 48264 48265 * Hristian Kirtchev 48266 48267 * Jerome Lambourg 48268 48269 * Bruno Leclerc 48270 48271 * Albert Lee 48272 48273 * Sean McNeil 48274 48275 * Javier Miranda 48276 48277 * Laurent Nana 48278 48279 * Pascal Obry 48280 48281 * Dong-Ik Oh 48282 48283 * Laurent Pautet 48284 48285 * Brett Porter 48286 48287 * Thomas Quinot 48288 48289 * Nicolas Roche 48290 48291 * Pat Rogers 48292 48293 * Jose Ruiz 48294 48295 * Douglas Rupp 48296 48297 * Sergey Rybin 48298 48299 * Gail Schenker 48300 48301 * Ed Schonberg 48302 48303 * Nicolas Setton 48304 48305 * Samuel Tardieu 48306 48307 48308 The following people are recognized for their contributions of new 48309features, bug reports, testing and integration of classpath/libgcj for 48310GCC version 4.1: 48311 * Lillian Angel for `JTree' implementation and lots Free Swing 48312 additions and bug fixes. 48313 48314 * Wolfgang Baer for `GapContent' bug fixes. 48315 48316 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 48317 event fixes, lots of Free Swing work including `JTable' editing. 48318 48319 * Stuart Ballard for RMI constant fixes. 48320 48321 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 48322 48323 * Gary Benson for `MessageFormat' fixes. 48324 48325 * Daniel Bonniot for `Serialization' fixes. 48326 48327 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 48328 and `DOM xml:id' support. 48329 48330 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 48331 48332 * Archie Cobbs for build fixes, VM interface updates, 48333 `URLClassLoader' updates. 48334 48335 * Kelley Cook for build fixes. 48336 48337 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 48338 48339 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite 48340 and improvements. 48341 48342 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 48343 2D support. Lots of imageio framework additions, lots of AWT and 48344 Free Swing bug fixes. 48345 48346 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 48347 fixes, better `Proxy' support, bug fixes and IKVM integration. 48348 48349 * Santiago Gala for `AccessControlContext' fixes. 48350 48351 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 48352 improvements. 48353 48354 * David Gilbert for `basic' and `metal' icon and plaf support and 48355 lots of documenting, Lots of Free Swing and metal theme additions. 48356 `MetalIconFactory' implementation. 48357 48358 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 48359 48360 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 48361 build speedups. 48362 48363 * Kim Ho for `JFileChooser' implementation. 48364 48365 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 48366 updates, `Serialization' fixes, `Properties' XML support and 48367 generic branch work, VMIntegration guide update. 48368 48369 * Bastiaan Huisman for `TimeZone' bug fixing. 48370 48371 * Andreas Jaeger for mprec updates. 48372 48373 * Paul Jenner for better `-Werror' support. 48374 48375 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 48376 48377 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 48378 bug fixes all over. Lots of Free Swing work including styled text. 48379 48380 * Simon Kitching for `String' cleanups and optimization suggestions. 48381 48382 * Michael Koch for configuration fixes, `Locale' updates, bug and 48383 build fixes. 48384 48385 * Guilhem Lavaux for configuration, thread and channel fixes and 48386 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes. 48387 48388 * David Lichteblau for JCL support library global/local reference 48389 cleanups. 48390 48391 * Aaron Luchko for JDWP updates and documentation fixes. 48392 48393 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 48394 features. 48395 48396 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 48397 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 48398 and implementing the Qt4 peers. 48399 48400 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 48401 `SystemLogger' and `FileHandler' rotate implementations, NIO 48402 `FileChannel.map' support, security and policy updates. 48403 48404 * Bryce McKinlay for RMI work. 48405 48406 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 48407 testing and documenting. 48408 48409 * Kalle Olavi Niemitalo for build fixes. 48410 48411 * Rainer Orth for build fixes. 48412 48413 * Andrew Overholt for `File' locking fixes. 48414 48415 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 48416 48417 * Olga Rodimina for `MenuSelectionManager' implementation. 48418 48419 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 48420 48421 * Julian Scheid for documentation updates and gjdoc support. 48422 48423 * Christian Schlichtherle for zip fixes and cleanups. 48424 48425 * Robert Schuster for documentation updates and beans fixes, 48426 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 48427 and URL, AWT and Free Swing bug fixes. 48428 48429 * Keith Seitz for lots of JDWP work. 48430 48431 * Christian Thalinger for 64-bit cleanups, Configuration and VM 48432 interface fixes and `CACAO' integration, `fdlibm' updates. 48433 48434 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 48435 48436 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 48437 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 48438 48439 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 48440 integration. `Qt4' build infrastructure, `SHA1PRNG' and 48441 `GdkPixbugDecoder' updates. 48442 48443 * Tom Tromey for Eclipse integration, generics work, lots of bug 48444 fixes and gcj integration including coordinating The Big Merge. 48445 48446 * Mark Wielaard for bug fixes, packaging and release management, 48447 `Clipboard' implementation, system call interrupts and network 48448 timeouts and `GdkPixpufDecoder' fixes. 48449 48450 48451 In addition to the above, all of which also contributed time and 48452energy in testing GCC, we would like to thank the following for their 48453contributions to testing: 48454 48455 * Michael Abd-El-Malek 48456 48457 * Thomas Arend 48458 48459 * Bonzo Armstrong 48460 48461 * Steven Ashe 48462 48463 * Chris Baldwin 48464 48465 * David Billinghurst 48466 48467 * Jim Blandy 48468 48469 * Stephane Bortzmeyer 48470 48471 * Horst von Brand 48472 48473 * Frank Braun 48474 48475 * Rodney Brown 48476 48477 * Sidney Cadot 48478 48479 * Bradford Castalia 48480 48481 * Robert Clark 48482 48483 * Jonathan Corbet 48484 48485 * Ralph Doncaster 48486 48487 * Richard Emberson 48488 48489 * Levente Farkas 48490 48491 * Graham Fawcett 48492 48493 * Mark Fernyhough 48494 48495 * Robert A. French 48496 48497 * Jo"rgen Freyh 48498 48499 * Mark K. Gardner 48500 48501 * Charles-Antoine Gauthier 48502 48503 * Yung Shing Gene 48504 48505 * David Gilbert 48506 48507 * Simon Gornall 48508 48509 * Fred Gray 48510 48511 * John Griffin 48512 48513 * Patrik Hagglund 48514 48515 * Phil Hargett 48516 48517 * Amancio Hasty 48518 48519 * Takafumi Hayashi 48520 48521 * Bryan W. Headley 48522 48523 * Kevin B. Hendricks 48524 48525 * Joep Jansen 48526 48527 * Christian Joensson 48528 48529 * Michel Kern 48530 48531 * David Kidd 48532 48533 * Tobias Kuipers 48534 48535 * Anand Krishnaswamy 48536 48537 * A. O. V. Le Blanc 48538 48539 * llewelly 48540 48541 * Damon Love 48542 48543 * Brad Lucier 48544 48545 * Matthias Klose 48546 48547 * Martin Knoblauch 48548 48549 * Rick Lutowski 48550 48551 * Jesse Macnish 48552 48553 * Stefan Morrell 48554 48555 * Anon A. Mous 48556 48557 * Matthias Mueller 48558 48559 * Pekka Nikander 48560 48561 * Rick Niles 48562 48563 * Jon Olson 48564 48565 * Magnus Persson 48566 48567 * Chris Pollard 48568 48569 * Richard Polton 48570 48571 * Derk Reefman 48572 48573 * David Rees 48574 48575 * Paul Reilly 48576 48577 * Tom Reilly 48578 48579 * Torsten Rueger 48580 48581 * Danny Sadinoff 48582 48583 * Marc Schifer 48584 48585 * Erik Schnetter 48586 48587 * Wayne K. Schroll 48588 48589 * David Schuler 48590 48591 * Vin Shelton 48592 48593 * Tim Souder 48594 48595 * Adam Sulmicki 48596 48597 * Bill Thorson 48598 48599 * George Talbot 48600 48601 * Pedro A. M. Vazquez 48602 48603 * Gregory Warnes 48604 48605 * Ian Watson 48606 48607 * David E. Young 48608 48609 * And many others 48610 48611 And finally we'd like to thank everyone who uses the compiler, provides 48612feedback and generally reminds us why we're doing this work in the first 48613place. 48614 48615 48616File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 48617 48618Option Index 48619************ 48620 48621GCC's command line options are indexed here without any initial `-' or 48622`--'. Where an option has both positive and negative forms (such as 48623`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 48624indexed under the most appropriate form; it may sometimes be useful to 48625look up both forms. 48626 48627[index] 48628* Menu: 48629 48630* ###: Overall Options. (line 209) 48631* -fipa-cp-alignment: Optimize Options. (line 991) 48632* -Wabi-tag: C++ Dialect Options. 48633 (line 531) 48634* A: Preprocessor Options. 48635 (line 607) 48636* all_load: Darwin Options. (line 110) 48637* allowable_client: Darwin Options. (line 196) 48638* ansi <1>: C Dialect Options. (line 11) 48639* ansi <2>: Non-bugs. (line 107) 48640* ansi <3>: Standards. (line 16) 48641* ansi <4>: Preprocessor Options. 48642 (line 338) 48643* ansi: Other Builtins. (line 22) 48644* arch_errors_fatal: Darwin Options. (line 114) 48645* aux-info: C Dialect Options. (line 176) 48646* B: Directory Options. (line 51) 48647* Bdynamic: VxWorks Options. (line 22) 48648* bind_at_load: Darwin Options. (line 118) 48649* Bstatic: VxWorks Options. (line 22) 48650* bundle: Darwin Options. (line 123) 48651* bundle_loader: Darwin Options. (line 127) 48652* C: Preprocessor Options. 48653 (line 665) 48654* c <1>: Link Options. (line 20) 48655* c: Overall Options. (line 164) 48656* client_name: Darwin Options. (line 196) 48657* compatibility_version: Darwin Options. (line 196) 48658* coverage: Debugging Options. (line 724) 48659* current_version: Darwin Options. (line 196) 48660* cxxisystem: Preprocessor Options. 48661 (line 466) 48662* d: Debugging Options. (line 856) 48663* D: Preprocessor Options. 48664 (line 46) 48665* da: Debugging Options. (line 1058) 48666* dA: Debugging Options. (line 1061) 48667* dD <1>: Preprocessor Options. 48668 (line 639) 48669* dD: Debugging Options. (line 1065) 48670* dead_strip: Darwin Options. (line 196) 48671* dependency-file: Darwin Options. (line 196) 48672* dH: Debugging Options. (line 1069) 48673* dI: Preprocessor Options. 48674 (line 648) 48675* dM: Preprocessor Options. 48676 (line 623) 48677* dN: Preprocessor Options. 48678 (line 645) 48679* dP: Debugging Options. (line 1077) 48680* dp: Debugging Options. (line 1072) 48681* dU: Preprocessor Options. 48682 (line 652) 48683* dumpmachine: Debugging Options. (line 1679) 48684* dumpspecs: Debugging Options. (line 1687) 48685* dumpversion: Debugging Options. (line 1683) 48686* dx: Debugging Options. (line 1081) 48687* dylib_file: Darwin Options. (line 196) 48688* dylinker_install_name: Darwin Options. (line 196) 48689* dynamic: Darwin Options. (line 196) 48690* dynamiclib: Darwin Options. (line 131) 48691* E <1>: Overall Options. (line 185) 48692* E: Link Options. (line 20) 48693* EB <1>: ARC Options. (line 350) 48694* EB: MIPS Options. (line 7) 48695* EL <1>: MIPS Options. (line 10) 48696* EL: ARC Options. (line 357) 48697* exported_symbols_list: Darwin Options. (line 196) 48698* F: Darwin Options. (line 31) 48699* fabi-compat-version: C++ Dialect Options. 48700 (line 62) 48701* fabi-version: C++ Dialect Options. 48702 (line 20) 48703* fada-spec-parent: Overall Options. (line 369) 48704* faggressive-loop-optimizations: Optimize Options. (line 506) 48705* falign-functions: Optimize Options. (line 1566) 48706* falign-jumps: Optimize Options. (line 1615) 48707* falign-labels: Optimize Options. (line 1584) 48708* falign-loops: Optimize Options. (line 1602) 48709* fallow-parameterless-variadic-functions: C Dialect Options. 48710 (line 192) 48711* fasan-shadow-offset: Debugging Options. (line 349) 48712* fassociative-math: Optimize Options. (line 2125) 48713* fasynchronous-unwind-tables: Code Gen Options. (line 146) 48714* fauto-inc-dec: Optimize Options. (line 530) 48715* fauto-profile: Optimize Options. (line 2006) 48716* fbounds-check: Code Gen Options. (line 15) 48717* fbranch-probabilities: Optimize Options. (line 2252) 48718* fbranch-target-load-optimize: Optimize Options. (line 2375) 48719* fbranch-target-load-optimize2: Optimize Options. (line 2381) 48720* fbtr-bb-exclusive: Optimize Options. (line 2385) 48721* fcall-saved: Code Gen Options. (line 358) 48722* fcall-used: Code Gen Options. (line 344) 48723* fcaller-saves: Optimize Options. (line 880) 48724* fcheck-data-deps: Optimize Options. (line 1201) 48725* fcheck-new: C++ Dialect Options. 48726 (line 77) 48727* fcheck-pointer-bounds: Debugging Options. (line 388) 48728* fchkp-check-incomplete-type: Debugging Options. (line 428) 48729* fchkp-check-read: Debugging Options. (line 478) 48730* fchkp-check-write: Debugging Options. (line 482) 48731* fchkp-first-field-has-own-bounds: Debugging Options. (line 439) 48732* fchkp-instrument-calls: Debugging Options. (line 490) 48733* fchkp-instrument-marked-only: Debugging Options. (line 494) 48734* fchkp-narrow-bounds: Debugging Options. (line 432) 48735* fchkp-narrow-to-innermost-array: Debugging Options. (line 445) 48736* fchkp-optimize: Debugging Options. (line 450) 48737* fchkp-store-bounds: Debugging Options. (line 486) 48738* fchkp-treat-zero-dynamic-size-as-infinite: Debugging Options. 48739 (line 471) 48740* fchkp-use-fast-string-functions: Debugging Options. (line 454) 48741* fchkp-use-nochk-string-functions: Debugging Options. (line 458) 48742* fchkp-use-static-bounds: Debugging Options. (line 462) 48743* fchkp-use-static-const-bounds: Debugging Options. (line 466) 48744* fchkp-use-wrappers: Debugging Options. (line 499) 48745* fcilkplus: C Dialect Options. (line 288) 48746* fcombine-stack-adjustments: Optimize Options. (line 892) 48747* fcommon: Variable Attributes. 48748 (line 106) 48749* fcompare-debug: Debugging Options. (line 512) 48750* fcompare-debug-second: Debugging Options. (line 538) 48751* fcompare-elim: Optimize Options. (line 1941) 48752* fcond-mismatch: C Dialect Options. (line 352) 48753* fconserve-stack: Optimize Options. (line 907) 48754* fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 48755 (line 30) 48756* fconstexpr-depth: C++ Dialect Options. 48757 (line 87) 48758* fcprop-registers: Optimize Options. (line 1953) 48759* fcrossjumping: Optimize Options. (line 523) 48760* fcse-follow-jumps: Optimize Options. (line 442) 48761* fcse-skip-blocks: Optimize Options. (line 451) 48762* fcx-fortran-rules: Optimize Options. (line 2238) 48763* fcx-limited-range: Optimize Options. (line 2226) 48764* fdata-sections: Optimize Options. (line 2356) 48765* fdbg-cnt: Debugging Options. (line 777) 48766* fdbg-cnt-list: Debugging Options. (line 774) 48767* fdce: Optimize Options. (line 536) 48768* fdebug-cpp: Preprocessor Options. 48769 (line 536) 48770* fdebug-prefix-map: Debugging Options. (line 632) 48771* fdebug-types-section: Debugging Options. (line 79) 48772* fdeclone-ctor-dtor: Optimize Options. (line 559) 48773* fdeduce-init-list: C++ Dialect Options. 48774 (line 93) 48775* fdelayed-branch: Optimize Options. (line 710) 48776* fdelete-dead-exceptions: Code Gen Options. (line 131) 48777* fdelete-null-pointer-checks: Optimize Options. (line 570) 48778* fdevirtualize: Optimize Options. (line 588) 48779* fdevirtualize-at-ltrans: Optimize Options. (line 605) 48780* fdevirtualize-speculatively: Optimize Options. (line 595) 48781* fdiagnostics-color: Language Independent Options. 48782 (line 35) 48783* fdiagnostics-show-caret: Language Independent Options. 48784 (line 94) 48785* fdiagnostics-show-location: Language Independent Options. 48786 (line 20) 48787* fdiagnostics-show-option: Language Independent Options. 48788 (line 88) 48789* fdirectives-only: Preprocessor Options. 48790 (line 479) 48791* fdisable-: Debugging Options. (line 787) 48792* fdollars-in-identifiers <1>: Interoperation. (line 141) 48793* fdollars-in-identifiers: Preprocessor Options. 48794 (line 506) 48795* fdse: Optimize Options. (line 540) 48796* fdump-ada-spec: Overall Options. (line 363) 48797* fdump-class-hierarchy: Debugging Options. (line 1116) 48798* fdump-final-insns: Debugging Options. (line 506) 48799* fdump-go-spec: Overall Options. (line 373) 48800* fdump-ipa: Debugging Options. (line 1124) 48801* fdump-noaddr: Debugging Options. (line 1085) 48802* fdump-passes: Debugging Options. (line 1142) 48803* fdump-rtl-alignments: Debugging Options. (line 877) 48804* fdump-rtl-all: Debugging Options. (line 1058) 48805* fdump-rtl-asmcons: Debugging Options. (line 880) 48806* fdump-rtl-auto_inc_dec: Debugging Options. (line 884) 48807* fdump-rtl-barriers: Debugging Options. (line 888) 48808* fdump-rtl-bbpart: Debugging Options. (line 891) 48809* fdump-rtl-bbro: Debugging Options. (line 894) 48810* fdump-rtl-btl2: Debugging Options. (line 898) 48811* fdump-rtl-bypass: Debugging Options. (line 902) 48812* fdump-rtl-ce1: Debugging Options. (line 913) 48813* fdump-rtl-ce2: Debugging Options. (line 913) 48814* fdump-rtl-ce3: Debugging Options. (line 913) 48815* fdump-rtl-combine: Debugging Options. (line 905) 48816* fdump-rtl-compgotos: Debugging Options. (line 908) 48817* fdump-rtl-cprop_hardreg: Debugging Options. (line 917) 48818* fdump-rtl-csa: Debugging Options. (line 920) 48819* fdump-rtl-cse1: Debugging Options. (line 924) 48820* fdump-rtl-cse2: Debugging Options. (line 924) 48821* fdump-rtl-dbr: Debugging Options. (line 931) 48822* fdump-rtl-dce: Debugging Options. (line 928) 48823* fdump-rtl-dce1: Debugging Options. (line 935) 48824* fdump-rtl-dce2: Debugging Options. (line 935) 48825* fdump-rtl-dfinish: Debugging Options. (line 1054) 48826* fdump-rtl-dfinit: Debugging Options. (line 1054) 48827* fdump-rtl-eh: Debugging Options. (line 939) 48828* fdump-rtl-eh_ranges: Debugging Options. (line 942) 48829* fdump-rtl-expand: Debugging Options. (line 945) 48830* fdump-rtl-fwprop1: Debugging Options. (line 949) 48831* fdump-rtl-fwprop2: Debugging Options. (line 949) 48832* fdump-rtl-gcse1: Debugging Options. (line 954) 48833* fdump-rtl-gcse2: Debugging Options. (line 954) 48834* fdump-rtl-init-regs: Debugging Options. (line 958) 48835* fdump-rtl-initvals: Debugging Options. (line 961) 48836* fdump-rtl-into_cfglayout: Debugging Options. (line 964) 48837* fdump-rtl-ira: Debugging Options. (line 967) 48838* fdump-rtl-jump: Debugging Options. (line 970) 48839* fdump-rtl-loop2: Debugging Options. (line 973) 48840* fdump-rtl-mach: Debugging Options. (line 977) 48841* fdump-rtl-mode_sw: Debugging Options. (line 981) 48842* fdump-rtl-outof_cfglayout: Debugging Options. (line 987) 48843* fdump-rtl-PASS: Debugging Options. (line 856) 48844* fdump-rtl-peephole2: Debugging Options. (line 990) 48845* fdump-rtl-postreload: Debugging Options. (line 993) 48846* fdump-rtl-pro_and_epilogue: Debugging Options. (line 996) 48847* fdump-rtl-ree: Debugging Options. (line 1004) 48848* fdump-rtl-regclass: Debugging Options. (line 1054) 48849* fdump-rtl-rnreg: Debugging Options. (line 984) 48850* fdump-rtl-sched1: Debugging Options. (line 1000) 48851* fdump-rtl-sched2: Debugging Options. (line 1000) 48852* fdump-rtl-seqabstr: Debugging Options. (line 1007) 48853* fdump-rtl-shorten: Debugging Options. (line 1010) 48854* fdump-rtl-sibling: Debugging Options. (line 1013) 48855* fdump-rtl-sms: Debugging Options. (line 1024) 48856* fdump-rtl-split1: Debugging Options. (line 1020) 48857* fdump-rtl-split2: Debugging Options. (line 1020) 48858* fdump-rtl-split3: Debugging Options. (line 1020) 48859* fdump-rtl-split4: Debugging Options. (line 1020) 48860* fdump-rtl-split5: Debugging Options. (line 1020) 48861* fdump-rtl-stack: Debugging Options. (line 1028) 48862* fdump-rtl-subreg1: Debugging Options. (line 1034) 48863* fdump-rtl-subreg2: Debugging Options. (line 1034) 48864* fdump-rtl-subregs_of_mode_finish: Debugging Options. (line 1054) 48865* fdump-rtl-subregs_of_mode_init: Debugging Options. (line 1054) 48866* fdump-rtl-unshare: Debugging Options. (line 1038) 48867* fdump-rtl-vartrack: Debugging Options. (line 1041) 48868* fdump-rtl-vregs: Debugging Options. (line 1044) 48869* fdump-rtl-web: Debugging Options. (line 1047) 48870* fdump-statistics: Debugging Options. (line 1146) 48871* fdump-translation-unit: Debugging Options. (line 1107) 48872* fdump-tree: Debugging Options. (line 1158) 48873* fdump-tree-alias: Debugging Options. (line 1297) 48874* fdump-tree-all: Debugging Options. (line 1382) 48875* fdump-tree-ccp: Debugging Options. (line 1301) 48876* fdump-tree-cfg: Debugging Options. (line 1285) 48877* fdump-tree-ch: Debugging Options. (line 1289) 48878* fdump-tree-copyprop: Debugging Options. (line 1317) 48879* fdump-tree-copyrename: Debugging Options. (line 1358) 48880* fdump-tree-dce: Debugging Options. (line 1325) 48881* fdump-tree-dom: Debugging Options. (line 1338) 48882* fdump-tree-dse: Debugging Options. (line 1343) 48883* fdump-tree-forwprop: Debugging Options. (line 1353) 48884* fdump-tree-fre: Debugging Options. (line 1313) 48885* fdump-tree-gimple: Debugging Options. (line 1280) 48886* fdump-tree-nrv: Debugging Options. (line 1363) 48887* fdump-tree-optimized: Debugging Options. (line 1277) 48888* fdump-tree-original: Debugging Options. (line 1274) 48889* fdump-tree-phiopt: Debugging Options. (line 1348) 48890* fdump-tree-pre: Debugging Options. (line 1309) 48891* fdump-tree-sink: Debugging Options. (line 1334) 48892* fdump-tree-slp: Debugging Options. (line 1373) 48893* fdump-tree-sra: Debugging Options. (line 1329) 48894* fdump-tree-ssa: Debugging Options. (line 1293) 48895* fdump-tree-store_copyprop: Debugging Options. (line 1321) 48896* fdump-tree-storeccp: Debugging Options. (line 1305) 48897* fdump-tree-vect: Debugging Options. (line 1368) 48898* fdump-tree-vrp: Debugging Options. (line 1378) 48899* fdump-unnumbered: Debugging Options. (line 1095) 48900* fdump-unnumbered-links: Debugging Options. (line 1101) 48901* fdwarf2-cfi-asm: Debugging Options. (line 636) 48902* fearly-inlining: Optimize Options. (line 292) 48903* feliminate-dwarf2-dups: Debugging Options. (line 551) 48904* feliminate-unused-debug-symbols: Debugging Options. (line 67) 48905* feliminate-unused-debug-types: Debugging Options. (line 1691) 48906* femit-class-debug-always: Debugging Options. (line 71) 48907* femit-struct-debug-baseonly: Debugging Options. (line 556) 48908* femit-struct-debug-detailed: Debugging Options. (line 583) 48909* femit-struct-debug-reduced: Debugging Options. (line 569) 48910* fenable-: Debugging Options. (line 787) 48911* fexceptions: Code Gen Options. (line 108) 48912* fexcess-precision: Optimize Options. (line 2053) 48913* fexec-charset: Preprocessor Options. 48914 (line 564) 48915* fexpensive-optimizations: Optimize Options. (line 612) 48916* fext-numeric-literals: C++ Dialect Options. 48917 (line 612) 48918* fextended-identifiers: Preprocessor Options. 48919 (line 509) 48920* fextern-tls-init: C++ Dialect Options. 48921 (line 143) 48922* ffast-math: Optimize Options. (line 2076) 48923* ffat-lto-objects: Optimize Options. (line 1922) 48924* ffinite-math-only: Optimize Options. (line 2150) 48925* ffix-and-continue: Darwin Options. (line 104) 48926* ffixed: Code Gen Options. (line 332) 48927* ffloat-store <1>: Optimize Options. (line 2039) 48928* ffloat-store: Disappointments. (line 77) 48929* ffor-scope: C++ Dialect Options. 48930 (line 164) 48931* fforward-propagate: Optimize Options. (line 195) 48932* ffp-contract: Optimize Options. (line 204) 48933* ffreestanding <1>: Warning Options. (line 270) 48934* ffreestanding <2>: Function Attributes. 48935 (line 465) 48936* ffreestanding <3>: Standards. (line 92) 48937* ffreestanding: C Dialect Options. (line 254) 48938* ffriend-injection: C++ Dialect Options. 48939 (line 114) 48940* ffunction-sections: Optimize Options. (line 2356) 48941* fgcse: Optimize Options. (line 465) 48942* fgcse-after-reload: Optimize Options. (line 501) 48943* fgcse-las: Optimize Options. (line 494) 48944* fgcse-lm: Optimize Options. (line 476) 48945* fgcse-sm: Optimize Options. (line 485) 48946* fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 48947 (line 39) 48948* fgnu-tm: C Dialect Options. (line 298) 48949* fgnu89-inline: C Dialect Options. (line 159) 48950* fgraphite-identity: Optimize Options. (line 1174) 48951* fhoist-adjacent-loads: Optimize Options. (line 940) 48952* fhosted: C Dialect Options. (line 247) 48953* fif-conversion: Optimize Options. (line 544) 48954* fif-conversion2: Optimize Options. (line 553) 48955* filelist: Darwin Options. (line 196) 48956* findirect-data: Darwin Options. (line 104) 48957* findirect-inlining: Optimize Options. (line 265) 48958* finhibit-size-directive: Code Gen Options. (line 252) 48959* finline-functions: Optimize Options. (line 273) 48960* finline-functions-called-once: Optimize Options. (line 284) 48961* finline-limit: Optimize Options. (line 309) 48962* finline-small-functions: Optimize Options. (line 256) 48963* finput-charset: Preprocessor Options. 48964 (line 577) 48965* finstrument-functions <1>: Code Gen Options. (line 388) 48966* finstrument-functions: Function Attributes. 48967 (line 1074) 48968* finstrument-functions-exclude-file-list: Code Gen Options. (line 424) 48969* finstrument-functions-exclude-function-list: Code Gen Options. 48970 (line 444) 48971* fipa-cp: Optimize Options. (line 973) 48972* fipa-cp-clone: Optimize Options. (line 981) 48973* fipa-icf: Optimize Options. (line 998) 48974* fipa-profile: Optimize Options. (line 965) 48975* fipa-pta: Optimize Options. (line 959) 48976* fipa-pure-const: Optimize Options. (line 951) 48977* fipa-ra: Optimize Options. (line 898) 48978* fipa-reference: Optimize Options. (line 955) 48979* fipa-sra: Optimize Options. (line 302) 48980* fira-algorithm: Optimize Options. (line 640) 48981* fira-hoist-pressure: Optimize Options. (line 670) 48982* fira-loop-pressure: Optimize Options. (line 677) 48983* fira-region: Optimize Options. (line 648) 48984* fira-verbose: Optimize Options. (line 697) 48985* fisolate-erroneous-paths-attribute: Optimize Options. (line 1019) 48986* fisolate-erroneous-paths-dereference: Optimize Options. (line 1012) 48987* fivar-visibility: Objective-C and Objective-C++ Dialect Options. 48988 (line 162) 48989* fivopts: Optimize Options. (line 1277) 48990* fkeep-inline-functions <1>: Optimize Options. (line 341) 48991* fkeep-inline-functions: Inline. (line 51) 48992* fkeep-static-consts: Optimize Options. (line 348) 48993* flat_namespace: Darwin Options. (line 196) 48994* flax-vector-conversions: C Dialect Options. (line 357) 48995* fleading-underscore: Code Gen Options. (line 527) 48996* flive-range-shrinkage: Optimize Options. (line 635) 48997* flocal-ivars: Objective-C and Objective-C++ Dialect Options. 48998 (line 153) 48999* floop-block: Optimize Options. (line 1145) 49000* floop-interchange: Optimize Options. (line 1100) 49001* floop-nest-optimize: Optimize Options. (line 1182) 49002* floop-parallelize-all: Optimize Options. (line 1195) 49003* floop-strip-mine: Optimize Options. (line 1124) 49004* floop-unroll-and-jam: Optimize Options. (line 1188) 49005* flra-remat: Optimize Options. (line 703) 49006* flto: Optimize Options. (line 1669) 49007* flto-compression-level: Optimize Options. (line 1884) 49008* flto-odr-type-merging: Optimize Options. (line 1879) 49009* flto-partition: Optimize Options. (line 1865) 49010* flto-report: Optimize Options. (line 1892) 49011* flto-report-wpa: Optimize Options. (line 1900) 49012* fmax-errors: Warning Options. (line 18) 49013* fmem-report: Debugging Options. (line 660) 49014* fmem-report-wpa: Debugging Options. (line 664) 49015* fmerge-all-constants: Optimize Options. (line 367) 49016* fmerge-constants: Optimize Options. (line 357) 49017* fmerge-debug-strings: Debugging Options. (line 625) 49018* fmessage-length: Language Independent Options. 49019 (line 14) 49020* fmodulo-sched: Optimize Options. (line 378) 49021* fmodulo-sched-allow-regmoves: Optimize Options. (line 383) 49022* fmove-loop-invariants: Optimize Options. (line 2346) 49023* fms-extensions <1>: C++ Dialect Options. 49024 (line 198) 49025* fms-extensions <2>: Unnamed Fields. (line 36) 49026* fms-extensions: C Dialect Options. (line 313) 49027* fnext-runtime: Objective-C and Objective-C++ Dialect Options. 49028 (line 43) 49029* fno-access-control: C++ Dialect Options. 49030 (line 73) 49031* fno-asm: C Dialect Options. (line 199) 49032* fno-branch-count-reg: Optimize Options. (line 390) 49033* fno-builtin <1>: Function Attributes. 49034 (line 465) 49035* fno-builtin <2>: C Dialect Options. (line 213) 49036* fno-builtin <3>: Other Builtins. (line 14) 49037* fno-builtin: Warning Options. (line 270) 49038* fno-canonical-system-headers: Preprocessor Options. 49039 (line 513) 49040* fno-check-pointer-bounds: Debugging Options. (line 388) 49041* fno-chkp-check-incomplete-type: Debugging Options. (line 428) 49042* fno-chkp-check-read: Debugging Options. (line 478) 49043* fno-chkp-check-write: Debugging Options. (line 482) 49044* fno-chkp-first-field-has-own-bounds: Debugging Options. (line 439) 49045* fno-chkp-instrument-calls: Debugging Options. (line 490) 49046* fno-chkp-instrument-marked-only: Debugging Options. (line 494) 49047* fno-chkp-narrow-bounds: Debugging Options. (line 432) 49048* fno-chkp-narrow-to-innermost-array: Debugging Options. (line 445) 49049* fno-chkp-optimize: Debugging Options. (line 450) 49050* fno-chkp-store-bounds: Debugging Options. (line 486) 49051* fno-chkp-treat-zero-dynamic-size-as-infinite: Debugging Options. 49052 (line 471) 49053* fno-chkp-use-fast-string-functions: Debugging Options. (line 454) 49054* fno-chkp-use-nochk-string-functions: Debugging Options. (line 458) 49055* fno-chkp-use-static-bounds: Debugging Options. (line 462) 49056* fno-chkp-use-static-const-bounds: Debugging Options. (line 466) 49057* fno-chkp-use-wrappers: Debugging Options. (line 499) 49058* fno-common <1>: Variable Attributes. 49059 (line 106) 49060* fno-common: Code Gen Options. (line 229) 49061* fno-compare-debug: Debugging Options. (line 512) 49062* fno-debug-types-section: Debugging Options. (line 79) 49063* fno-default-inline: Inline. (line 71) 49064* fno-defer-pop: Optimize Options. (line 187) 49065* fno-diagnostics-show-caret: Language Independent Options. 49066 (line 94) 49067* fno-diagnostics-show-option: Language Independent Options. 49068 (line 88) 49069* fno-dwarf2-cfi-asm: Debugging Options. (line 636) 49070* fno-elide-constructors: C++ Dialect Options. 49071 (line 126) 49072* fno-eliminate-unused-debug-types: Debugging Options. (line 1691) 49073* fno-enforce-eh-specs: C++ Dialect Options. 49074 (line 132) 49075* fno-ext-numeric-literals: C++ Dialect Options. 49076 (line 612) 49077* fno-extern-tls-init: C++ Dialect Options. 49078 (line 143) 49079* fno-for-scope: C++ Dialect Options. 49080 (line 164) 49081* fno-function-cse: Optimize Options. (line 402) 49082* fno-gnu-keywords: C++ Dialect Options. 49083 (line 176) 49084* fno-gnu-unique: Code Gen Options. (line 152) 49085* fno-guess-branch-probability: Optimize Options. (line 1436) 49086* fno-ident: Code Gen Options. (line 249) 49087* fno-implement-inlines <1>: C++ Interface. (line 66) 49088* fno-implement-inlines: C++ Dialect Options. 49089 (line 193) 49090* fno-implicit-inline-templates: C++ Dialect Options. 49091 (line 187) 49092* fno-implicit-templates <1>: C++ Dialect Options. 49093 (line 181) 49094* fno-implicit-templates: Template Instantiation. 49095 (line 78) 49096* fno-inline: Optimize Options. (line 248) 49097* fno-ira-share-save-slots: Optimize Options. (line 685) 49098* fno-ira-share-spill-slots: Optimize Options. (line 691) 49099* fno-jump-tables: Code Gen Options. (line 324) 49100* fno-keep-inline-dllexport: Optimize Options. (line 335) 49101* fno-lifetime-dse: Optimize Options. (line 626) 49102* fno-local-ivars: Objective-C and Objective-C++ Dialect Options. 49103 (line 153) 49104* fno-math-errno: Optimize Options. (line 2090) 49105* fno-merge-debug-strings: Debugging Options. (line 625) 49106* fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 49107 (line 49) 49108* fno-nonansi-builtins: C++ Dialect Options. 49109 (line 203) 49110* fno-operator-names: C++ Dialect Options. 49111 (line 219) 49112* fno-optional-diags: C++ Dialect Options. 49113 (line 223) 49114* fno-peephole: Optimize Options. (line 1427) 49115* fno-peephole2: Optimize Options. (line 1427) 49116* fno-pretty-templates: C++ Dialect Options. 49117 (line 233) 49118* fno-rtti: C++ Dialect Options. 49119 (line 250) 49120* fno-sanitize-recover: Debugging Options. (line 354) 49121* fno-sanitize=all: Debugging Options. (line 344) 49122* fno-sched-interblock: Optimize Options. (line 736) 49123* fno-sched-spec: Optimize Options. (line 741) 49124* fno-set-stack-executable: x86 Windows Options. 49125 (line 46) 49126* fno-show-column: Preprocessor Options. 49127 (line 602) 49128* fno-signed-bitfields: C Dialect Options. (line 390) 49129* fno-signed-zeros: Optimize Options. (line 2162) 49130* fno-stack-limit: Code Gen Options. (line 495) 49131* fno-threadsafe-statics: C++ Dialect Options. 49132 (line 297) 49133* fno-toplevel-reorder: Optimize Options. (line 1635) 49134* fno-trapping-math: Optimize Options. (line 2172) 49135* fno-unsigned-bitfields: C Dialect Options. (line 390) 49136* fno-use-cxa-get-exception-ptr: C++ Dialect Options. 49137 (line 310) 49138* fno-var-tracking-assignments: Debugging Options. (line 1597) 49139* fno-var-tracking-assignments-toggle: Debugging Options. (line 1608) 49140* fno-weak: C++ Dialect Options. 49141 (line 424) 49142* fno-working-directory: Preprocessor Options. 49143 (line 587) 49144* fno-writable-relocated-rdata: x86 Windows Options. 49145 (line 53) 49146* fno-zero-initialized-in-bss: Optimize Options. (line 413) 49147* fnon-call-exceptions: Code Gen Options. (line 122) 49148* fnothrow-opt: C++ Dialect Options. 49149 (line 208) 49150* fobjc-abi-version: Objective-C and Objective-C++ Dialect Options. 49151 (line 56) 49152* fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 49153 (line 67) 49154* fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 49155 (line 92) 49156* fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 49157 (line 96) 49158* fobjc-gc: Objective-C and Objective-C++ Dialect Options. 49159 (line 105) 49160* fobjc-nilcheck: Objective-C and Objective-C++ Dialect Options. 49161 (line 111) 49162* fobjc-std: Objective-C and Objective-C++ Dialect Options. 49163 (line 120) 49164* fomit-frame-pointer: Optimize Options. (line 215) 49165* fopenacc: C Dialect Options. (line 264) 49166* fopenmp: C Dialect Options. (line 276) 49167* fopenmp-simd: C Dialect Options. (line 284) 49168* fopt-info: Debugging Options. (line 1388) 49169* foptimize-sibling-calls: Optimize Options. (line 236) 49170* foptimize-strlen: Optimize Options. (line 241) 49171* force_cpusubtype_ALL: Darwin Options. (line 135) 49172* force_flat_namespace: Darwin Options. (line 196) 49173* fpack-struct: Code Gen Options. (line 375) 49174* fpartial-inlining: Optimize Options. (line 1402) 49175* fpcc-struct-return <1>: Code Gen Options. (line 165) 49176* fpcc-struct-return: Incompatibilities. (line 170) 49177* fpch-deps: Preprocessor Options. 49178 (line 294) 49179* fpch-preprocess: Preprocessor Options. 49180 (line 302) 49181* fpeel-loops: Optimize Options. (line 2338) 49182* fpermissive: C++ Dialect Options. 49183 (line 228) 49184* fPIC: Code Gen Options. (line 301) 49185* fpic: Code Gen Options. (line 280) 49186* fpie: Code Gen Options. (line 314) 49187* fPIE: Code Gen Options. (line 314) 49188* fplan9-extensions <1>: C Dialect Options. (line 331) 49189* fplan9-extensions: Unnamed Fields. (line 44) 49190* fplugin: Overall Options. (line 351) 49191* fplugin-arg: Overall Options. (line 359) 49192* fpost-ipa-mem-report: Debugging Options. (line 670) 49193* fpre-ipa-mem-report: Debugging Options. (line 668) 49194* fpredictive-commoning: Optimize Options. (line 1409) 49195* fprefetch-loop-arrays: Optimize Options. (line 1416) 49196* fpreprocessed: Preprocessor Options. 49197 (line 517) 49198* fprofile-arcs <1>: Debugging Options. (line 709) 49199* fprofile-arcs: Other Builtins. (line 264) 49200* fprofile-correction: Optimize Options. (line 1960) 49201* fprofile-dir: Optimize Options. (line 1967) 49202* fprofile-generate: Optimize Options. (line 1977) 49203* fprofile-reorder-functions: Optimize Options. (line 2280) 49204* fprofile-report: Debugging Options. (line 674) 49205* fprofile-use: Optimize Options. (line 1990) 49206* fprofile-values: Optimize Options. (line 2271) 49207* fpu: RX Options. (line 17) 49208* frandom-seed: Debugging Options. (line 1487) 49209* freciprocal-math: Optimize Options. (line 2141) 49210* frecord-gcc-switches: Code Gen Options. (line 268) 49211* free: Optimize Options. (line 618) 49212* freg-struct-return: Code Gen Options. (line 183) 49213* frename-registers: Optimize Options. (line 2297) 49214* freorder-blocks: Optimize Options. (line 1453) 49215* freorder-blocks-and-partition: Optimize Options. (line 1459) 49216* freorder-functions: Optimize Options. (line 1472) 49217* freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 49218 (line 131) 49219* frepo <1>: C++ Dialect Options. 49220 (line 245) 49221* frepo: Template Instantiation. 49222 (line 54) 49223* freport-bug: Debugging Options. (line 1091) 49224* frerun-cse-after-loop: Optimize Options. (line 459) 49225* freschedule-modulo-scheduled-loops: Optimize Options. (line 835) 49226* frounding-math: Optimize Options. (line 2187) 49227* fsanitize-recover: Debugging Options. (line 354) 49228* fsanitize-undefined-trap-on-error: Debugging Options. (line 381) 49229* fsanitize=address: Debugging Options. (line 199) 49230* fsanitize=alignment: Debugging Options. (line 288) 49231* fsanitize=bool: Debugging Options. (line 324) 49232* fsanitize=bounds: Debugging Options. (line 282) 49233* fsanitize=enum: Debugging Options. (line 328) 49234* fsanitize=float-cast-overflow: Debugging Options. (line 305) 49235* fsanitize=float-divide-by-zero: Debugging Options. (line 299) 49236* fsanitize=integer-divide-by-zero: Debugging Options. (line 245) 49237* fsanitize=kernel-address: Debugging Options. (line 211) 49238* fsanitize=leak: Debugging Options. (line 224) 49239* fsanitize=nonnull-attribute: Debugging Options. (line 313) 49240* fsanitize=null: Debugging Options. (line 259) 49241* fsanitize=object-size: Debugging Options. (line 294) 49242* fsanitize=return: Debugging Options. (line 267) 49243* fsanitize=returns-nonnull-attribute: Debugging Options. (line 319) 49244* fsanitize=shift: Debugging Options. (line 239) 49245* fsanitize=signed-integer-overflow: Debugging Options. (line 273) 49246* fsanitize=thread: Debugging Options. (line 215) 49247* fsanitize=undefined: Debugging Options. (line 234) 49248* fsanitize=unreachable: Debugging Options. (line 249) 49249* fsanitize=vla-bound: Debugging Options. (line 255) 49250* fsanitize=vptr: Debugging Options. (line 333) 49251* fsched-critical-path-heuristic: Optimize Options. (line 801) 49252* fsched-dep-count-heuristic: Optimize Options. (line 828) 49253* fsched-group-heuristic: Optimize Options. (line 795) 49254* fsched-last-insn-heuristic: Optimize Options. (line 821) 49255* fsched-pressure: Optimize Options. (line 746) 49256* fsched-rank-heuristic: Optimize Options. (line 814) 49257* fsched-spec-insn-heuristic: Optimize Options. (line 807) 49258* fsched-spec-load: Optimize Options. (line 755) 49259* fsched-spec-load-dangerous: Optimize Options. (line 760) 49260* fsched-stalled-insns: Optimize Options. (line 766) 49261* fsched-stalled-insns-dep: Optimize Options. (line 776) 49262* fsched-verbose: Debugging Options. (line 1501) 49263* fsched2-use-superblocks: Optimize Options. (line 785) 49264* fschedule-fusion: Optimize Options. (line 2307) 49265* fschedule-insns: Optimize Options. (line 717) 49266* fschedule-insns2: Optimize Options. (line 727) 49267* fsection-anchors: Optimize Options. (line 2414) 49268* fsel-sched-pipelining: Optimize Options. (line 848) 49269* fsel-sched-pipelining-outer-loops: Optimize Options. (line 853) 49270* fselective-scheduling: Optimize Options. (line 840) 49271* fselective-scheduling2: Optimize Options. (line 844) 49272* fsemantic-interposition: Optimize Options. (line 858) 49273* fshort-double: Code Gen Options. (line 211) 49274* fshort-enums <1>: Code Gen Options. (line 201) 49275* fshort-enums <2>: Type Attributes. (line 114) 49276* fshort-enums <3>: Non-bugs. (line 42) 49277* fshort-enums: Structures unions enumerations and bit-fields implementation. 49278 (line 48) 49279* fshort-wchar: Code Gen Options. (line 219) 49280* fshrink-wrap: Optimize Options. (line 875) 49281* fsignaling-nans: Optimize Options. (line 2207) 49282* fsigned-bitfields <1>: C Dialect Options. (line 390) 49283* fsigned-bitfields: Non-bugs. (line 57) 49284* fsigned-char <1>: C Dialect Options. (line 380) 49285* fsigned-char: Characters implementation. 49286 (line 31) 49287* fsimd-cost-model: Optimize Options. (line 1367) 49288* fsingle-precision-constant: Optimize Options. (line 2222) 49289* fsized-deallocation: C++ Dialect Options. 49290 (line 260) 49291* fsplit-ivs-in-unroller: Optimize Options. (line 1383) 49292* fsplit-stack <1>: Code Gen Options. (line 509) 49293* fsplit-stack: Function Attributes. 49294 (line 1079) 49295* fsplit-wide-types: Optimize Options. (line 434) 49296* fssa-phiopt: Optimize Options. (line 1042) 49297* fstack-check: Code Gen Options. (line 456) 49298* fstack-limit-register: Code Gen Options. (line 495) 49299* fstack-limit-symbol: Code Gen Options. (line 495) 49300* fstack-protector: Optimize Options. (line 2389) 49301* fstack-protector-all: Optimize Options. (line 2398) 49302* fstack-protector-explicit: Optimize Options. (line 2406) 49303* fstack-protector-strong: Optimize Options. (line 2401) 49304* fstack-usage: Debugging Options. (line 678) 49305* fstack_reuse: Code Gen Options. (line 21) 49306* fstats: C++ Dialect Options. 49307 (line 270) 49308* fstdarg-opt: Optimize Options. (line 2410) 49309* fstrict-aliasing: Optimize Options. (line 1485) 49310* fstrict-enums: C++ Dialect Options. 49311 (line 275) 49312* fstrict-overflow: Optimize Options. (line 1531) 49313* fstrict-volatile-bitfields: Code Gen Options. (line 614) 49314* fsync-libcalls: Code Gen Options. (line 647) 49315* fsyntax-only: Warning Options. (line 14) 49316* ftabstop: Preprocessor Options. 49317 (line 530) 49318* ftemplate-backtrace-limit: C++ Dialect Options. 49319 (line 284) 49320* ftemplate-depth: C++ Dialect Options. 49321 (line 288) 49322* ftest-coverage: Debugging Options. (line 765) 49323* fthread-jumps: Optimize Options. (line 425) 49324* ftime-report: Debugging Options. (line 656) 49325* ftls-model: Code Gen Options. (line 538) 49326* ftracer: Optimize Options. (line 2315) 49327* ftrack-macro-expansion: Preprocessor Options. 49328 (line 546) 49329* ftrapv: Code Gen Options. (line 96) 49330* ftree-bit-ccp: Optimize Options. (line 1031) 49331* ftree-builtin-call-dce: Optimize Options. (line 1063) 49332* ftree-ccp: Optimize Options. (line 1037) 49333* ftree-ch: Optimize Options. (line 1083) 49334* ftree-coalesce-inlined-vars: Optimize Options. (line 1308) 49335* ftree-coalesce-vars: Optimize Options. (line 1317) 49336* ftree-copy-prop: Optimize Options. (line 946) 49337* ftree-copyrename: Optimize Options. (line 1301) 49338* ftree-dce: Optimize Options. (line 1059) 49339* ftree-dominator-opts: Optimize Options. (line 1069) 49340* ftree-dse: Optimize Options. (line 1076) 49341* ftree-forwprop: Optimize Options. (line 925) 49342* ftree-fre: Optimize Options. (line 929) 49343* ftree-loop-distribute-patterns: Optimize Options. (line 1242) 49344* ftree-loop-distribution: Optimize Options. (line 1225) 49345* ftree-loop-if-convert: Optimize Options. (line 1205) 49346* ftree-loop-if-convert-stores: Optimize Options. (line 1212) 49347* ftree-loop-im: Optimize Options. (line 1262) 49348* ftree-loop-ivcanon: Optimize Options. (line 1271) 49349* ftree-loop-linear: Optimize Options. (line 1094) 49350* ftree-loop-optimize: Optimize Options. (line 1090) 49351* ftree-loop-vectorize: Optimize Options. (line 1345) 49352* ftree-parallelize-loops: Optimize Options. (line 1282) 49353* ftree-partial-pre: Optimize Options. (line 921) 49354* ftree-phiprop: Optimize Options. (line 936) 49355* ftree-pre: Optimize Options. (line 917) 49356* ftree-pta: Optimize Options. (line 1291) 49357* ftree-reassoc: Optimize Options. (line 913) 49358* ftree-sink: Optimize Options. (line 1027) 49359* ftree-slp-vectorize: Optimize Options. (line 1349) 49360* ftree-slsr: Optimize Options. (line 1334) 49361* ftree-sra: Optimize Options. (line 1295) 49362* ftree-switch-conversion: Optimize Options. (line 1046) 49363* ftree-tail-merge: Optimize Options. (line 1051) 49364* ftree-ter: Optimize Options. (line 1326) 49365* ftree-vectorize: Optimize Options. (line 1340) 49366* ftree-vrp: Optimize Options. (line 1374) 49367* funit-at-a-time: Optimize Options. (line 1628) 49368* funroll-all-loops: Optimize Options. (line 2332) 49369* funroll-loops: Optimize Options. (line 2322) 49370* funsafe-loop-optimizations: Optimize Options. (line 515) 49371* funsafe-math-optimizations: Optimize Options. (line 2108) 49372* funsigned-bitfields <1>: Structures unions enumerations and bit-fields implementation. 49373 (line 17) 49374* funsigned-bitfields <2>: Non-bugs. (line 57) 49375* funsigned-bitfields: C Dialect Options. (line 390) 49376* funsigned-char <1>: Characters implementation. 49377 (line 31) 49378* funsigned-char: C Dialect Options. (line 362) 49379* funswitch-loops: Optimize Options. (line 2350) 49380* funwind-tables: Code Gen Options. (line 139) 49381* fuse-cxa-atexit: C++ Dialect Options. 49382 (line 303) 49383* fuse-ld=bfd: Link Options. (line 25) 49384* fuse-ld=gold: Link Options. (line 28) 49385* fuse-linker-plugin: Optimize Options. (line 1904) 49386* fvar-tracking: Debugging Options. (line 1587) 49387* fvar-tracking-assignments: Debugging Options. (line 1597) 49388* fvar-tracking-assignments-toggle: Debugging Options. (line 1608) 49389* fvariable-expansion-in-unroller: Optimize Options. (line 1397) 49390* fvect-cost-model: Optimize Options. (line 1353) 49391* fverbose-asm: Code Gen Options. (line 259) 49392* fvisibility: Code Gen Options. (line 549) 49393* fvisibility-inlines-hidden: C++ Dialect Options. 49394 (line 315) 49395* fvisibility-ms-compat: C++ Dialect Options. 49396 (line 343) 49397* fvpt: Optimize Options. (line 2287) 49398* fvtable-verify: C++ Dialect Options. 49399 (line 372) 49400* fvtv-counts: C++ Dialect Options. 49401 (line 407) 49402* fvtv-debug: C++ Dialect Options. 49403 (line 394) 49404* fweb: Optimize Options. (line 1647) 49405* fwhole-program: Optimize Options. (line 1658) 49406* fwide-exec-charset: Preprocessor Options. 49407 (line 569) 49408* fworking-directory: Preprocessor Options. 49409 (line 587) 49410* fwrapv: Code Gen Options. (line 100) 49411* fzero-link: Objective-C and Objective-C++ Dialect Options. 49412 (line 141) 49413* G <1>: Nios II Options. (line 9) 49414* G <2>: M32R/D Options. (line 57) 49415* G <3>: System V Options. (line 10) 49416* G: MIPS Options. (line 440) 49417* g: Debugging Options. (line 10) 49418* G: RS/6000 and PowerPC Options. 49419 (line 770) 49420* gcoff: Debugging Options. (line 94) 49421* gdwarf-VERSION: Debugging Options. (line 112) 49422* gen-decls: Objective-C and Objective-C++ Dialect Options. 49423 (line 167) 49424* gfull: Darwin Options. (line 69) 49425* ggdb: Debugging Options. (line 45) 49426* ggnu-pubnames: Debugging Options. (line 54) 49427* gno-record-gcc-switches: Debugging Options. (line 133) 49428* gno-strict-dwarf: Debugging Options. (line 143) 49429* gpubnames: Debugging Options. (line 51) 49430* grecord-gcc-switches: Debugging Options. (line 124) 49431* gsplit-dwarf: Debugging Options. (line 38) 49432* gstabs: Debugging Options. (line 59) 49433* gstabs+: Debugging Options. (line 88) 49434* gstrict-dwarf: Debugging Options. (line 137) 49435* gtoggle: Debugging Options. (line 191) 49436* gused: Darwin Options. (line 64) 49437* gvms: Debugging Options. (line 158) 49438* gxcoff: Debugging Options. (line 99) 49439* gxcoff+: Debugging Options. (line 104) 49440* gz: Debugging Options. (line 147) 49441* H: Preprocessor Options. 49442 (line 720) 49443* headerpad_max_install_names: Darwin Options. (line 196) 49444* help <1>: Preprocessor Options. 49445 (line 712) 49446* help: Overall Options. (line 221) 49447* I <1>: Directory Options. (line 10) 49448* I: Preprocessor Options. 49449 (line 77) 49450* I- <1>: Directory Options. (line 123) 49451* I-: Preprocessor Options. 49452 (line 387) 49453* idirafter: Preprocessor Options. 49454 (line 429) 49455* iframework: Darwin Options. (line 57) 49456* imacros: Preprocessor Options. 49457 (line 420) 49458* image_base: Darwin Options. (line 196) 49459* imultilib: Preprocessor Options. 49460 (line 454) 49461* include: Preprocessor Options. 49462 (line 409) 49463* init: Darwin Options. (line 196) 49464* install_name: Darwin Options. (line 196) 49465* iplugindir=: Directory Options. (line 31) 49466* iprefix: Preprocessor Options. 49467 (line 436) 49468* iquote <1>: Directory Options. (line 36) 49469* iquote: Preprocessor Options. 49470 (line 472) 49471* iremap <1>: Directory Options. (line 42) 49472* iremap: Preprocessor Options. 49473 (line 501) 49474* isysroot: Preprocessor Options. 49475 (line 448) 49476* isystem: Preprocessor Options. 49477 (line 458) 49478* iwithprefix: Preprocessor Options. 49479 (line 442) 49480* iwithprefixbefore: Preprocessor Options. 49481 (line 442) 49482* keep_private_externs: Darwin Options. (line 196) 49483* l: Link Options. (line 32) 49484* L: Directory Options. (line 47) 49485* lobjc: Link Options. (line 59) 49486* M: Preprocessor Options. 49487 (line 185) 49488* m: RS/6000 and PowerPC Options. 49489 (line 611) 49490* m1: SH Options. (line 9) 49491* m10: PDP-11 Options. (line 29) 49492* m128bit-long-double: x86 Options. (line 396) 49493* m16: x86 Options. (line 965) 49494* m16-bit <1>: NDS32 Options. (line 39) 49495* m16-bit: CRIS Options. (line 64) 49496* m1reg-: Adapteva Epiphany Options. 49497 (line 132) 49498* m2: SH Options. (line 12) 49499* m210: MCore Options. (line 43) 49500* m2a: SH Options. (line 30) 49501* m2a-nofpu: SH Options. (line 18) 49502* m2a-single: SH Options. (line 26) 49503* m2a-single-only: SH Options. (line 22) 49504* m3: SH Options. (line 34) 49505* m31: S/390 and zSeries Options. 49506 (line 87) 49507* m32 <1>: TILE-Gx Options. (line 23) 49508* m32 <2>: RS/6000 and PowerPC Options. 49509 (line 303) 49510* m32 <3>: x86 Options. (line 965) 49511* m32 <4>: TILEPro Options. (line 13) 49512* m32 <5>: Nvidia PTX Options. (line 10) 49513* m32: SPARC Options. (line 257) 49514* m32-bit: CRIS Options. (line 64) 49515* m32bit-doubles <1>: RL78 Options. (line 22) 49516* m32bit-doubles: RX Options. (line 10) 49517* m32r: M32R/D Options. (line 15) 49518* m32r2: M32R/D Options. (line 9) 49519* m32rx: M32R/D Options. (line 12) 49520* m340: MCore Options. (line 43) 49521* m3dnow: x86 Options. (line 609) 49522* m3e: SH Options. (line 37) 49523* m4: SH Options. (line 51) 49524* m4-100: SH Options. (line 54) 49525* m4-100-nofpu: SH Options. (line 57) 49526* m4-100-single: SH Options. (line 61) 49527* m4-100-single-only: SH Options. (line 65) 49528* m4-200: SH Options. (line 69) 49529* m4-200-nofpu: SH Options. (line 72) 49530* m4-200-single: SH Options. (line 76) 49531* m4-200-single-only: SH Options. (line 80) 49532* m4-300: SH Options. (line 84) 49533* m4-300-nofpu: SH Options. (line 87) 49534* m4-300-single: SH Options. (line 91) 49535* m4-300-single-only: SH Options. (line 95) 49536* m4-340: SH Options. (line 99) 49537* m4-500: SH Options. (line 102) 49538* m4-nofpu: SH Options. (line 40) 49539* m4-single: SH Options. (line 47) 49540* m4-single-only: SH Options. (line 43) 49541* m40: PDP-11 Options. (line 23) 49542* m45: PDP-11 Options. (line 26) 49543* m4a: SH Options. (line 118) 49544* m4a-nofpu: SH Options. (line 106) 49545* m4a-single: SH Options. (line 114) 49546* m4a-single-only: SH Options. (line 110) 49547* m4al: SH Options. (line 121) 49548* m4byte-functions: MCore Options. (line 27) 49549* m5-32media: SH Options. (line 126) 49550* m5-32media-nofpu: SH Options. (line 129) 49551* m5-64media: SH Options. (line 133) 49552* m5-64media-nofpu: SH Options. (line 136) 49553* m5-compact: SH Options. (line 140) 49554* m5-compact-nofpu: SH Options. (line 143) 49555* m5200: M680x0 Options. (line 147) 49556* m5206e: M680x0 Options. (line 156) 49557* m528x: M680x0 Options. (line 160) 49558* m5307: M680x0 Options. (line 164) 49559* m5407: M680x0 Options. (line 168) 49560* m64 <1>: TILE-Gx Options. (line 23) 49561* m64 <2>: S/390 and zSeries Options. 49562 (line 87) 49563* m64 <3>: SPARC Options. (line 257) 49564* m64 <4>: Nvidia PTX Options. (line 10) 49565* m64 <5>: x86 Options. (line 965) 49566* m64: RS/6000 and PowerPC Options. 49567 (line 303) 49568* m64bit-doubles <1>: RL78 Options. (line 22) 49569* m64bit-doubles: RX Options. (line 10) 49570* m68000: M680x0 Options. (line 95) 49571* m68010: M680x0 Options. (line 103) 49572* m68020: M680x0 Options. (line 109) 49573* m68020-40: M680x0 Options. (line 178) 49574* m68020-60: M680x0 Options. (line 187) 49575* m68030: M680x0 Options. (line 114) 49576* m68040: M680x0 Options. (line 119) 49577* m68060: M680x0 Options. (line 128) 49578* m68881: M680x0 Options. (line 197) 49579* m8-bit: CRIS Options. (line 64) 49580* m8bit-idiv: x86 Options. (line 940) 49581* m8byte-align: V850 Options. (line 170) 49582* m96bit-long-double: x86 Options. (line 396) 49583* mA6: ARC Options. (line 19) 49584* mA7: ARC Options. (line 26) 49585* mabi <1>: x86 Options. (line 795) 49586* mabi <2>: ARM Options. (line 9) 49587* mabi <3>: RS/6000 and PowerPC Options. 49588 (line 638) 49589* mabi: AArch64 Options. (line 9) 49590* mabi=32: MIPS Options. (line 157) 49591* mabi=64: MIPS Options. (line 157) 49592* mabi=eabi: MIPS Options. (line 157) 49593* mabi=elfv1: RS/6000 and PowerPC Options. 49594 (line 659) 49595* mabi=elfv2: RS/6000 and PowerPC Options. 49596 (line 665) 49597* mabi=gnu: MMIX Options. (line 20) 49598* mabi=ibmlongdouble: RS/6000 and PowerPC Options. 49599 (line 651) 49600* mabi=ieeelongdouble: RS/6000 and PowerPC Options. 49601 (line 655) 49602* mabi=mmixware: MMIX Options. (line 20) 49603* mabi=n32: MIPS Options. (line 157) 49604* mabi=no-spe: RS/6000 and PowerPC Options. 49605 (line 648) 49606* mabi=o64: MIPS Options. (line 157) 49607* mabi=spe: RS/6000 and PowerPC Options. 49608 (line 643) 49609* mabicalls: MIPS Options. (line 194) 49610* mabm: x86 Options. (line 611) 49611* mabort-on-noreturn: ARM Options. (line 191) 49612* mabs=2008: MIPS Options. (line 302) 49613* mabs=legacy: MIPS Options. (line 302) 49614* mabsdiff: MeP Options. (line 7) 49615* mabshi: PDP-11 Options. (line 55) 49616* mac0: PDP-11 Options. (line 16) 49617* macc-4: FRV Options. (line 113) 49618* macc-8: FRV Options. (line 116) 49619* maccumulate-args: AVR Options. (line 147) 49620* maccumulate-outgoing-args <1>: SH Options. (line 400) 49621* maccumulate-outgoing-args: x86 Options. (line 818) 49622* maddress-mode=long: x86 Options. (line 1012) 49623* maddress-mode=short: x86 Options. (line 1017) 49624* maddress-space-conversion: SPU Options. (line 63) 49625* mads: RS/6000 and PowerPC Options. 49626 (line 693) 49627* maes: x86 Options. (line 597) 49628* maix-struct-return: RS/6000 and PowerPC Options. 49629 (line 631) 49630* maix32: RS/6000 and PowerPC Options. 49631 (line 341) 49632* maix64: RS/6000 and PowerPC Options. 49633 (line 341) 49634* malign-300: H8/300 Options. (line 41) 49635* malign-call: ARC Options. (line 194) 49636* malign-data: x86 Options. (line 435) 49637* malign-double: x86 Options. (line 380) 49638* malign-int: M680x0 Options. (line 267) 49639* malign-labels: FRV Options. (line 104) 49640* malign-loops: M32R/D Options. (line 73) 49641* malign-natural: RS/6000 and PowerPC Options. 49642 (line 380) 49643* malign-power: RS/6000 and PowerPC Options. 49644 (line 380) 49645* mall-opts: MeP Options. (line 11) 49646* malloc-cc: FRV Options. (line 25) 49647* maltivec: RS/6000 and PowerPC Options. 49648 (line 136) 49649* maltivec=be: RS/6000 and PowerPC Options. 49650 (line 152) 49651* maltivec=le: RS/6000 and PowerPC Options. 49652 (line 162) 49653* mam33: MN10300 Options. (line 17) 49654* mam33-2: MN10300 Options. (line 24) 49655* mam34: MN10300 Options. (line 27) 49656* mandroid: GNU/Linux Options. (line 21) 49657* mannotate-align: ARC Options. (line 135) 49658* mapcs: ARM Options. (line 21) 49659* mapcs-frame: ARM Options. (line 13) 49660* mapp-regs <1>: V850 Options. (line 181) 49661* mapp-regs: SPARC Options. (line 10) 49662* mARC600: ARC Options. (line 19) 49663* mARC601: ARC Options. (line 23) 49664* mARC700: ARC Options. (line 26) 49665* march <1>: HPPA Options. (line 155) 49666* march <2>: MIPS Options. (line 14) 49667* march <3>: NDS32 Options. (line 52) 49668* march <4>: HPPA Options. (line 9) 49669* march <5>: M680x0 Options. (line 12) 49670* march <6>: S/390 and zSeries Options. 49671 (line 116) 49672* march <7>: C6X Options. (line 7) 49673* march <8>: AArch64 Options. (line 79) 49674* march <9>: x86 Options. (line 9) 49675* march <10>: CRIS Options. (line 10) 49676* march: ARM Options. (line 65) 49677* marclinux: ARC Options. (line 142) 49678* marclinux_prof: ARC Options. (line 148) 49679* margonaut: ARC Options. (line 346) 49680* marm: ARM Options. (line 261) 49681* mas100-syntax: RX Options. (line 76) 49682* masm-hex: MSP430 Options. (line 9) 49683* masm-syntax-unified: ARM Options. (line 350) 49684* masm=DIALECT: x86 Options. (line 334) 49685* matomic-model=MODEL: SH Options. (line 214) 49686* matomic-updates: SPU Options. (line 78) 49687* mauto-modify-reg: ARC Options. (line 197) 49688* mauto-pic: IA-64 Options. (line 50) 49689* maverage: MeP Options. (line 16) 49690* mavoid-indexed-addresses: RS/6000 and PowerPC Options. 49691 (line 450) 49692* mavx: x86 Options. (line 590) 49693* mavx256-split-unaligned-load: x86 Options. (line 948) 49694* mavx256-split-unaligned-store: x86 Options. (line 948) 49695* max-vect-align: Adapteva Epiphany Options. 49696 (line 120) 49697* mb: SH Options. (line 147) 49698* mbackchain: S/390 and zSeries Options. 49699 (line 35) 49700* mbarrel-shift-enabled: LM32 Options. (line 9) 49701* mbarrel-shifter: ARC Options. (line 10) 49702* mbarrel_shifter: ARC Options. (line 363) 49703* mbase-addresses: MMIX Options. (line 54) 49704* mbased=: MeP Options. (line 20) 49705* mbbit-peephole: ARC Options. (line 200) 49706* mbcopy: PDP-11 Options. (line 36) 49707* mbcopy-builtin: PDP-11 Options. (line 32) 49708* mbig: RS/6000 and PowerPC Options. 49709 (line 530) 49710* mbig-endian <1>: ARM Options. (line 61) 49711* mbig-endian <2>: NDS32 Options. (line 9) 49712* mbig-endian <3>: RS/6000 and PowerPC Options. 49713 (line 530) 49714* mbig-endian <4>: C6X Options. (line 13) 49715* mbig-endian <5>: ARC Options. (line 349) 49716* mbig-endian <6>: IA-64 Options. (line 9) 49717* mbig-endian <7>: AArch64 Options. (line 20) 49718* mbig-endian <8>: TILE-Gx Options. (line 29) 49719* mbig-endian <9>: MicroBlaze Options. (line 57) 49720* mbig-endian: MCore Options. (line 39) 49721* mbig-endian-data: RX Options. (line 42) 49722* mbig-switch: V850 Options. (line 176) 49723* mbigtable: SH Options. (line 162) 49724* mbionic: GNU/Linux Options. (line 17) 49725* mbit-align: RS/6000 and PowerPC Options. 49726 (line 482) 49727* mbit-ops: CR16 Options. (line 25) 49728* mbitfield: M680x0 Options. (line 235) 49729* mbitops <1>: MeP Options. (line 26) 49730* mbitops: SH Options. (line 166) 49731* mblock-move-inline-limit: RS/6000 and PowerPC Options. 49732 (line 764) 49733* mbmi: x86 Options. (line 612) 49734* mbranch-cheap: PDP-11 Options. (line 65) 49735* mbranch-cost <1>: Adapteva Epiphany Options. 49736 (line 18) 49737* mbranch-cost <2>: AVR Options. (line 162) 49738* mbranch-cost: MIPS Options. (line 757) 49739* mbranch-cost=NUM: SH Options. (line 466) 49740* mbranch-cost=NUMBER: M32R/D Options. (line 82) 49741* mbranch-expensive: PDP-11 Options. (line 61) 49742* mbranch-hints: SPU Options. (line 27) 49743* mbranch-likely: MIPS Options. (line 764) 49744* mbranch-predict: MMIX Options. (line 49) 49745* mbss-plt: RS/6000 and PowerPC Options. 49746 (line 189) 49747* mbuild-constants: DEC Alpha Options. (line 141) 49748* mbwx: DEC Alpha Options. (line 163) 49749* mbypass-cache: Nios II Options. (line 72) 49750* mc68000: M680x0 Options. (line 95) 49751* mc68020: M680x0 Options. (line 109) 49752* mc=: MeP Options. (line 31) 49753* mcache-block-size: NDS32 Options. (line 48) 49754* mcache-size: SPU Options. (line 70) 49755* mcache-volatile: Nios II Options. (line 78) 49756* mcall-eabi: RS/6000 and PowerPC Options. 49757 (line 605) 49758* mcall-freebsd: RS/6000 and PowerPC Options. 49759 (line 619) 49760* mcall-linux: RS/6000 and PowerPC Options. 49761 (line 615) 49762* mcall-netbsd: RS/6000 and PowerPC Options. 49763 (line 627) 49764* mcall-prologues: AVR Options. (line 167) 49765* mcall-sysv: RS/6000 and PowerPC Options. 49766 (line 597) 49767* mcall-sysv-eabi: RS/6000 and PowerPC Options. 49768 (line 605) 49769* mcall-sysv-noeabi: RS/6000 and PowerPC Options. 49770 (line 608) 49771* mcallee-super-interworking: ARM Options. (line 279) 49772* mcaller-super-interworking: ARM Options. (line 286) 49773* mcallgraph-data: MCore Options. (line 31) 49774* mcase-vector-pcrel: ARC Options. (line 208) 49775* mcbcond: SPARC Options. (line 224) 49776* mcbranch-force-delay-slot: SH Options. (line 481) 49777* mcc-init: CRIS Options. (line 41) 49778* mcfv4e: M680x0 Options. (line 172) 49779* mcheck-zero-division: MIPS Options. (line 551) 49780* mcix: DEC Alpha Options. (line 163) 49781* mcld: x86 Options. (line 668) 49782* mclear-hwcap: Solaris 2 Options. (line 9) 49783* mclfushopt: x86 Options. (line 599) 49784* mclip: MeP Options. (line 35) 49785* mcmodel <1>: NDS32 Options. (line 55) 49786* mcmodel: SPARC Options. (line 262) 49787* mcmodel=kernel: x86 Options. (line 996) 49788* mcmodel=large <1>: x86 Options. (line 1008) 49789* mcmodel=large <2>: TILE-Gx Options. (line 14) 49790* mcmodel=large <3>: AArch64 Options. (line 44) 49791* mcmodel=large: RS/6000 and PowerPC Options. 49792 (line 130) 49793* mcmodel=medium <1>: x86 Options. (line 1001) 49794* mcmodel=medium: RS/6000 and PowerPC Options. 49795 (line 126) 49796* mcmodel=small <1>: TILE-Gx Options. (line 9) 49797* mcmodel=small <2>: x86 Options. (line 990) 49798* mcmodel=small <3>: AArch64 Options. (line 38) 49799* mcmodel=small: RS/6000 and PowerPC Options. 49800 (line 122) 49801* mcmodel=tiny: AArch64 Options. (line 31) 49802* mcmov: NDS32 Options. (line 21) 49803* mcmove: Adapteva Epiphany Options. 49804 (line 23) 49805* mcmpb: RS/6000 and PowerPC Options. 49806 (line 27) 49807* mcode-readable: MIPS Options. (line 511) 49808* mcompact-casesi: ARC Options. (line 212) 49809* mcompat-align-parm: RS/6000 and PowerPC Options. 49810 (line 944) 49811* mcond-exec: FRV Options. (line 152) 49812* mcond-move: FRV Options. (line 128) 49813* mconfig=: MeP Options. (line 39) 49814* mconsole: x86 Windows Options. 49815 (line 9) 49816* mconst-align: CRIS Options. (line 55) 49817* mconst16: Xtensa Options. (line 10) 49818* mconstant-gp: IA-64 Options. (line 46) 49819* mcop: MeP Options. (line 48) 49820* mcop32: MeP Options. (line 53) 49821* mcop64: MeP Options. (line 56) 49822* mcorea: Blackfin Options. (line 157) 49823* mcoreb: Blackfin Options. (line 164) 49824* mcpu <1>: ARC Options. (line 14) 49825* mcpu <2>: RX Options. (line 30) 49826* mcpu <3>: x86 Options. (line 282) 49827* mcpu <4>: RS/6000 and PowerPC Options. 49828 (line 69) 49829* mcpu <5>: ARM Options. (line 130) 49830* mcpu <6>: AArch64 Options. (line 112) 49831* mcpu <7>: DEC Alpha Options. (line 215) 49832* mcpu <8>: M680x0 Options. (line 28) 49833* mcpu <9>: SPARC Options. (line 102) 49834* mcpu <10>: TILEPro Options. (line 9) 49835* mcpu <11>: Visium Options. (line 33) 49836* mcpu <12>: FRV Options. (line 212) 49837* mcpu <13>: picoChip Options. (line 9) 49838* mcpu <14>: TILE-Gx Options. (line 18) 49839* mcpu: CRIS Options. (line 10) 49840* mcpu32: M680x0 Options. (line 138) 49841* mcpu= <1>: M32C Options. (line 7) 49842* mcpu= <2>: MicroBlaze Options. (line 20) 49843* mcpu= <3>: Blackfin Options. (line 7) 49844* mcpu=: MSP430 Options. (line 34) 49845* mcr16c: CR16 Options. (line 14) 49846* mcr16cplus: CR16 Options. (line 14) 49847* mcrc32: x86 Options. (line 715) 49848* mcrypto: RS/6000 and PowerPC Options. 49849 (line 224) 49850* mcsync-anomaly: Blackfin Options. (line 60) 49851* mctor-dtor: NDS32 Options. (line 71) 49852* mcustom-fpu-cfg: Nios II Options. (line 220) 49853* mcustom-INSN: Nios II Options. (line 99) 49854* mcx16: x86 Options. (line 692) 49855* MD: Preprocessor Options. 49856 (line 274) 49857* mdalign: SH Options. (line 153) 49858* mdata-align: CRIS Options. (line 55) 49859* mdata-model: CR16 Options. (line 28) 49860* mdc: MeP Options. (line 62) 49861* mdebug <1>: S/390 and zSeries Options. 49862 (line 112) 49863* mdebug <2>: Visium Options. (line 7) 49864* mdebug: M32R/D Options. (line 69) 49865* mdebug-main=PREFIX: VMS Options. (line 13) 49866* mdec-asm: PDP-11 Options. (line 72) 49867* mdirect-move: RS/6000 and PowerPC Options. 49868 (line 230) 49869* mdisable-callt: V850 Options. (line 92) 49870* mdisable-fpregs: HPPA Options. (line 27) 49871* mdisable-indexing: HPPA Options. (line 33) 49872* mdiv <1>: M680x0 Options. (line 209) 49873* mdiv <2>: MCore Options. (line 15) 49874* mdiv: MeP Options. (line 65) 49875* mdiv=STRATEGY: SH Options. (line 308) 49876* mdivide-breaks: MIPS Options. (line 557) 49877* mdivide-enabled: LM32 Options. (line 12) 49878* mdivide-traps: MIPS Options. (line 557) 49879* mdivsi3_libfunc=NAME: SH Options. (line 406) 49880* mdll: x86 Windows Options. 49881 (line 16) 49882* mdlmzb: RS/6000 and PowerPC Options. 49883 (line 475) 49884* mdmx: MIPS Options. (line 378) 49885* mdouble: FRV Options. (line 38) 49886* mdouble-float <1>: MIPS Options. (line 290) 49887* mdouble-float: RS/6000 and PowerPC Options. 49888 (line 398) 49889* mdpfp: ARC Options. (line 30) 49890* mdpfp-compact: ARC Options. (line 31) 49891* mdpfp-fast: ARC Options. (line 35) 49892* mdpfp_compact: ARC Options. (line 366) 49893* mdpfp_fast: ARC Options. (line 369) 49894* mdsp: MIPS Options. (line 355) 49895* mdsp-packa: ARC Options. (line 89) 49896* mdsp_packa: ARC Options. (line 372) 49897* mdspr2: MIPS Options. (line 361) 49898* mdual-nops: SPU Options. (line 90) 49899* mdump-tune-features: x86 Options. (line 649) 49900* mdvbf: ARC Options. (line 93) 49901* mdwarf2-asm: IA-64 Options. (line 94) 49902* mdword: FRV Options. (line 32) 49903* mdynamic-no-pic: RS/6000 and PowerPC Options. 49904 (line 535) 49905* mEA: ARC Options. (line 375) 49906* mea: ARC Options. (line 43) 49907* mea32: SPU Options. (line 55) 49908* mea64: SPU Options. (line 55) 49909* meabi: RS/6000 and PowerPC Options. 49910 (line 712) 49911* mearly-cbranchsi: ARC Options. (line 231) 49912* mearly-stop-bits: IA-64 Options. (line 100) 49913* meb <1>: Nios II Options. (line 67) 49914* meb <2>: MeP Options. (line 68) 49915* meb <3>: Moxie Options. (line 7) 49916* meb: Score Options. (line 9) 49917* mel <1>: Score Options. (line 12) 49918* mel <2>: Moxie Options. (line 11) 49919* mel <3>: Nios II Options. (line 67) 49920* mel: MeP Options. (line 71) 49921* melf <1>: MMIX Options. (line 44) 49922* melf: CRIS Options. (line 87) 49923* memb: RS/6000 and PowerPC Options. 49924 (line 707) 49925* membedded-data: MIPS Options. (line 498) 49926* memregs=: M32C Options. (line 21) 49927* mep: V850 Options. (line 16) 49928* mepilogue-cfi: ARC Options. (line 157) 49929* mepsilon: MMIX Options. (line 15) 49930* merror-reloc: SPU Options. (line 10) 49931* mesa: S/390 and zSeries Options. 49932 (line 95) 49933* metrax100: CRIS Options. (line 26) 49934* metrax4: CRIS Options. (line 26) 49935* meva: MIPS Options. (line 405) 49936* mexpand-adddi: ARC Options. (line 234) 49937* mexplicit-relocs <1>: DEC Alpha Options. (line 176) 49938* mexplicit-relocs: MIPS Options. (line 542) 49939* mexr: H8/300 Options. (line 28) 49940* mextern-sdata: MIPS Options. (line 460) 49941* MF: Preprocessor Options. 49942 (line 220) 49943* mf16c: x86 Options. (line 602) 49944* mfast-fp: Blackfin Options. (line 133) 49945* mfast-indirect-calls: HPPA Options. (line 45) 49946* mfast-sw-div: Nios II Options. (line 84) 49947* mfaster-structs: SPARC Options. (line 92) 49948* mfdpic: FRV Options. (line 56) 49949* mfentry: x86 Options. (line 907) 49950* mfix: DEC Alpha Options. (line 163) 49951* mfix-24k: MIPS Options. (line 617) 49952* mfix-and-continue: Darwin Options. (line 104) 49953* mfix-at697f: SPARC Options. (line 244) 49954* mfix-cortex-a53-835769: AArch64 Options. (line 67) 49955* mfix-cortex-a53-843419: AArch64 Options. (line 74) 49956* mfix-cortex-m3-ldrd: ARM Options. (line 319) 49957* mfix-r10000: MIPS Options. (line 644) 49958* mfix-r4000: MIPS Options. (line 623) 49959* mfix-r4400: MIPS Options. (line 637) 49960* mfix-rm7000: MIPS Options. (line 655) 49961* mfix-sb1: MIPS Options. (line 681) 49962* mfix-ut699: SPARC Options. (line 249) 49963* mfix-vr4120: MIPS Options. (line 660) 49964* mfix-vr4130: MIPS Options. (line 674) 49965* mfixed-cc: FRV Options. (line 28) 49966* mfixed-range <1>: SH Options. (line 413) 49967* mfixed-range <2>: IA-64 Options. (line 105) 49968* mfixed-range <3>: SPU Options. (line 47) 49969* mfixed-range: HPPA Options. (line 52) 49970* mflat: SPARC Options. (line 22) 49971* mflip-mips16: MIPS Options. (line 128) 49972* mfloat-abi: ARM Options. (line 41) 49973* mfloat-gprs: RS/6000 and PowerPC Options. 49974 (line 286) 49975* mfloat-ieee: DEC Alpha Options. (line 171) 49976* mfloat-vax: DEC Alpha Options. (line 171) 49977* mfloat32: PDP-11 Options. (line 52) 49978* mfloat64: PDP-11 Options. (line 48) 49979* mflush-func: MIPS Options. (line 748) 49980* mflush-func=NAME: M32R/D Options. (line 93) 49981* mflush-trap=NUMBER: M32R/D Options. (line 86) 49982* mfma: x86 Options. (line 603) 49983* mfmaf: SPARC Options. (line 238) 49984* mfmovd: SH Options. (line 169) 49985* mforce-no-pic: Xtensa Options. (line 41) 49986* mfp-exceptions: MIPS Options. (line 775) 49987* mfp-mode: Adapteva Epiphany Options. 49988 (line 72) 49989* mfp-reg: DEC Alpha Options. (line 25) 49990* mfp-rounding-mode: DEC Alpha Options. (line 85) 49991* mfp-trap-mode: DEC Alpha Options. (line 63) 49992* mfp16-format: ARM Options. (line 171) 49993* mfp32: MIPS Options. (line 260) 49994* mfp64: MIPS Options. (line 263) 49995* mfpmath <1>: Optimize Options. (line 2068) 49996* mfpmath: x86 Options. (line 285) 49997* mfpr-32: FRV Options. (line 13) 49998* mfpr-64: FRV Options. (line 16) 49999* mfprnd: RS/6000 and PowerPC Options. 50000 (line 27) 50001* mfpu <1>: ARM Options. (line 150) 50002* mfpu <2>: PDP-11 Options. (line 9) 50003* mfpu <3>: RS/6000 and PowerPC Options. 50004 (line 406) 50005* mfpu <4>: Visium Options. (line 19) 50006* mfpu: SPARC Options. (line 35) 50007* mfpxx: MIPS Options. (line 266) 50008* mfriz: RS/6000 and PowerPC Options. 50009 (line 915) 50010* mfsca: SH Options. (line 497) 50011* mfsgsbase: x86 Options. (line 600) 50012* mfsrra: SH Options. (line 506) 50013* mfull-regs: NDS32 Options. (line 18) 50014* mfull-toc: RS/6000 and PowerPC Options. 50015 (line 314) 50016* mfused-madd <1>: RS/6000 and PowerPC Options. 50017 (line 459) 50018* mfused-madd <2>: S/390 and zSeries Options. 50019 (line 137) 50020* mfused-madd <3>: Xtensa Options. (line 19) 50021* mfused-madd <4>: SH Options. (line 488) 50022* mfused-madd <5>: MIPS Options. (line 599) 50023* mfused-madd: IA-64 Options. (line 88) 50024* mfxsr: x86 Options. (line 615) 50025* mg: VAX Options. (line 17) 50026* MG: Preprocessor Options. 50027 (line 229) 50028* mgas: HPPA Options. (line 68) 50029* mgcc-abi: V850 Options. (line 148) 50030* mgen-cell-microcode: RS/6000 and PowerPC Options. 50031 (line 177) 50032* mgeneral-regs-only: AArch64 Options. (line 24) 50033* mgettrcost=NUMBER: SH Options. (line 430) 50034* mghs: V850 Options. (line 127) 50035* mglibc: GNU/Linux Options. (line 9) 50036* mgnu: VAX Options. (line 13) 50037* mgnu-as: IA-64 Options. (line 18) 50038* mgnu-ld <1>: IA-64 Options. (line 23) 50039* mgnu-ld: HPPA Options. (line 104) 50040* mgotplt: CRIS Options. (line 81) 50041* mgp32: MIPS Options. (line 254) 50042* mgp64: MIPS Options. (line 257) 50043* mgpopt <1>: Nios II Options. (line 17) 50044* mgpopt: MIPS Options. (line 483) 50045* mgpr-32: FRV Options. (line 7) 50046* mgpr-64: FRV Options. (line 10) 50047* mgprel-ro: FRV Options. (line 79) 50048* mh: H8/300 Options. (line 14) 50049* mhal: Nios II Options. (line 266) 50050* mhalf-reg-file: Adapteva Epiphany Options. 50051 (line 9) 50052* mhard-dfp <1>: RS/6000 and PowerPC Options. 50053 (line 27) 50054* mhard-dfp: S/390 and zSeries Options. 50055 (line 20) 50056* mhard-float <1>: SPARC Options. (line 35) 50057* mhard-float <2>: MicroBlaze Options. (line 10) 50058* mhard-float <3>: RS/6000 and PowerPC Options. 50059 (line 392) 50060* mhard-float <4>: S/390 and zSeries Options. 50061 (line 11) 50062* mhard-float <5>: FRV Options. (line 19) 50063* mhard-float <6>: Visium Options. (line 19) 50064* mhard-float <7>: M680x0 Options. (line 197) 50065* mhard-float <8>: MIPS Options. (line 269) 50066* mhard-float: V850 Options. (line 113) 50067* mhard-quad-float: SPARC Options. (line 56) 50068* mhardlit: MCore Options. (line 10) 50069* mhint-max-distance: SPU Options. (line 102) 50070* mhint-max-nops: SPU Options. (line 96) 50071* mhotpatch: S/390 and zSeries Options. 50072 (line 173) 50073* mhp-ld: HPPA Options. (line 116) 50074* mhw-div: Nios II Options. (line 93) 50075* mhw-mul: Nios II Options. (line 93) 50076* mhw-mulx: Nios II Options. (line 93) 50077* mhwmult=: MSP430 Options. (line 55) 50078* micplb: Blackfin Options. (line 178) 50079* mid-shared-library: Blackfin Options. (line 81) 50080* mieee <1>: SH Options. (line 186) 50081* mieee: DEC Alpha Options. (line 39) 50082* mieee-conformant: DEC Alpha Options. (line 134) 50083* mieee-fp: x86 Options. (line 342) 50084* mieee-with-inexact: DEC Alpha Options. (line 52) 50085* milp32: IA-64 Options. (line 121) 50086* mimadd: MIPS Options. (line 592) 50087* mimpure-text: Solaris 2 Options. (line 16) 50088* mincoming-stack-boundary: x86 Options. (line 556) 50089* mindexed-addressing: SH Options. (line 420) 50090* mindexed-loads: ARC Options. (line 238) 50091* minline-all-stringops: x86 Options. (line 839) 50092* minline-float-divide-max-throughput: IA-64 Options. (line 58) 50093* minline-float-divide-min-latency: IA-64 Options. (line 54) 50094* minline-ic_invalidate: SH Options. (line 195) 50095* minline-int-divide-max-throughput: IA-64 Options. (line 69) 50096* minline-int-divide-min-latency: IA-64 Options. (line 65) 50097* minline-plt <1>: Blackfin Options. (line 138) 50098* minline-plt: FRV Options. (line 64) 50099* minline-sqrt-max-throughput: IA-64 Options. (line 80) 50100* minline-sqrt-min-latency: IA-64 Options. (line 76) 50101* minline-stringops-dynamically: x86 Options. (line 846) 50102* minrt: MSP430 Options. (line 77) 50103* minsert-sched-nops: RS/6000 and PowerPC Options. 50104 (line 575) 50105* mint-register: RX Options. (line 100) 50106* mint16: PDP-11 Options. (line 40) 50107* mint32 <1>: H8/300 Options. (line 38) 50108* mint32 <2>: PDP-11 Options. (line 44) 50109* mint32: CR16 Options. (line 22) 50110* mint8: AVR Options. (line 171) 50111* minterlink-compressed: MIPS Options. (line 136) 50112* minterlink-mips16: MIPS Options. (line 148) 50113* minvalid-symbols: SH Options. (line 456) 50114* mio-volatile: MeP Options. (line 74) 50115* mips1: MIPS Options. (line 80) 50116* mips16: MIPS Options. (line 120) 50117* mips2: MIPS Options. (line 83) 50118* mips3: MIPS Options. (line 86) 50119* mips32: MIPS Options. (line 92) 50120* mips32r3: MIPS Options. (line 95) 50121* mips32r5: MIPS Options. (line 98) 50122* mips32r6: MIPS Options. (line 101) 50123* mips3d: MIPS Options. (line 384) 50124* mips4: MIPS Options. (line 89) 50125* mips64: MIPS Options. (line 104) 50126* mips64r2: MIPS Options. (line 107) 50127* mips64r3: MIPS Options. (line 110) 50128* mips64r5: MIPS Options. (line 113) 50129* mips64r6: MIPS Options. (line 116) 50130* misel: RS/6000 and PowerPC Options. 50131 (line 195) 50132* misize <1>: SH Options. (line 207) 50133* misize: ARC Options. (line 132) 50134* misr-vector-size: NDS32 Options. (line 45) 50135* missue-rate=NUMBER: M32R/D Options. (line 79) 50136* mivc2: MeP Options. (line 59) 50137* mjump-in-delay: HPPA Options. (line 23) 50138* mkernel: Darwin Options. (line 82) 50139* mknuthdiv: MMIX Options. (line 33) 50140* ml <1>: MeP Options. (line 78) 50141* ml: SH Options. (line 150) 50142* mlarge: MSP430 Options. (line 44) 50143* mlarge-data: DEC Alpha Options. (line 187) 50144* mlarge-data-threshold: x86 Options. (line 442) 50145* mlarge-mem: SPU Options. (line 35) 50146* mlarge-text: DEC Alpha Options. (line 205) 50147* mleadz: MeP Options. (line 81) 50148* mleaf-id-shared-library: Blackfin Options. (line 92) 50149* mlibfuncs: MMIX Options. (line 10) 50150* mlibrary-pic: FRV Options. (line 110) 50151* mlinked-fp: FRV Options. (line 94) 50152* mlinker-opt: HPPA Options. (line 78) 50153* mlinux: CRIS Options. (line 91) 50154* mlittle: RS/6000 and PowerPC Options. 50155 (line 524) 50156* mlittle-endian <1>: NDS32 Options. (line 12) 50157* mlittle-endian <2>: MicroBlaze Options. (line 60) 50158* mlittle-endian <3>: C6X Options. (line 16) 50159* mlittle-endian <4>: AArch64 Options. (line 27) 50160* mlittle-endian <5>: MCore Options. (line 39) 50161* mlittle-endian <6>: IA-64 Options. (line 13) 50162* mlittle-endian <7>: ARM Options. (line 57) 50163* mlittle-endian <8>: RS/6000 and PowerPC Options. 50164 (line 524) 50165* mlittle-endian <9>: ARC Options. (line 356) 50166* mlittle-endian: TILE-Gx Options. (line 29) 50167* mlittle-endian-data: RX Options. (line 42) 50168* mliw: MN10300 Options. (line 54) 50169* mllsc: MIPS Options. (line 341) 50170* mlocal-sdata: MIPS Options. (line 448) 50171* mlock: ARC Options. (line 97) 50172* mlong-calls <1>: MIPS Options. (line 578) 50173* mlong-calls <2>: ARC Options. (line 163) 50174* mlong-calls <3>: Blackfin Options. (line 121) 50175* mlong-calls <4>: FRV Options. (line 99) 50176* mlong-calls <5>: V850 Options. (line 10) 50177* mlong-calls <6>: Adapteva Epiphany Options. 50178 (line 55) 50179* mlong-calls: ARM Options. (line 196) 50180* mlong-double-128 <1>: S/390 and zSeries Options. 50181 (line 29) 50182* mlong-double-128: x86 Options. (line 422) 50183* mlong-double-64 <1>: S/390 and zSeries Options. 50184 (line 29) 50185* mlong-double-64: x86 Options. (line 422) 50186* mlong-double-80: x86 Options. (line 422) 50187* mlong-jumps: V850 Options. (line 108) 50188* mlong-load-store: HPPA Options. (line 59) 50189* mlong32: MIPS Options. (line 423) 50190* mlong64: MIPS Options. (line 418) 50191* mlongcall: RS/6000 and PowerPC Options. 50192 (line 784) 50193* mlongcalls: Xtensa Options. (line 72) 50194* mloop: V850 Options. (line 121) 50195* mlow-64k: Blackfin Options. (line 70) 50196* mlp64: IA-64 Options. (line 121) 50197* mlra: ARC Options. (line 243) 50198* mlra-priority-compact: ARC Options. (line 251) 50199* mlra-priority-noncompact: ARC Options. (line 254) 50200* mlra-priority-none: ARC Options. (line 248) 50201* mlwp: x86 Options. (line 608) 50202* mlzcnt: x86 Options. (line 614) 50203* mm: MeP Options. (line 84) 50204* MM: Preprocessor Options. 50205 (line 210) 50206* mmac <1>: CR16 Options. (line 9) 50207* mmac: Score Options. (line 21) 50208* mmac-24: ARC Options. (line 106) 50209* mmac-d16: ARC Options. (line 102) 50210* mmac_24: ARC Options. (line 378) 50211* mmac_d16: ARC Options. (line 381) 50212* mmad: MIPS Options. (line 587) 50213* mmainkernel: Nvidia PTX Options. (line 13) 50214* mmalloc64: VMS Options. (line 17) 50215* mmax: DEC Alpha Options. (line 163) 50216* mmax-constant-size: RX Options. (line 82) 50217* mmax-stack-frame: CRIS Options. (line 22) 50218* mmcount-ra-address: MIPS Options. (line 823) 50219* mmcu <1>: AVR Options. (line 9) 50220* mmcu: MIPS Options. (line 401) 50221* mmcu=: MSP430 Options. (line 14) 50222* MMD: Preprocessor Options. 50223 (line 290) 50224* mmedia: FRV Options. (line 44) 50225* mmedium-calls: ARC Options. (line 167) 50226* mmemcpy <1>: MicroBlaze Options. (line 13) 50227* mmemcpy: MIPS Options. (line 572) 50228* mmemcpy-strategy=STRATEGY: x86 Options. (line 868) 50229* mmemory-latency: DEC Alpha Options. (line 268) 50230* mmemory-model: SPARC Options. (line 290) 50231* mmemset-strategy=STRATEGY: x86 Options. (line 880) 50232* mmfcrf: RS/6000 and PowerPC Options. 50233 (line 27) 50234* mmfpgpr: RS/6000 and PowerPC Options. 50235 (line 27) 50236* mmicromips: MIPS Options. (line 389) 50237* mminimal-toc: RS/6000 and PowerPC Options. 50238 (line 314) 50239* mminmax: MeP Options. (line 87) 50240* mmixed-code: ARC Options. (line 266) 50241* mmmx: x86 Options. (line 581) 50242* mmodel=large: M32R/D Options. (line 33) 50243* mmodel=medium: M32R/D Options. (line 27) 50244* mmodel=small: M32R/D Options. (line 18) 50245* mmovbe: x86 Options. (line 711) 50246* mmpx: x86 Options. (line 622) 50247* mmt: MIPS Options. (line 397) 50248* mmul: RL78 Options. (line 13) 50249* mmul-bug-workaround: CRIS Options. (line 31) 50250* mmul.x: Moxie Options. (line 14) 50251* mmul32x16: ARC Options. (line 51) 50252* mmul64: ARC Options. (line 54) 50253* mmuladd: FRV Options. (line 50) 50254* mmulhw: RS/6000 and PowerPC Options. 50255 (line 468) 50256* mmult: MeP Options. (line 90) 50257* mmult-bug: MN10300 Options. (line 9) 50258* mmultcost: ARC Options. (line 330) 50259* mmulti-cond-exec: FRV Options. (line 176) 50260* mmulticore: Blackfin Options. (line 142) 50261* mmultiple: RS/6000 and PowerPC Options. 50262 (line 418) 50263* mmvcle: S/390 and zSeries Options. 50264 (line 105) 50265* mmvme: RS/6000 and PowerPC Options. 50266 (line 688) 50267* mmwaitx: x86 Options. (line 623) 50268* mn: H8/300 Options. (line 20) 50269* mn-flash: AVR Options. (line 177) 50270* mnan=2008: MIPS Options. (line 322) 50271* mnan=legacy: MIPS Options. (line 322) 50272* mneon-for-64bits: ARM Options. (line 339) 50273* mnested-cond-exec: FRV Options. (line 189) 50274* mnhwloop: Score Options. (line 15) 50275* mno-16-bit: NDS32 Options. (line 42) 50276* mno-4byte-functions: MCore Options. (line 27) 50277* mno-8byte-align: V850 Options. (line 170) 50278* mno-abicalls: MIPS Options. (line 194) 50279* mno-abshi: PDP-11 Options. (line 58) 50280* mno-ac0: PDP-11 Options. (line 20) 50281* mno-address-space-conversion: SPU Options. (line 63) 50282* mno-align-double: x86 Options. (line 380) 50283* mno-align-int: M680x0 Options. (line 267) 50284* mno-align-loops: M32R/D Options. (line 76) 50285* mno-align-stringops: x86 Options. (line 834) 50286* mno-altivec: RS/6000 and PowerPC Options. 50287 (line 136) 50288* mno-am33: MN10300 Options. (line 20) 50289* mno-app-regs <1>: V850 Options. (line 185) 50290* mno-app-regs: SPARC Options. (line 10) 50291* mno-as100-syntax: RX Options. (line 76) 50292* mno-atomic-updates: SPU Options. (line 78) 50293* mno-avoid-indexed-addresses: RS/6000 and PowerPC Options. 50294 (line 450) 50295* mno-backchain: S/390 and zSeries Options. 50296 (line 35) 50297* mno-base-addresses: MMIX Options. (line 54) 50298* mno-bit-align: RS/6000 and PowerPC Options. 50299 (line 482) 50300* mno-bitfield: M680x0 Options. (line 231) 50301* mno-branch-likely: MIPS Options. (line 764) 50302* mno-branch-predict: MMIX Options. (line 49) 50303* mno-brcc: ARC Options. (line 203) 50304* mno-bwx: DEC Alpha Options. (line 163) 50305* mno-bypass-cache: Nios II Options. (line 72) 50306* mno-cache-volatile: Nios II Options. (line 78) 50307* mno-callgraph-data: MCore Options. (line 31) 50308* mno-cbcond: SPARC Options. (line 224) 50309* mno-check-zero-division: MIPS Options. (line 551) 50310* mno-cix: DEC Alpha Options. (line 163) 50311* mno-clearbss: MicroBlaze Options. (line 16) 50312* mno-cmov: NDS32 Options. (line 24) 50313* mno-cmpb: RS/6000 and PowerPC Options. 50314 (line 27) 50315* mno-cond-exec <1>: ARC Options. (line 215) 50316* mno-cond-exec: FRV Options. (line 158) 50317* mno-cond-move: FRV Options. (line 134) 50318* mno-const-align: CRIS Options. (line 55) 50319* mno-const16: Xtensa Options. (line 10) 50320* mno-crt0 <1>: MN10300 Options. (line 43) 50321* mno-crt0: Moxie Options. (line 18) 50322* mno-crypto: RS/6000 and PowerPC Options. 50323 (line 224) 50324* mno-csync-anomaly: Blackfin Options. (line 66) 50325* mno-custom-INSN: Nios II Options. (line 99) 50326* mno-data-align: CRIS Options. (line 55) 50327* mno-debug: S/390 and zSeries Options. 50328 (line 112) 50329* mno-default: x86 Options. (line 664) 50330* mno-direct-move: RS/6000 and PowerPC Options. 50331 (line 230) 50332* mno-disable-callt: V850 Options. (line 92) 50333* mno-div <1>: M680x0 Options. (line 209) 50334* mno-div: MCore Options. (line 15) 50335* mno-dlmzb: RS/6000 and PowerPC Options. 50336 (line 475) 50337* mno-double: FRV Options. (line 41) 50338* mno-dpfp-lrsr: ARC Options. (line 39) 50339* mno-dsp: MIPS Options. (line 355) 50340* mno-dspr2: MIPS Options. (line 361) 50341* mno-dwarf2-asm: IA-64 Options. (line 94) 50342* mno-dword: FRV Options. (line 35) 50343* mno-eabi: RS/6000 and PowerPC Options. 50344 (line 712) 50345* mno-early-stop-bits: IA-64 Options. (line 100) 50346* mno-eflags: FRV Options. (line 125) 50347* mno-embedded-data: MIPS Options. (line 498) 50348* mno-ep: V850 Options. (line 16) 50349* mno-epilogue-cfi: ARC Options. (line 160) 50350* mno-epsilon: MMIX Options. (line 15) 50351* mno-eva: MIPS Options. (line 405) 50352* mno-explicit-relocs <1>: DEC Alpha Options. (line 176) 50353* mno-explicit-relocs: MIPS Options. (line 542) 50354* mno-exr: H8/300 Options. (line 33) 50355* mno-extern-sdata: MIPS Options. (line 460) 50356* mno-fancy-math-387: x86 Options. (line 370) 50357* mno-fast-sw-div: Nios II Options. (line 84) 50358* mno-faster-structs: SPARC Options. (line 92) 50359* mno-fix: DEC Alpha Options. (line 163) 50360* mno-fix-24k: MIPS Options. (line 617) 50361* mno-fix-cortex-a53-835769: AArch64 Options. (line 67) 50362* mno-fix-cortex-a53-843419: AArch64 Options. (line 74) 50363* mno-fix-r10000: MIPS Options. (line 644) 50364* mno-fix-r4000: MIPS Options. (line 623) 50365* mno-fix-r4400: MIPS Options. (line 637) 50366* mno-flat: SPARC Options. (line 22) 50367* mno-float: MIPS Options. (line 276) 50368* mno-float32: PDP-11 Options. (line 48) 50369* mno-float64: PDP-11 Options. (line 52) 50370* mno-flush-func: M32R/D Options. (line 98) 50371* mno-flush-trap: M32R/D Options. (line 90) 50372* mno-fmaf: SPARC Options. (line 238) 50373* mno-fp-in-toc: RS/6000 and PowerPC Options. 50374 (line 314) 50375* mno-fp-regs: DEC Alpha Options. (line 25) 50376* mno-fp-ret-in-387: x86 Options. (line 360) 50377* mno-fprnd: RS/6000 and PowerPC Options. 50378 (line 27) 50379* mno-fpu <1>: Visium Options. (line 24) 50380* mno-fpu: SPARC Options. (line 40) 50381* mno-fsca: SH Options. (line 497) 50382* mno-fsrra: SH Options. (line 506) 50383* mno-fused-madd <1>: Xtensa Options. (line 19) 50384* mno-fused-madd <2>: S/390 and zSeries Options. 50385 (line 137) 50386* mno-fused-madd <3>: IA-64 Options. (line 88) 50387* mno-fused-madd <4>: SH Options. (line 488) 50388* mno-fused-madd <5>: RS/6000 and PowerPC Options. 50389 (line 459) 50390* mno-fused-madd: MIPS Options. (line 599) 50391* mno-gnu-as: IA-64 Options. (line 18) 50392* mno-gnu-ld: IA-64 Options. (line 23) 50393* mno-gotplt: CRIS Options. (line 81) 50394* mno-gpopt <1>: Nios II Options. (line 17) 50395* mno-gpopt: MIPS Options. (line 483) 50396* mno-hard-dfp <1>: S/390 and zSeries Options. 50397 (line 20) 50398* mno-hard-dfp: RS/6000 and PowerPC Options. 50399 (line 27) 50400* mno-hardlit: MCore Options. (line 10) 50401* mno-hw-div: Nios II Options. (line 93) 50402* mno-hw-mul: Nios II Options. (line 93) 50403* mno-hw-mulx: Nios II Options. (line 93) 50404* mno-id-shared-library: Blackfin Options. (line 88) 50405* mno-ieee: SH Options. (line 186) 50406* mno-ieee-fp: x86 Options. (line 342) 50407* mno-imadd: MIPS Options. (line 592) 50408* mno-inline-float-divide: IA-64 Options. (line 62) 50409* mno-inline-int-divide: IA-64 Options. (line 73) 50410* mno-inline-sqrt: IA-64 Options. (line 84) 50411* mno-int16: PDP-11 Options. (line 44) 50412* mno-int32: PDP-11 Options. (line 40) 50413* mno-interlink-compressed: MIPS Options. (line 136) 50414* mno-interlink-mips16: MIPS Options. (line 148) 50415* mno-interrupts: AVR Options. (line 180) 50416* mno-isel: RS/6000 and PowerPC Options. 50417 (line 195) 50418* mno-knuthdiv: MMIX Options. (line 33) 50419* mno-leaf-id-shared-library: Blackfin Options. (line 98) 50420* mno-libfuncs: MMIX Options. (line 10) 50421* mno-llsc: MIPS Options. (line 341) 50422* mno-local-sdata: MIPS Options. (line 448) 50423* mno-long-calls <1>: ARM Options. (line 196) 50424* mno-long-calls <2>: HPPA Options. (line 129) 50425* mno-long-calls <3>: Blackfin Options. (line 121) 50426* mno-long-calls <4>: V850 Options. (line 10) 50427* mno-long-calls: MIPS Options. (line 578) 50428* mno-long-jumps: V850 Options. (line 108) 50429* mno-longcall: RS/6000 and PowerPC Options. 50430 (line 784) 50431* mno-longcalls: Xtensa Options. (line 72) 50432* mno-low-64k: Blackfin Options. (line 74) 50433* mno-lsim <1>: MCore Options. (line 46) 50434* mno-lsim: FR30 Options. (line 14) 50435* mno-mad: MIPS Options. (line 587) 50436* mno-max: DEC Alpha Options. (line 163) 50437* mno-mcount-ra-address: MIPS Options. (line 823) 50438* mno-mcu: MIPS Options. (line 401) 50439* mno-mdmx: MIPS Options. (line 378) 50440* mno-media: FRV Options. (line 47) 50441* mno-memcpy: MIPS Options. (line 572) 50442* mno-mfcrf: RS/6000 and PowerPC Options. 50443 (line 27) 50444* mno-mfpgpr: RS/6000 and PowerPC Options. 50445 (line 27) 50446* mno-millicode: ARC Options. (line 257) 50447* mno-mips16: MIPS Options. (line 120) 50448* mno-mips3d: MIPS Options. (line 384) 50449* mno-mmicromips: MIPS Options. (line 389) 50450* mno-mpy: ARC Options. (line 48) 50451* mno-mt: MIPS Options. (line 397) 50452* mno-mul-bug-workaround: CRIS Options. (line 31) 50453* mno-muladd: FRV Options. (line 53) 50454* mno-mulhw: RS/6000 and PowerPC Options. 50455 (line 468) 50456* mno-mult-bug: MN10300 Options. (line 13) 50457* mno-multi-cond-exec: FRV Options. (line 183) 50458* mno-multiple: RS/6000 and PowerPC Options. 50459 (line 418) 50460* mno-mvcle: S/390 and zSeries Options. 50461 (line 105) 50462* mno-nested-cond-exec: FRV Options. (line 195) 50463* mno-odd-spreg: MIPS Options. (line 295) 50464* mno-omit-leaf-frame-pointer: AArch64 Options. (line 54) 50465* mno-optimize-membar: FRV Options. (line 205) 50466* mno-opts: MeP Options. (line 93) 50467* mno-pack: FRV Options. (line 122) 50468* mno-packed-stack: S/390 and zSeries Options. 50469 (line 54) 50470* mno-paired: RS/6000 and PowerPC Options. 50471 (line 209) 50472* mno-paired-single: MIPS Options. (line 372) 50473* mno-perf-ext: NDS32 Options. (line 30) 50474* mno-pic: IA-64 Options. (line 26) 50475* mno-pid: RX Options. (line 117) 50476* mno-plt: MIPS Options. (line 221) 50477* mno-popc: SPARC Options. (line 231) 50478* mno-popcntb: RS/6000 and PowerPC Options. 50479 (line 27) 50480* mno-popcntd: RS/6000 and PowerPC Options. 50481 (line 27) 50482* mno-postinc: Adapteva Epiphany Options. 50483 (line 110) 50484* mno-postmodify: Adapteva Epiphany Options. 50485 (line 110) 50486* mno-power8-fusion: RS/6000 and PowerPC Options. 50487 (line 236) 50488* mno-power8-vector: RS/6000 and PowerPC Options. 50489 (line 242) 50490* mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 50491 (line 27) 50492* mno-powerpc-gpopt: RS/6000 and PowerPC Options. 50493 (line 27) 50494* mno-powerpc64: RS/6000 and PowerPC Options. 50495 (line 27) 50496* mno-prolog-function: V850 Options. (line 23) 50497* mno-prologue-epilogue: CRIS Options. (line 71) 50498* mno-prototype: RS/6000 and PowerPC Options. 50499 (line 672) 50500* mno-push-args: x86 Options. (line 811) 50501* mno-quad-memory: RS/6000 and PowerPC Options. 50502 (line 249) 50503* mno-quad-memory-atomic: RS/6000 and PowerPC Options. 50504 (line 255) 50505* mno-red-zone: x86 Options. (line 982) 50506* mno-register-names: IA-64 Options. (line 37) 50507* mno-regnames: RS/6000 and PowerPC Options. 50508 (line 778) 50509* mno-relax: V850 Options. (line 103) 50510* mno-relax-immediate: MCore Options. (line 19) 50511* mno-relocatable: RS/6000 and PowerPC Options. 50512 (line 498) 50513* mno-relocatable-lib: RS/6000 and PowerPC Options. 50514 (line 509) 50515* mno-renesas: SH Options. (line 176) 50516* mno-round-nearest: Adapteva Epiphany Options. 50517 (line 51) 50518* mno-rtd: M680x0 Options. (line 262) 50519* mno-scc: FRV Options. (line 146) 50520* mno-sched-ar-data-spec: IA-64 Options. (line 134) 50521* mno-sched-ar-in-data-spec: IA-64 Options. (line 155) 50522* mno-sched-br-data-spec: IA-64 Options. (line 128) 50523* mno-sched-br-in-data-spec: IA-64 Options. (line 148) 50524* mno-sched-control-spec: IA-64 Options. (line 140) 50525* mno-sched-count-spec-in-critical-path: IA-64 Options. (line 182) 50526* mno-sched-in-control-spec: IA-64 Options. (line 162) 50527* mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 175) 50528* mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 168) 50529* mno-sched-prolog: ARM Options. (line 32) 50530* mno-sdata <1>: ARC Options. (line 175) 50531* mno-sdata <2>: IA-64 Options. (line 42) 50532* mno-sdata: RS/6000 and PowerPC Options. 50533 (line 759) 50534* mno-sep-data: Blackfin Options. (line 116) 50535* mno-serialize-volatile: Xtensa Options. (line 35) 50536* mno-short: M680x0 Options. (line 226) 50537* mno-side-effects: CRIS Options. (line 46) 50538* mno-sim: RX Options. (line 71) 50539* mno-single-exit: MMIX Options. (line 66) 50540* mno-slow-bytes: MCore Options. (line 35) 50541* mno-small-exec: S/390 and zSeries Options. 50542 (line 80) 50543* mno-smartmips: MIPS Options. (line 368) 50544* mno-soft-cmpsf: Adapteva Epiphany Options. 50545 (line 29) 50546* mno-soft-float: DEC Alpha Options. (line 10) 50547* mno-space-regs: HPPA Options. (line 38) 50548* mno-spe: RS/6000 and PowerPC Options. 50549 (line 204) 50550* mno-specld-anomaly: Blackfin Options. (line 56) 50551* mno-split-addresses: MIPS Options. (line 536) 50552* mno-stack-align: CRIS Options. (line 55) 50553* mno-stack-bias: SPARC Options. (line 314) 50554* mno-strict-align <1>: RS/6000 and PowerPC Options. 50555 (line 493) 50556* mno-strict-align: M680x0 Options. (line 287) 50557* mno-string: RS/6000 and PowerPC Options. 50558 (line 429) 50559* mno-sum-in-toc: RS/6000 and PowerPC Options. 50560 (line 314) 50561* mno-sym32: MIPS Options. (line 433) 50562* mno-target-align: Xtensa Options. (line 59) 50563* mno-text-section-literals: Xtensa Options. (line 47) 50564* mno-tls-markers: RS/6000 and PowerPC Options. 50565 (line 817) 50566* mno-toc: RS/6000 and PowerPC Options. 50567 (line 518) 50568* mno-toplevel-symbols: MMIX Options. (line 40) 50569* mno-tpf-trace: S/390 and zSeries Options. 50570 (line 131) 50571* mno-unaligned-access: ARM Options. (line 326) 50572* mno-unaligned-doubles: SPARC Options. (line 74) 50573* mno-uninit-const-in-rodata: MIPS Options. (line 506) 50574* mno-update: RS/6000 and PowerPC Options. 50575 (line 440) 50576* mno-upper-regs: RS/6000 and PowerPC Options. 50577 (line 277) 50578* mno-upper-regs-df: RS/6000 and PowerPC Options. 50579 (line 261) 50580* mno-upper-regs-sf: RS/6000 and PowerPC Options. 50581 (line 269) 50582* mno-user-mode: SPARC Options. (line 86) 50583* mno-usermode: SH Options. (line 297) 50584* mno-v3push: NDS32 Options. (line 36) 50585* mno-v8plus: SPARC Options. (line 195) 50586* mno-vect-double: Adapteva Epiphany Options. 50587 (line 116) 50588* mno-virt: MIPS Options. (line 409) 50589* mno-vis: SPARC Options. (line 202) 50590* mno-vis2: SPARC Options. (line 208) 50591* mno-vis3: SPARC Options. (line 216) 50592* mno-vliw-branch: FRV Options. (line 170) 50593* mno-volatile-asm-stop: IA-64 Options. (line 32) 50594* mno-volatile-cache: ARC Options. (line 189) 50595* mno-vrsave: RS/6000 and PowerPC Options. 50596 (line 174) 50597* mno-vsx: RS/6000 and PowerPC Options. 50598 (line 218) 50599* mno-warn-multiple-fast-interrupts: RX Options. (line 143) 50600* mno-wide-bitfields: MCore Options. (line 23) 50601* mno-xgot <1>: MIPS Options. (line 231) 50602* mno-xgot: M680x0 Options. (line 319) 50603* mno-xl-compat: RS/6000 and PowerPC Options. 50604 (line 349) 50605* mno-xpa: MIPS Options. (line 414) 50606* mno-zdcbranch: SH Options. (line 473) 50607* mno-zero-extend: MMIX Options. (line 27) 50608* mnobitfield: M680x0 Options. (line 231) 50609* mnoliw: MN10300 Options. (line 59) 50610* mnomacsave: SH Options. (line 181) 50611* mnop-fun-dllimport: x86 Windows Options. 50612 (line 22) 50613* mnop-mcount: x86 Options. (line 920) 50614* mnops: Adapteva Epiphany Options. 50615 (line 26) 50616* mnorm: ARC Options. (line 58) 50617* mnosetlb: MN10300 Options. (line 69) 50618* mnosplit-lohi: Adapteva Epiphany Options. 50619 (line 110) 50620* modd-spreg: MIPS Options. (line 295) 50621* momit-leaf-frame-pointer <1>: AArch64 Options. (line 54) 50622* momit-leaf-frame-pointer <2>: Blackfin Options. (line 44) 50623* momit-leaf-frame-pointer: x86 Options. (line 884) 50624* mone-byte-bool: Darwin Options. (line 90) 50625* moptimize-membar: FRV Options. (line 201) 50626* MP: Preprocessor Options. 50627 (line 239) 50628* mpa-risc-1-0: HPPA Options. (line 19) 50629* mpa-risc-1-1: HPPA Options. (line 19) 50630* mpa-risc-2-0: HPPA Options. (line 19) 50631* mpack: FRV Options. (line 119) 50632* mpacked-stack: S/390 and zSeries Options. 50633 (line 54) 50634* mpadstruct: SH Options. (line 210) 50635* mpaired: RS/6000 and PowerPC Options. 50636 (line 209) 50637* mpaired-single: MIPS Options. (line 372) 50638* mpc32: x86 Options. (line 505) 50639* mpc64: x86 Options. (line 505) 50640* mpc80: x86 Options. (line 505) 50641* mpclmul: x86 Options. (line 598) 50642* mpcrel: M680x0 Options. (line 279) 50643* mpdebug: CRIS Options. (line 35) 50644* mpe: RS/6000 and PowerPC Options. 50645 (line 369) 50646* mpe-aligned-commons: x86 Windows Options. 50647 (line 59) 50648* mperf-ext: NDS32 Options. (line 27) 50649* mpic-data-is-text-relative: ARM Options. (line 233) 50650* mpic-register: ARM Options. (line 226) 50651* mpid: RX Options. (line 117) 50652* mplt: MIPS Options. (line 221) 50653* mpointer-size=SIZE: VMS Options. (line 20) 50654* mpointers-to-nested-functions: RS/6000 and PowerPC Options. 50655 (line 923) 50656* mpoke-function-name: ARM Options. (line 239) 50657* mpopc: SPARC Options. (line 231) 50658* mpopcnt: x86 Options. (line 610) 50659* mpopcntb: RS/6000 and PowerPC Options. 50660 (line 27) 50661* mpopcntd: RS/6000 and PowerPC Options. 50662 (line 27) 50663* mportable-runtime: HPPA Options. (line 64) 50664* mpower8-fusion: RS/6000 and PowerPC Options. 50665 (line 236) 50666* mpower8-vector: RS/6000 and PowerPC Options. 50667 (line 242) 50668* mpowerpc-gfxopt: RS/6000 and PowerPC Options. 50669 (line 27) 50670* mpowerpc-gpopt: RS/6000 and PowerPC Options. 50671 (line 27) 50672* mpowerpc64: RS/6000 and PowerPC Options. 50673 (line 27) 50674* mprefer-avx128: x86 Options. (line 688) 50675* mprefer-short-insn-regs: Adapteva Epiphany Options. 50676 (line 13) 50677* mprefergot: SH Options. (line 291) 50678* mpreferred-stack-boundary: x86 Options. (line 535) 50679* mprefetchwt1: x86 Options. (line 606) 50680* mpretend-cmove: SH Options. (line 515) 50681* mprint-tune-info: ARM Options. (line 363) 50682* mprioritize-restricted-insns: RS/6000 and PowerPC Options. 50683 (line 547) 50684* mprolog-function: V850 Options. (line 23) 50685* mprologue-epilogue: CRIS Options. (line 71) 50686* mprototype: RS/6000 and PowerPC Options. 50687 (line 672) 50688* mpt-fixed: SH Options. (line 434) 50689* mpush-args: x86 Options. (line 811) 50690* MQ: Preprocessor Options. 50691 (line 265) 50692* mq-class: ARC Options. (line 271) 50693* mquad-memory: RS/6000 and PowerPC Options. 50694 (line 249) 50695* mquad-memory-atomic: RS/6000 and PowerPC Options. 50696 (line 255) 50697* mr10k-cache-barrier: MIPS Options. (line 686) 50698* mRcq: ARC Options. (line 275) 50699* mRcw: ARC Options. (line 279) 50700* mrdrnd: x86 Options. (line 601) 50701* mrecip <1>: x86 Options. (line 721) 50702* mrecip: RS/6000 and PowerPC Options. 50703 (line 829) 50704* mrecip-precision: RS/6000 and PowerPC Options. 50705 (line 887) 50706* mrecip=opt <1>: x86 Options. (line 743) 50707* mrecip=opt: RS/6000 and PowerPC Options. 50708 (line 842) 50709* mrecord-mcount: x86 Options. (line 914) 50710* mreduced-regs: NDS32 Options. (line 15) 50711* mregister-names: IA-64 Options. (line 37) 50712* mregnames: RS/6000 and PowerPC Options. 50713 (line 778) 50714* mregparm: x86 Options. (line 472) 50715* mrelax <1>: MN10300 Options. (line 46) 50716* mrelax <2>: H8/300 Options. (line 9) 50717* mrelax <3>: NDS32 Options. (line 74) 50718* mrelax <4>: SH Options. (line 158) 50719* mrelax <5>: V850 Options. (line 103) 50720* mrelax <6>: MSP430 Options. (line 50) 50721* mrelax <7>: RX Options. (line 95) 50722* mrelax: AVR Options. (line 184) 50723* mrelax-immediate: MCore Options. (line 19) 50724* mrelax-pic-calls: MIPS Options. (line 810) 50725* mrelocatable: RS/6000 and PowerPC Options. 50726 (line 498) 50727* mrelocatable-lib: RS/6000 and PowerPC Options. 50728 (line 509) 50729* mrenesas: SH Options. (line 173) 50730* mrepeat: MeP Options. (line 96) 50731* mrestrict-it: ARM Options. (line 357) 50732* mreturn-pointer-on-d0: MN10300 Options. (line 36) 50733* mrh850-abi: V850 Options. (line 127) 50734* mrmw: AVR Options. (line 198) 50735* mrtd <1>: x86 Options. (line 448) 50736* mrtd <2>: Function Attributes. 50737 (line 217) 50738* mrtd: M680x0 Options. (line 240) 50739* mrtm: x86 Options. (line 620) 50740* mrtp: VxWorks Options. (line 11) 50741* mrtsc: ARC Options. (line 110) 50742* ms <1>: MeP Options. (line 100) 50743* ms: H8/300 Options. (line 17) 50744* ms2600: H8/300 Options. (line 24) 50745* msafe-dma: SPU Options. (line 17) 50746* msafe-hints: SPU Options. (line 107) 50747* msahf: x86 Options. (line 701) 50748* msatur: MeP Options. (line 105) 50749* msave-acc-in-interrupts: RX Options. (line 109) 50750* msave-toc-indirect: RS/6000 and PowerPC Options. 50751 (line 935) 50752* mscc: FRV Options. (line 140) 50753* msched-ar-data-spec: IA-64 Options. (line 134) 50754* msched-ar-in-data-spec: IA-64 Options. (line 155) 50755* msched-br-data-spec: IA-64 Options. (line 128) 50756* msched-br-in-data-spec: IA-64 Options. (line 148) 50757* msched-control-spec: IA-64 Options. (line 140) 50758* msched-costly-dep: RS/6000 and PowerPC Options. 50759 (line 554) 50760* msched-count-spec-in-critical-path: IA-64 Options. (line 182) 50761* msched-fp-mem-deps-zero-cost: IA-64 Options. (line 198) 50762* msched-in-control-spec: IA-64 Options. (line 162) 50763* msched-max-memory-insns: IA-64 Options. (line 207) 50764* msched-max-memory-insns-hard-limit: IA-64 Options. (line 213) 50765* msched-prefer-non-control-spec-insns: IA-64 Options. (line 175) 50766* msched-prefer-non-data-spec-insns: IA-64 Options. (line 168) 50767* msched-spec-ldc: IA-64 Options. (line 190) 50768* msched-stop-bits-after-every-cycle: IA-64 Options. (line 194) 50769* mschedule: HPPA Options. (line 71) 50770* mscore5: Score Options. (line 25) 50771* mscore5u: Score Options. (line 28) 50772* mscore7: Score Options. (line 31) 50773* mscore7d: Score Options. (line 34) 50774* msda: V850 Options. (line 40) 50775* msdata <1>: RS/6000 and PowerPC Options. 50776 (line 746) 50777* msdata: IA-64 Options. (line 42) 50778* msdata=all: C6X Options. (line 30) 50779* msdata=data: RS/6000 and PowerPC Options. 50780 (line 751) 50781* msdata=default <1>: RS/6000 and PowerPC Options. 50782 (line 746) 50783* msdata=default: C6X Options. (line 22) 50784* msdata=eabi: RS/6000 and PowerPC Options. 50785 (line 726) 50786* msdata=none <1>: M32R/D Options. (line 40) 50787* msdata=none <2>: C6X Options. (line 35) 50788* msdata=none: RS/6000 and PowerPC Options. 50789 (line 759) 50790* msdata=sdata: M32R/D Options. (line 49) 50791* msdata=sysv: RS/6000 and PowerPC Options. 50792 (line 737) 50793* msdata=use: M32R/D Options. (line 53) 50794* msdram <1>: Blackfin Options. (line 172) 50795* msdram: MeP Options. (line 110) 50796* msecure-plt: RS/6000 and PowerPC Options. 50797 (line 184) 50798* msel-sched-dont-check-control-spec: IA-64 Options. (line 203) 50799* msep-data: Blackfin Options. (line 110) 50800* mserialize-volatile: Xtensa Options. (line 35) 50801* msetlb: MN10300 Options. (line 64) 50802* msha: x86 Options. (line 596) 50803* mshared-library-id: Blackfin Options. (line 103) 50804* mshort: M680x0 Options. (line 220) 50805* msign-extend-enabled: LM32 Options. (line 18) 50806* msim <1>: MSP430 Options. (line 39) 50807* msim <2>: RL78 Options. (line 7) 50808* msim <3>: Visium Options. (line 13) 50809* msim <4>: MeP Options. (line 114) 50810* msim <5>: C6X Options. (line 19) 50811* msim <6>: Blackfin Options. (line 37) 50812* msim <7>: Xstormy16 Options. (line 9) 50813* msim <8>: CR16 Options. (line 18) 50814* msim <9>: M32C Options. (line 13) 50815* msim <10>: RX Options. (line 71) 50816* msim: RS/6000 and PowerPC Options. 50817 (line 682) 50818* msimd: ARC Options. (line 71) 50819* msimnovec: MeP Options. (line 117) 50820* msimple-fpu: RS/6000 and PowerPC Options. 50821 (line 402) 50822* msingle-exit: MMIX Options. (line 66) 50823* msingle-float <1>: MIPS Options. (line 286) 50824* msingle-float: RS/6000 and PowerPC Options. 50825 (line 398) 50826* msingle-pic-base <1>: RS/6000 and PowerPC Options. 50827 (line 541) 50828* msingle-pic-base: ARM Options. (line 220) 50829* msio: HPPA Options. (line 98) 50830* msize-level: ARC Options. (line 283) 50831* mskip-rax-setup: x86 Options. (line 927) 50832* mslow-bytes: MCore Options. (line 35) 50833* mslow-flash-data: ARM Options. (line 344) 50834* msmall: MSP430 Options. (line 47) 50835* msmall-data: DEC Alpha Options. (line 187) 50836* msmall-data-limit: RX Options. (line 47) 50837* msmall-divides: MicroBlaze Options. (line 39) 50838* msmall-exec: S/390 and zSeries Options. 50839 (line 80) 50840* msmall-mem: SPU Options. (line 35) 50841* msmall-model: FR30 Options. (line 9) 50842* msmall-text: DEC Alpha Options. (line 205) 50843* msmall16: Adapteva Epiphany Options. 50844 (line 67) 50845* msmallc: Nios II Options. (line 272) 50846* msmartmips: MIPS Options. (line 368) 50847* msoft-float <1>: HPPA Options. (line 84) 50848* msoft-float <2>: ARC Options. (line 75) 50849* msoft-float <3>: x86 Options. (line 347) 50850* msoft-float <4>: DEC Alpha Options. (line 10) 50851* msoft-float <5>: FRV Options. (line 22) 50852* msoft-float <6>: M680x0 Options. (line 203) 50853* msoft-float <7>: MicroBlaze Options. (line 7) 50854* msoft-float <8>: MIPS Options. (line 272) 50855* msoft-float <9>: Visium Options. (line 24) 50856* msoft-float <10>: PDP-11 Options. (line 13) 50857* msoft-float <11>: RS/6000 and PowerPC Options. 50858 (line 392) 50859* msoft-float <12>: S/390 and zSeries Options. 50860 (line 11) 50861* msoft-float <13>: SPARC Options. (line 40) 50862* msoft-float: V850 Options. (line 113) 50863* msoft-quad-float: SPARC Options. (line 60) 50864* msp8: AVR Options. (line 202) 50865* mspace: V850 Options. (line 30) 50866* mspe: RS/6000 and PowerPC Options. 50867 (line 204) 50868* mspecld-anomaly: Blackfin Options. (line 51) 50869* mspfp: ARC Options. (line 62) 50870* mspfp-compact: ARC Options. (line 63) 50871* mspfp-fast: ARC Options. (line 67) 50872* mspfp_compact: ARC Options. (line 384) 50873* mspfp_fast: ARC Options. (line 387) 50874* msplit-addresses: MIPS Options. (line 536) 50875* msplit-vecmove-early: Adapteva Epiphany Options. 50876 (line 127) 50877* msse: x86 Options. (line 582) 50878* msse2avx: x86 Options. (line 902) 50879* msseregparm: x86 Options. (line 483) 50880* mstack-align: CRIS Options. (line 55) 50881* mstack-bias: SPARC Options. (line 314) 50882* mstack-check-l1: Blackfin Options. (line 77) 50883* mstack-guard: S/390 and zSeries Options. 50884 (line 156) 50885* mstack-increment: MCore Options. (line 50) 50886* mstack-offset: Adapteva Epiphany Options. 50887 (line 37) 50888* mstack-protector-guard=GUARD: x86 Options. (line 951) 50889* mstack-size: S/390 and zSeries Options. 50890 (line 156) 50891* mstackrealign: x86 Options. (line 526) 50892* mstdmain: SPU Options. (line 40) 50893* mstrict-align <1>: RS/6000 and PowerPC Options. 50894 (line 493) 50895* mstrict-align <2>: M680x0 Options. (line 287) 50896* mstrict-align: AArch64 Options. (line 49) 50897* mstrict-X: AVR Options. (line 215) 50898* mstring: RS/6000 and PowerPC Options. 50899 (line 429) 50900* mstringop-strategy=ALG: x86 Options. (line 850) 50901* mstructure-size-boundary: ARM Options. (line 177) 50902* msv-mode: Visium Options. (line 52) 50903* msvr4-struct-return: RS/6000 and PowerPC Options. 50904 (line 634) 50905* mswap: ARC Options. (line 82) 50906* mswape: ARC Options. (line 115) 50907* msym32: MIPS Options. (line 433) 50908* msynci: MIPS Options. (line 796) 50909* msys-crt0: Nios II Options. (line 276) 50910* msys-lib: Nios II Options. (line 280) 50911* MT: Preprocessor Options. 50912 (line 251) 50913* mtarget-align: Xtensa Options. (line 59) 50914* mtas: SH Options. (line 282) 50915* mtbm: x86 Options. (line 621) 50916* mtda: V850 Options. (line 34) 50917* mtelephony: ARC Options. (line 120) 50918* mtext-section-literals: Xtensa Options. (line 47) 50919* mtf: MeP Options. (line 121) 50920* mthread: x86 Windows Options. 50921 (line 26) 50922* mthreads: x86 Options. (line 826) 50923* mthumb: ARM Options. (line 261) 50924* mthumb-interwork: ARM Options. (line 24) 50925* mtiny-stack: AVR Options. (line 229) 50926* mtiny=: MeP Options. (line 125) 50927* mTLS: FRV Options. (line 72) 50928* mtls: FRV Options. (line 75) 50929* mtls-dialect <1>: x86 Options. (line 804) 50930* mtls-dialect: ARM Options. (line 302) 50931* mtls-dialect=desc: AArch64 Options. (line 58) 50932* mtls-dialect=traditional: AArch64 Options. (line 62) 50933* mtls-direct-seg-refs: x86 Options. (line 892) 50934* mtls-markers: RS/6000 and PowerPC Options. 50935 (line 817) 50936* mtls-size: IA-64 Options. (line 112) 50937* mtoc: RS/6000 and PowerPC Options. 50938 (line 518) 50939* mtomcat-stats: FRV Options. (line 209) 50940* mtoplevel-symbols: MMIX Options. (line 40) 50941* mtp: ARM Options. (line 294) 50942* mtpcs-frame: ARM Options. (line 267) 50943* mtpcs-leaf-frame: ARM Options. (line 273) 50944* mtpf-trace: S/390 and zSeries Options. 50945 (line 131) 50946* mtrap-precision: DEC Alpha Options. (line 109) 50947* mtune <1>: Visium Options. (line 47) 50948* mtune <2>: M680x0 Options. (line 70) 50949* mtune <3>: AArch64 Options. (line 96) 50950* mtune <4>: RS/6000 and PowerPC Options. 50951 (line 114) 50952* mtune <5>: SPARC Options. (line 181) 50953* mtune <6>: DEC Alpha Options. (line 259) 50954* mtune <7>: x86 Options. (line 227) 50955* mtune <8>: S/390 and zSeries Options. 50956 (line 124) 50957* mtune <9>: CRIS Options. (line 16) 50958* mtune <10>: MIPS Options. (line 65) 50959* mtune <11>: ARM Options. (line 87) 50960* mtune <12>: ARC Options. (line 305) 50961* mtune <13>: MN10300 Options. (line 30) 50962* mtune: IA-64 Options. (line 116) 50963* mtune-ctrl=FEATURE-LIST: x86 Options. (line 654) 50964* mucb-mcount: ARC Options. (line 180) 50965* muclibc: GNU/Linux Options. (line 13) 50966* muls: Score Options. (line 18) 50967* multcost: ARC Options. (line 395) 50968* multcost=NUMBER: SH Options. (line 305) 50969* multi_module: Darwin Options. (line 196) 50970* multilib-library-pic: FRV Options. (line 89) 50971* multiply-enabled: LM32 Options. (line 15) 50972* multiply_defined: Darwin Options. (line 196) 50973* multiply_defined_unused: Darwin Options. (line 196) 50974* munalign-prob-threshold: ARC Options. (line 334) 50975* munaligned-access: ARM Options. (line 326) 50976* munaligned-doubles: SPARC Options. (line 74) 50977* municode: x86 Windows Options. 50978 (line 30) 50979* muninit-const-in-rodata: MIPS Options. (line 506) 50980* munix: VAX Options. (line 9) 50981* munix-asm: PDP-11 Options. (line 68) 50982* munsafe-dma: SPU Options. (line 17) 50983* mupdate: RS/6000 and PowerPC Options. 50984 (line 440) 50985* mupper-regs: RS/6000 and PowerPC Options. 50986 (line 277) 50987* mupper-regs-df: RS/6000 and PowerPC Options. 50988 (line 261) 50989* mupper-regs-sf: RS/6000 and PowerPC Options. 50990 (line 269) 50991* muser-enabled: LM32 Options. (line 21) 50992* muser-mode <1>: SPARC Options. (line 86) 50993* muser-mode: Visium Options. (line 57) 50994* musermode: SH Options. (line 297) 50995* mv3push: NDS32 Options. (line 33) 50996* mv850: V850 Options. (line 49) 50997* mv850e: V850 Options. (line 79) 50998* mv850e1: V850 Options. (line 70) 50999* mv850e2: V850 Options. (line 66) 51000* mv850e2v3: V850 Options. (line 61) 51001* mv850e2v4: V850 Options. (line 57) 51002* mv850e3v5: V850 Options. (line 52) 51003* mv850es: V850 Options. (line 75) 51004* mv8plus: SPARC Options. (line 195) 51005* mveclibabi <1>: x86 Options. (line 772) 51006* mveclibabi: RS/6000 and PowerPC Options. 51007 (line 896) 51008* mvect8-ret-in-mem: x86 Options. (line 493) 51009* mvirt: MIPS Options. (line 409) 51010* mvis: SPARC Options. (line 202) 51011* mvis2: SPARC Options. (line 208) 51012* mvis3: SPARC Options. (line 216) 51013* mvliw-branch: FRV Options. (line 164) 51014* mvms-return-codes: VMS Options. (line 9) 51015* mvolatile-asm-stop: IA-64 Options. (line 32) 51016* mvolatile-cache: ARC Options. (line 185) 51017* mvr4130-align: MIPS Options. (line 785) 51018* mvrsave: RS/6000 and PowerPC Options. 51019 (line 174) 51020* mvsx: RS/6000 and PowerPC Options. 51021 (line 218) 51022* mvxworks: RS/6000 and PowerPC Options. 51023 (line 703) 51024* mvzeroupper: x86 Options. (line 682) 51025* mwarn-cell-microcode: RS/6000 and PowerPC Options. 51026 (line 180) 51027* mwarn-dynamicstack: S/390 and zSeries Options. 51028 (line 150) 51029* mwarn-framesize: S/390 and zSeries Options. 51030 (line 142) 51031* mwarn-multiple-fast-interrupts: RX Options. (line 143) 51032* mwarn-reloc: SPU Options. (line 10) 51033* mwide-bitfields: MCore Options. (line 23) 51034* mwin32: x86 Windows Options. 51035 (line 35) 51036* mwindows: x86 Windows Options. 51037 (line 41) 51038* mword-relocations: ARM Options. (line 313) 51039* mx32: x86 Options. (line 965) 51040* mxgot <1>: M680x0 Options. (line 319) 51041* mxgot: MIPS Options. (line 231) 51042* mxilinx-fpu: RS/6000 and PowerPC Options. 51043 (line 413) 51044* mxl-barrel-shift: MicroBlaze Options. (line 33) 51045* mxl-compat: RS/6000 and PowerPC Options. 51046 (line 349) 51047* mxl-float-convert: MicroBlaze Options. (line 51) 51048* mxl-float-sqrt: MicroBlaze Options. (line 54) 51049* mxl-gp-opt: MicroBlaze Options. (line 45) 51050* mxl-multiply-high: MicroBlaze Options. (line 48) 51051* mxl-pattern-compare: MicroBlaze Options. (line 36) 51052* mxl-reorder: MicroBlaze Options. (line 63) 51053* mxl-soft-div: MicroBlaze Options. (line 30) 51054* mxl-soft-mul: MicroBlaze Options. (line 27) 51055* mxl-stack-check: MicroBlaze Options. (line 42) 51056* mxop: x86 Options. (line 607) 51057* mxpa: MIPS Options. (line 414) 51058* mxsave: x86 Options. (line 616) 51059* mxsavec: x86 Options. (line 618) 51060* mxsaveopt: x86 Options. (line 617) 51061* mxsaves: x86 Options. (line 619) 51062* mxy: ARC Options. (line 125) 51063* myellowknife: RS/6000 and PowerPC Options. 51064 (line 698) 51065* mzarch: S/390 and zSeries Options. 51066 (line 95) 51067* mzda: V850 Options. (line 45) 51068* mzdcbranch: SH Options. (line 473) 51069* mzero-extend: MMIX Options. (line 27) 51070* no-canonical-prefixes: Overall Options. (line 334) 51071* no-integrated-cpp: Preprocessor Options. 51072 (line 34) 51073* no-sysroot-suffix: Directory Options. (line 116) 51074* no_dead_strip_inits_and_terms: Darwin Options. (line 196) 51075* noall_load: Darwin Options. (line 196) 51076* nocpp: MIPS Options. (line 611) 51077* nodefaultlibs: Link Options. (line 68) 51078* nodevicelib: AVR Options. (line 232) 51079* nofixprebinding: Darwin Options. (line 196) 51080* nofpu: RX Options. (line 17) 51081* nolibdld: HPPA Options. (line 181) 51082* nomultidefs: Darwin Options. (line 196) 51083* non-static: VxWorks Options. (line 16) 51084* noprebind: Darwin Options. (line 196) 51085* noseglinkedit: Darwin Options. (line 196) 51086* nostartfiles: Link Options. (line 63) 51087* nostdinc: Preprocessor Options. 51088 (line 399) 51089* nostdinc++ <1>: C++ Dialect Options. 51090 (line 431) 51091* nostdinc++: Preprocessor Options. 51092 (line 404) 51093* nostdlib: Link Options. (line 80) 51094* O: Optimize Options. (line 39) 51095* o <1>: Preprocessor Options. 51096 (line 87) 51097* o: Overall Options. (line 192) 51098* O0: Optimize Options. (line 145) 51099* O1: Optimize Options. (line 39) 51100* O2: Optimize Options. (line 91) 51101* O3: Optimize Options. (line 136) 51102* Ofast: Optimize Options. (line 159) 51103* Og: Optimize Options. (line 166) 51104* Os: Optimize Options. (line 149) 51105* p: Debugging Options. (line 640) 51106* P: Preprocessor Options. 51107 (line 659) 51108* pagezero_size: Darwin Options. (line 196) 51109* param: Optimize Options. (line 2438) 51110* pass-exit-codes: Overall Options. (line 150) 51111* pedantic <1>: Preprocessor Options. 51112 (line 175) 51113* pedantic <2>: Warnings and Errors. 51114 (line 25) 51115* pedantic <3>: Warning Options. (line 82) 51116* pedantic <4>: Standards. (line 16) 51117* pedantic <5>: Alternate Keywords. (line 30) 51118* pedantic: C Extensions. (line 6) 51119* pedantic-errors <1>: Preprocessor Options. 51120 (line 180) 51121* pedantic-errors <2>: Standards. (line 16) 51122* pedantic-errors <3>: Non-bugs. (line 216) 51123* pedantic-errors <4>: Warning Options. (line 124) 51124* pedantic-errors: Warnings and Errors. 51125 (line 25) 51126* pg: Debugging Options. (line 646) 51127* pie: Link Options. (line 105) 51128* pipe: Overall Options. (line 215) 51129* prebind: Darwin Options. (line 196) 51130* prebind_all_twolevel_modules: Darwin Options. (line 196) 51131* print-file-name: Debugging Options. (line 1612) 51132* print-libgcc-file-name: Debugging Options. (line 1646) 51133* print-multi-directory: Debugging Options. (line 1618) 51134* print-multi-lib: Debugging Options. (line 1623) 51135* print-multi-os-directory: Debugging Options. (line 1630) 51136* print-multiarch: Debugging Options. (line 1639) 51137* print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 51138 (line 217) 51139* print-prog-name: Debugging Options. (line 1643) 51140* print-search-dirs: Debugging Options. (line 1654) 51141* print-sysroot: Debugging Options. (line 1667) 51142* print-sysroot-headers-suffix: Debugging Options. (line 1674) 51143* private_bundle: Darwin Options. (line 196) 51144* pthread <1>: RS/6000 and PowerPC Options. 51145 (line 824) 51146* pthread: Solaris 2 Options. (line 38) 51147* pthreads: Solaris 2 Options. (line 32) 51148* Q: Debugging Options. (line 652) 51149* Qn: System V Options. (line 18) 51150* Qy: System V Options. (line 14) 51151* rdynamic: Link Options. (line 111) 51152* read_only_relocs: Darwin Options. (line 196) 51153* remap: Preprocessor Options. 51154 (line 707) 51155* s: Link Options. (line 118) 51156* S <1>: Overall Options. (line 175) 51157* S: Link Options. (line 20) 51158* save-temps: Debugging Options. (line 1519) 51159* save-temps=obj: Debugging Options. (line 1545) 51160* sectalign: Darwin Options. (line 196) 51161* sectcreate: Darwin Options. (line 196) 51162* sectobjectsymbols: Darwin Options. (line 196) 51163* sectorder: Darwin Options. (line 196) 51164* seg1addr: Darwin Options. (line 196) 51165* seg_addr_table: Darwin Options. (line 196) 51166* seg_addr_table_filename: Darwin Options. (line 196) 51167* segaddr: Darwin Options. (line 196) 51168* seglinkedit: Darwin Options. (line 196) 51169* segprot: Darwin Options. (line 196) 51170* segs_read_only_addr: Darwin Options. (line 196) 51171* segs_read_write_addr: Darwin Options. (line 196) 51172* shared: Link Options. (line 127) 51173* shared-libgcc: Link Options. (line 135) 51174* short-calls: Adapteva Epiphany Options. 51175 (line 61) 51176* sim: CRIS Options. (line 95) 51177* sim2: CRIS Options. (line 101) 51178* single_module: Darwin Options. (line 196) 51179* specs: Directory Options. (line 93) 51180* static <1>: Link Options. (line 122) 51181* static <2>: Darwin Options. (line 196) 51182* static: HPPA Options. (line 185) 51183* static-libasan: Link Options. (line 170) 51184* static-libgcc: Link Options. (line 135) 51185* static-liblsan: Link Options. (line 188) 51186* static-libmpx: Link Options. (line 206) 51187* static-libmpxwrappers: Link Options. (line 215) 51188* static-libstdc++: Link Options. (line 225) 51189* static-libtsan: Link Options. (line 179) 51190* static-libubsan: Link Options. (line 197) 51191* std <1>: Other Builtins. (line 22) 51192* std <2>: C Dialect Options. (line 47) 51193* std <3>: Standards. (line 16) 51194* std: Non-bugs. (line 107) 51195* std=: Preprocessor Options. 51196 (line 338) 51197* sub_library: Darwin Options. (line 196) 51198* sub_umbrella: Darwin Options. (line 196) 51199* symbolic: Link Options. (line 236) 51200* sysroot: Directory Options. (line 101) 51201* T: Link Options. (line 242) 51202* target-help <1>: Overall Options. (line 230) 51203* target-help: Preprocessor Options. 51204 (line 712) 51205* threads: HPPA Options. (line 198) 51206* time: Debugging Options. (line 1560) 51207* tno-android-cc: GNU/Linux Options. (line 31) 51208* tno-android-ld: GNU/Linux Options. (line 35) 51209* traditional <1>: C Dialect Options. (line 346) 51210* traditional: Incompatibilities. (line 6) 51211* traditional-cpp <1>: C Dialect Options. (line 346) 51212* traditional-cpp: Preprocessor Options. 51213 (line 690) 51214* trigraphs <1>: C Dialect Options. (line 341) 51215* trigraphs: Preprocessor Options. 51216 (line 694) 51217* twolevel_namespace: Darwin Options. (line 196) 51218* U: Preprocessor Options. 51219 (line 69) 51220* u: Link Options. (line 274) 51221* umbrella: Darwin Options. (line 196) 51222* undef: Preprocessor Options. 51223 (line 73) 51224* undefined: Darwin Options. (line 196) 51225* unexported_symbols_list: Darwin Options. (line 196) 51226* v <1>: Overall Options. (line 203) 51227* v: Preprocessor Options. 51228 (line 716) 51229* version <1>: Overall Options. (line 338) 51230* version: Preprocessor Options. 51231 (line 729) 51232* w <1>: Warning Options. (line 25) 51233* w: Preprocessor Options. 51234 (line 171) 51235* W <1>: Incompatibilities. (line 64) 51236* W: Warning Options. (line 1451) 51237* Wa: Assembler Options. (line 9) 51238* Wabi: C++ Dialect Options. 51239 (line 439) 51240* Wabi-tag: C++ Dialect Options. 51241 (line 531) 51242* Waddr-space-convert: AVR Options. (line 235) 51243* Waddress: Warning Options. (line 1353) 51244* Waggregate-return: Warning Options. (line 1386) 51245* Waggressive-loop-optimizations: Warning Options. (line 1391) 51246* Wall <1>: Standard Libraries. (line 6) 51247* Wall <2>: Preprocessor Options. 51248 (line 93) 51249* Wall: Warning Options. (line 133) 51250* Warray-bounds: Warning Options. (line 895) 51251* Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 51252 (line 171) 51253* Wattributes: Warning Options. (line 1396) 51254* Wbad-function-cast: Warning Options. (line 1160) 51255* Wbool-compare: Warning Options. (line 911) 51256* Wbuiltin-macro-redefined: Warning Options. (line 1402) 51257* Wc++-compat: Warning Options. (line 1182) 51258* Wc++11-compat: Warning Options. (line 1187) 51259* Wc++14-compat: Warning Options. (line 1193) 51260* Wc90-c99-compat: Warning Options. (line 1165) 51261* Wc99-c11-compat: Warning Options. (line 1173) 51262* Wcast-align: Warning Options. (line 1213) 51263* Wcast-qual: Warning Options. (line 1197) 51264* Wchar-subscripts: Warning Options. (line 222) 51265* Wclobbered: Warning Options. (line 1233) 51266* Wcomment <1>: Warning Options. (line 227) 51267* Wcomment: Preprocessor Options. 51268 (line 101) 51269* Wcomments: Preprocessor Options. 51270 (line 101) 51271* Wconditionally-supported: Warning Options. (line 1237) 51272* Wconversion: Warning Options. (line 1240) 51273* Wconversion-null: Warning Options. (line 1258) 51274* Wctor-dtor-privacy: C++ Dialect Options. 51275 (line 536) 51276* Wdate-time: Warning Options. (line 1266) 51277* Wdeclaration-after-statement: Warning Options. (line 1071) 51278* Wdelete-incomplete: Warning Options. (line 1271) 51279* Wdelete-non-virtual-dtor: C++ Dialect Options. 51280 (line 543) 51281* Wdeprecated: Warning Options. (line 1525) 51282* Wdeprecated-declarations: Warning Options. (line 1529) 51283* Wdisabled-optimization: Warning Options. (line 1693) 51284* Wdiscarded-array-qualifiers: Warning Options. (line 926) 51285* Wdiscarded-qualifiers: Warning Options. (line 920) 51286* Wdiv-by-zero: Warning Options. (line 944) 51287* Wdouble-promotion: Warning Options. (line 251) 51288* weak_reference_mismatches: Darwin Options. (line 196) 51289* Weffc++: C++ Dialect Options. 51290 (line 623) 51291* Wempty-body: Warning Options. (line 1278) 51292* Wendif-labels <1>: Preprocessor Options. 51293 (line 148) 51294* Wendif-labels: Warning Options. (line 1080) 51295* Wenum-compare: Warning Options. (line 1282) 51296* Werror <1>: Preprocessor Options. 51297 (line 161) 51298* Werror: Warning Options. (line 28) 51299* Werror=: Warning Options. (line 31) 51300* Wextra: Warning Options. (line 183) 51301* Wfatal-errors: Warning Options. (line 48) 51302* Wfloat-conversion: Warning Options. (line 1312) 51303* Wfloat-equal: Warning Options. (line 970) 51304* Wformat <1>: Function Attributes. 51305 (line 425) 51306* Wformat: Warning Options. (line 297) 51307* Wformat-contains-nul: Warning Options. (line 307) 51308* Wformat-extra-args: Warning Options. (line 311) 51309* Wformat-nonliteral <1>: Function Attributes. 51310 (line 491) 51311* Wformat-nonliteral: Warning Options. (line 335) 51312* Wformat-security: Warning Options. (line 340) 51313* Wformat-signedness: Warning Options. (line 352) 51314* Wformat-y2k: Warning Options. (line 357) 51315* Wformat-zero-length: Warning Options. (line 325) 51316* Wformat=: Warning Options. (line 270) 51317* Wformat=1: Warning Options. (line 297) 51318* Wformat=2: Warning Options. (line 330) 51319* Wframe-larger-than: Warning Options. (line 1099) 51320* Wfree-nonheap-object: Warning Options. (line 1108) 51321* whatsloaded: Darwin Options. (line 196) 51322* whyload: Darwin Options. (line 196) 51323* Wignored-qualifiers: Warning Options. (line 397) 51324* Wimplicit: Warning Options. (line 393) 51325* Wimplicit-function-declaration: Warning Options. (line 387) 51326* Wimplicit-int: Warning Options. (line 383) 51327* Wincompatible-pointer-types: Warning Options. (line 932) 51328* Winherited-variadic-ctor: Warning Options. (line 1605) 51329* Winit-self: Warning Options. (line 368) 51330* Winline <1>: Warning Options. (line 1610) 51331* Winline: Inline. (line 63) 51332* Wint-conversion: Warning Options. (line 938) 51333* Wint-to-pointer-cast: Warning Options. (line 1635) 51334* Winvalid-offsetof: Warning Options. (line 1623) 51335* Winvalid-pch: Warning Options. (line 1644) 51336* Wjump-misses-init: Warning Options. (line 1288) 51337* Wl: Link Options. (line 266) 51338* Wlarger-than-LEN: Warning Options. (line 1096) 51339* Wlarger-than=LEN: Warning Options. (line 1096) 51340* Wliteral-suffix: C++ Dialect Options. 51341 (line 550) 51342* Wlogical-not-parentheses: Warning Options. (line 1371) 51343* Wlogical-op: Warning Options. (line 1366) 51344* Wlong-long: Warning Options. (line 1648) 51345* Wmain: Warning Options. (line 408) 51346* Wmaybe-uninitialized: Warning Options. (line 686) 51347* Wmemset-transposed-args: Warning Options. (line 1342) 51348* Wmissing-braces: Warning Options. (line 415) 51349* Wmissing-declarations: Warning Options. (line 1441) 51350* Wmissing-field-initializers: Warning Options. (line 1451) 51351* Wmissing-format-attribute: Warning Options. (line 850) 51352* Wmissing-include-dirs: Warning Options. (line 426) 51353* Wmissing-parameter-type: Warning Options. (line 1423) 51354* Wmissing-prototypes: Warning Options. (line 1431) 51355* Wmultichar: Warning Options. (line 1475) 51356* Wnarrowing: C++ Dialect Options. 51357 (line 571) 51358* Wnested-externs: Warning Options. (line 1602) 51359* Wno-abi: C++ Dialect Options. 51360 (line 439) 51361* Wno-address: Warning Options. (line 1353) 51362* Wno-aggregate-return: Warning Options. (line 1386) 51363* Wno-aggressive-loop-optimizations: Warning Options. (line 1391) 51364* Wno-all: Warning Options. (line 133) 51365* Wno-array-bounds: Warning Options. (line 895) 51366* Wno-assign-intercept: Objective-C and Objective-C++ Dialect Options. 51367 (line 171) 51368* Wno-attributes: Warning Options. (line 1396) 51369* Wno-bad-function-cast: Warning Options. (line 1160) 51370* Wno-bool-compare: Warning Options. (line 911) 51371* Wno-builtin-macro-redefined: Warning Options. (line 1402) 51372* Wno-c90-c99-compat: Warning Options. (line 1165) 51373* Wno-c99-c11-compat: Warning Options. (line 1173) 51374* Wno-cast-align: Warning Options. (line 1213) 51375* Wno-cast-qual: Warning Options. (line 1197) 51376* Wno-char-subscripts: Warning Options. (line 222) 51377* Wno-clobbered: Warning Options. (line 1233) 51378* Wno-comment: Warning Options. (line 227) 51379* Wno-conditionally-supported: Warning Options. (line 1237) 51380* Wno-conversion: Warning Options. (line 1240) 51381* Wno-conversion-null: Warning Options. (line 1258) 51382* Wno-coverage-mismatch: Warning Options. (line 232) 51383* Wno-ctor-dtor-privacy: C++ Dialect Options. 51384 (line 536) 51385* Wno-date-time: Warning Options. (line 1266) 51386* Wno-declaration-after-statement: Warning Options. (line 1071) 51387* Wno-delete-incomplete: Warning Options. (line 1271) 51388* Wno-delete-non-virtual-dtor: C++ Dialect Options. 51389 (line 543) 51390* Wno-deprecated: Warning Options. (line 1525) 51391* Wno-deprecated-declarations: Warning Options. (line 1529) 51392* Wno-disabled-optimization: Warning Options. (line 1693) 51393* Wno-discarded-array-qualifiers: Warning Options. (line 926) 51394* Wno-discarded-qualifiers: Warning Options. (line 920) 51395* Wno-div-by-zero: Warning Options. (line 944) 51396* Wno-double-promotion: Warning Options. (line 251) 51397* Wno-effc++: C++ Dialect Options. 51398 (line 623) 51399* Wno-empty-body: Warning Options. (line 1278) 51400* Wno-endif-labels: Warning Options. (line 1080) 51401* Wno-enum-compare: Warning Options. (line 1282) 51402* Wno-error: Warning Options. (line 28) 51403* Wno-error=: Warning Options. (line 31) 51404* Wno-extra: Warning Options. (line 1548) 51405* Wno-fatal-errors: Warning Options. (line 48) 51406* Wno-float-conversion: Warning Options. (line 1312) 51407* Wno-float-equal: Warning Options. (line 970) 51408* Wno-format: Warning Options. (line 850) 51409* Wno-format-contains-nul: Warning Options. (line 307) 51410* Wno-format-extra-args: Warning Options. (line 311) 51411* Wno-format-nonliteral: Warning Options. (line 335) 51412* Wno-format-security: Warning Options. (line 340) 51413* Wno-format-signedness: Warning Options. (line 352) 51414* Wno-format-y2k: Warning Options. (line 357) 51415* Wno-format-zero-length: Warning Options. (line 325) 51416* Wno-free-nonheap-object: Warning Options. (line 1108) 51417* Wno-ignored-qualifiers: Warning Options. (line 397) 51418* Wno-implicit: Warning Options. (line 393) 51419* Wno-implicit-function-declaration: Warning Options. (line 387) 51420* Wno-implicit-int: Warning Options. (line 383) 51421* Wno-incompatible-pointer-types: Warning Options. (line 932) 51422* Wno-inherited-variadic-ctor: Warning Options. (line 1605) 51423* Wno-init-self: Warning Options. (line 368) 51424* Wno-inline: Warning Options. (line 1610) 51425* Wno-int-conversion: Warning Options. (line 938) 51426* Wno-int-to-pointer-cast: Warning Options. (line 1635) 51427* Wno-invalid-offsetof: Warning Options. (line 1623) 51428* Wno-invalid-pch: Warning Options. (line 1644) 51429* Wno-jump-misses-init: Warning Options. (line 1288) 51430* Wno-literal-suffix: C++ Dialect Options. 51431 (line 550) 51432* Wno-logical-not-parentheses: Warning Options. (line 1371) 51433* Wno-logical-op: Warning Options. (line 1366) 51434* Wno-long-long: Warning Options. (line 1648) 51435* Wno-main: Warning Options. (line 408) 51436* Wno-maybe-uninitialized: Warning Options. (line 686) 51437* Wno-memset-transposed-args: Warning Options. (line 1342) 51438* Wno-missing-braces: Warning Options. (line 415) 51439* Wno-missing-declarations: Warning Options. (line 1441) 51440* Wno-missing-field-initializers: Warning Options. (line 1451) 51441* Wno-missing-format-attribute: Warning Options. (line 850) 51442* Wno-missing-include-dirs: Warning Options. (line 426) 51443* Wno-missing-parameter-type: Warning Options. (line 1423) 51444* Wno-missing-prototypes: Warning Options. (line 1431) 51445* Wno-multichar: Warning Options. (line 1475) 51446* Wno-narrowing: C++ Dialect Options. 51447 (line 571) 51448* Wno-nested-externs: Warning Options. (line 1602) 51449* Wno-noexcept: C++ Dialect Options. 51450 (line 584) 51451* Wno-non-template-friend: C++ Dialect Options. 51452 (line 660) 51453* Wno-non-virtual-dtor: C++ Dialect Options. 51454 (line 590) 51455* Wno-nonnull: Warning Options. (line 361) 51456* Wno-normalized: Warning Options. (line 1481) 51457* Wno-odr: Warning Options. (line 1538) 51458* Wno-old-style-cast: C++ Dialect Options. 51459 (line 676) 51460* Wno-old-style-declaration: Warning Options. (line 1413) 51461* Wno-old-style-definition: Warning Options. (line 1419) 51462* Wno-overflow: Warning Options. (line 1535) 51463* Wno-overlength-strings: Warning Options. (line 1713) 51464* Wno-overloaded-virtual: C++ Dialect Options. 51465 (line 682) 51466* Wno-override-init: Warning Options. (line 1548) 51467* Wno-packed: Warning Options. (line 1556) 51468* Wno-packed-bitfield-compat: Warning Options. (line 1573) 51469* Wno-padded: Warning Options. (line 1590) 51470* Wno-parentheses: Warning Options. (line 429) 51471* Wno-pedantic-ms-format: Warning Options. (line 1140) 51472* Wno-pmf-conversions <1>: Bound member functions. 51473 (line 35) 51474* Wno-pmf-conversions: C++ Dialect Options. 51475 (line 701) 51476* Wno-pointer-arith: Warning Options. (line 1146) 51477* Wno-pointer-sign: Warning Options. (line 1702) 51478* Wno-pointer-to-int-cast: Warning Options. (line 1640) 51479* Wno-pragmas: Warning Options. (line 736) 51480* Wno-protocol: Objective-C and Objective-C++ Dialect Options. 51481 (line 175) 51482* Wno-redundant-decls: Warning Options. (line 1597) 51483* Wno-reorder: C++ Dialect Options. 51484 (line 598) 51485* Wno-return-local-addr: Warning Options. (line 524) 51486* Wno-return-type: Warning Options. (line 528) 51487* Wno-selector: Objective-C and Objective-C++ Dialect Options. 51488 (line 185) 51489* Wno-sequence-point: Warning Options. (line 478) 51490* Wno-shadow: Warning Options. (line 1084) 51491* Wno-shadow-ivar: Warning Options. (line 1092) 51492* Wno-shift-count-negative: Warning Options. (line 543) 51493* Wno-shift-count-overflow: Warning Options. (line 547) 51494* Wno-sign-compare: Warning Options. (line 1299) 51495* Wno-sign-conversion: Warning Options. (line 1306) 51496* Wno-sign-promo: C++ Dialect Options. 51497 (line 705) 51498* Wno-sized-deallocation: Warning Options. (line 1318) 51499* Wno-sizeof-array-argument: Warning Options. (line 1337) 51500* Wno-sizeof-pointer-memaccess: Warning Options. (line 1329) 51501* Wno-stack-protector: Warning Options. (line 1708) 51502* Wno-strict-aliasing: Warning Options. (line 741) 51503* Wno-strict-null-sentinel: C++ Dialect Options. 51504 (line 652) 51505* Wno-strict-overflow: Warning Options. (line 781) 51506* Wno-strict-prototypes: Warning Options. (line 1407) 51507* Wno-strict-selector-match: Objective-C and Objective-C++ Dialect Options. 51508 (line 197) 51509* Wno-suggest-attribute=: Warning Options. (line 831) 51510* Wno-suggest-attribute=const: Warning Options. (line 837) 51511* Wno-suggest-attribute=format: Warning Options. (line 850) 51512* Wno-suggest-attribute=noreturn: Warning Options. (line 837) 51513* Wno-suggest-attribute=pure: Warning Options. (line 837) 51514* Wno-suggest-final-methods: Warning Options. (line 880) 51515* Wno-suggest-final-types: Warning Options. (line 871) 51516* Wno-switch: Warning Options. (line 551) 51517* Wno-switch-bool: Warning Options. (line 571) 51518* Wno-switch-default: Warning Options. (line 559) 51519* Wno-switch-enum: Warning Options. (line 562) 51520* Wno-sync-nand: Warning Options. (line 581) 51521* Wno-system-headers: Warning Options. (line 949) 51522* Wno-traditional: Warning Options. (line 985) 51523* Wno-traditional-conversion: Warning Options. (line 1063) 51524* Wno-trampolines: Warning Options. (line 960) 51525* Wno-trigraphs: Warning Options. (line 586) 51526* Wno-type-limits: Warning Options. (line 1153) 51527* Wno-undeclared-selector: Objective-C and Objective-C++ Dialect Options. 51528 (line 205) 51529* Wno-undef: Warning Options. (line 1077) 51530* Wno-uninitialized: Warning Options. (line 663) 51531* Wno-unknown-pragmas: Warning Options. (line 729) 51532* Wno-unsafe-loop-optimizations: Warning Options. (line 1134) 51533* Wno-unused: Warning Options. (line 656) 51534* Wno-unused-but-set-parameter: Warning Options. (line 591) 51535* Wno-unused-but-set-variable: Warning Options. (line 600) 51536* Wno-unused-function: Warning Options. (line 610) 51537* Wno-unused-label: Warning Options. (line 615) 51538* Wno-unused-parameter: Warning Options. (line 626) 51539* Wno-unused-result: Warning Options. (line 633) 51540* Wno-unused-value: Warning Options. (line 646) 51541* Wno-unused-variable: Warning Options. (line 638) 51542* Wno-useless-cast: Warning Options. (line 1275) 51543* Wno-varargs: Warning Options. (line 1659) 51544* Wno-variadic-macros: Warning Options. (line 1653) 51545* Wno-vector-operation-performance: Warning Options. (line 1664) 51546* Wno-virtual-move-assign: Warning Options. (line 1674) 51547* Wno-vla: Warning Options. (line 1683) 51548* Wno-volatile-register-var: Warning Options. (line 1687) 51549* Wno-write-strings: Warning Options. (line 1219) 51550* Wno-zero-as-null-pointer-constant: Warning Options. (line 1262) 51551* Wnoexcept: C++ Dialect Options. 51552 (line 584) 51553* Wnon-template-friend: C++ Dialect Options. 51554 (line 660) 51555* Wnon-virtual-dtor: C++ Dialect Options. 51556 (line 590) 51557* Wnonnull: Warning Options. (line 361) 51558* Wnormalized: Warning Options. (line 1481) 51559* Wnormalized=: Warning Options. (line 1481) 51560* Wodr: Warning Options. (line 1538) 51561* Wold-style-cast: C++ Dialect Options. 51562 (line 676) 51563* Wold-style-declaration: Warning Options. (line 1413) 51564* Wold-style-definition: Warning Options. (line 1419) 51565* Wopenm-simd: Warning Options. (line 1543) 51566* Woverflow: Warning Options. (line 1535) 51567* Woverlength-strings: Warning Options. (line 1713) 51568* Woverloaded-virtual: C++ Dialect Options. 51569 (line 682) 51570* Woverride-init: Warning Options. (line 1548) 51571* Wp: Preprocessor Options. 51572 (line 14) 51573* Wpacked: Warning Options. (line 1556) 51574* Wpacked-bitfield-compat: Warning Options. (line 1573) 51575* Wpadded: Warning Options. (line 1590) 51576* Wparentheses: Warning Options. (line 429) 51577* Wpedantic: Warning Options. (line 82) 51578* Wpedantic-ms-format: Warning Options. (line 1140) 51579* Wpmf-conversions: C++ Dialect Options. 51580 (line 701) 51581* Wpointer-arith <1>: Pointer Arith. (line 13) 51582* Wpointer-arith: Warning Options. (line 1146) 51583* Wpointer-sign: Warning Options. (line 1702) 51584* Wpointer-to-int-cast: Warning Options. (line 1640) 51585* Wpragmas: Warning Options. (line 736) 51586* Wprotocol: Objective-C and Objective-C++ Dialect Options. 51587 (line 175) 51588* wrapper: Overall Options. (line 341) 51589* Wredundant-decls: Warning Options. (line 1597) 51590* Wreorder: C++ Dialect Options. 51591 (line 598) 51592* Wreturn-local-addr: Warning Options. (line 524) 51593* Wreturn-type: Warning Options. (line 528) 51594* Wselector: Objective-C and Objective-C++ Dialect Options. 51595 (line 185) 51596* Wsequence-point: Warning Options. (line 478) 51597* Wshadow: Warning Options. (line 1084) 51598* Wshadow-ivar: Warning Options. (line 1092) 51599* Wshift-count-negative: Warning Options. (line 543) 51600* Wshift-count-overflow: Warning Options. (line 547) 51601* Wsign-compare: Warning Options. (line 1299) 51602* Wsign-conversion: Warning Options. (line 1306) 51603* Wsign-promo: C++ Dialect Options. 51604 (line 705) 51605* Wsized-deallocation: Warning Options. (line 1318) 51606* Wsizeof-array-argument: Warning Options. (line 1337) 51607* Wsizeof-pointer-memaccess: Warning Options. (line 1329) 51608* Wstack-protector: Warning Options. (line 1708) 51609* Wstack-usage: Warning Options. (line 1112) 51610* Wstrict-aliasing: Warning Options. (line 741) 51611* Wstrict-aliasing=n: Warning Options. (line 749) 51612* Wstrict-null-sentinel: C++ Dialect Options. 51613 (line 652) 51614* Wstrict-overflow: Warning Options. (line 781) 51615* Wstrict-prototypes: Warning Options. (line 1407) 51616* Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 51617 (line 197) 51618* Wsuggest-attribute=: Warning Options. (line 831) 51619* Wsuggest-attribute=const: Warning Options. (line 837) 51620* Wsuggest-attribute=format: Warning Options. (line 850) 51621* Wsuggest-attribute=noreturn: Warning Options. (line 837) 51622* Wsuggest-attribute=pure: Warning Options. (line 837) 51623* Wsuggest-final-methods: Warning Options. (line 880) 51624* Wsuggest-final-types: Warning Options. (line 871) 51625* Wswitch: Warning Options. (line 551) 51626* Wswitch-bool: Warning Options. (line 571) 51627* Wswitch-default: Warning Options. (line 559) 51628* Wswitch-enum: Warning Options. (line 562) 51629* Wsync-nand: Warning Options. (line 581) 51630* Wsystem-headers <1>: Warning Options. (line 949) 51631* Wsystem-headers: Preprocessor Options. 51632 (line 165) 51633* Wtraditional <1>: Warning Options. (line 985) 51634* Wtraditional: Preprocessor Options. 51635 (line 118) 51636* Wtraditional-conversion: Warning Options. (line 1063) 51637* Wtrampolines: Warning Options. (line 960) 51638* Wtrigraphs <1>: Preprocessor Options. 51639 (line 106) 51640* Wtrigraphs: Warning Options. (line 586) 51641* Wtype-limits: Warning Options. (line 1153) 51642* Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 51643 (line 205) 51644* Wundef <1>: Preprocessor Options. 51645 (line 124) 51646* Wundef: Warning Options. (line 1077) 51647* Wuninitialized: Warning Options. (line 663) 51648* Wunknown-pragmas: Warning Options. (line 729) 51649* Wunsafe-loop-optimizations: Warning Options. (line 1134) 51650* Wunsuffixed-float-constants: Warning Options. (line 1728) 51651* Wunused: Warning Options. (line 656) 51652* Wunused-but-set-parameter: Warning Options. (line 591) 51653* Wunused-but-set-variable: Warning Options. (line 600) 51654* Wunused-function: Warning Options. (line 610) 51655* Wunused-label: Warning Options. (line 615) 51656* Wunused-local-typedefs: Warning Options. (line 622) 51657* Wunused-macros: Preprocessor Options. 51658 (line 129) 51659* Wunused-parameter: Warning Options. (line 626) 51660* Wunused-result: Warning Options. (line 633) 51661* Wunused-value: Warning Options. (line 646) 51662* Wunused-variable: Warning Options. (line 638) 51663* Wuseless-cast: Warning Options. (line 1275) 51664* Wvarargs: Warning Options. (line 1659) 51665* Wvariadic-macros: Warning Options. (line 1653) 51666* Wvector-operation-performance: Warning Options. (line 1664) 51667* Wvirtual-move-assign: Warning Options. (line 1674) 51668* Wvla: Warning Options. (line 1683) 51669* Wvolatile-register-var: Warning Options. (line 1687) 51670* Wwrite-strings: Warning Options. (line 1219) 51671* Wzero-as-null-pointer-constant: Warning Options. (line 1262) 51672* x <1>: Preprocessor Options. 51673 (line 322) 51674* x: Overall Options. (line 126) 51675* Xassembler: Assembler Options. (line 13) 51676* Xbind-lazy: VxWorks Options. (line 26) 51677* Xbind-now: VxWorks Options. (line 30) 51678* Xlinker: Link Options. (line 248) 51679* Xpreprocessor: Preprocessor Options. 51680 (line 25) 51681* Ym: System V Options. (line 26) 51682* YP: System V Options. (line 22) 51683* z: Link Options. (line 279) 51684 51685 51686File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 51687 51688Keyword Index 51689************* 51690 51691[index] 51692* Menu: 51693 51694* ! in constraint: Multi-Alternative. (line 33) 51695* # in constraint: Modifiers. (line 68) 51696* #pragma: Pragmas. (line 6) 51697* #pragma implementation: C++ Interface. (line 36) 51698* #pragma implementation, implied: C++ Interface. (line 43) 51699* #pragma interface: C++ Interface. (line 17) 51700* #pragma, reason for not using: Function Attributes. 51701 (line 2050) 51702* $: Dollar Signs. (line 6) 51703* $ in constraint: Multi-Alternative. (line 42) 51704* % in constraint: Modifiers. (line 52) 51705* %include: Spec Files. (line 27) 51706* %include_noerr: Spec Files. (line 31) 51707* %rename: Spec Files. (line 35) 51708* & in constraint: Modifiers. (line 25) 51709* ': Incompatibilities. (line 116) 51710* * in constraint: Modifiers. (line 73) 51711* *__builtin_assume_aligned: Other Builtins. (line 346) 51712* + in constraint: Modifiers. (line 12) 51713* -lgcc, use with -nodefaultlibs: Link Options. (line 91) 51714* -lgcc, use with -nostdlib: Link Options. (line 91) 51715* -march feature modifiers: AArch64 Options. (line 133) 51716* -mcpu feature modifiers: AArch64 Options. (line 133) 51717* -nodefaultlibs and unresolved references: Link Options. (line 91) 51718* -nostdlib and unresolved references: Link Options. (line 91) 51719* .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 51720 (line 770) 51721* //: C++ Comments. (line 6) 51722* 0 in constraint: Simple Constraints. (line 127) 51723* < in constraint: Simple Constraints. (line 48) 51724* = in constraint: Modifiers. (line 8) 51725* > in constraint: Simple Constraints. (line 61) 51726* ? in constraint: Multi-Alternative. (line 27) 51727* ?: extensions: Conditionals. (line 6) 51728* ?: side effect: Conditionals. (line 20) 51729* ^ in constraint: Multi-Alternative. (line 38) 51730* _ in variables in macros: Typeof. (line 46) 51731* __atomic_add_fetch: __atomic Builtins. (line 169) 51732* __atomic_always_lock_free: __atomic Builtins. (line 247) 51733* __atomic_and_fetch: __atomic Builtins. (line 173) 51734* __atomic_clear: __atomic Builtins. (line 221) 51735* __atomic_compare_exchange: __atomic Builtins. (line 161) 51736* __atomic_compare_exchange_n: __atomic Builtins. (line 138) 51737* __atomic_exchange: __atomic Builtins. (line 130) 51738* __atomic_exchange_n: __atomic Builtins. (line 119) 51739* __atomic_fetch_add: __atomic Builtins. (line 189) 51740* __atomic_fetch_and: __atomic Builtins. (line 193) 51741* __atomic_fetch_nand: __atomic Builtins. (line 199) 51742* __atomic_fetch_or: __atomic Builtins. (line 197) 51743* __atomic_fetch_sub: __atomic Builtins. (line 191) 51744* __atomic_fetch_xor: __atomic Builtins. (line 195) 51745* __atomic_is_lock_free: __atomic Builtins. (line 261) 51746* __atomic_load: __atomic Builtins. (line 98) 51747* __atomic_load_n: __atomic Builtins. (line 89) 51748* __atomic_nand_fetch: __atomic Builtins. (line 179) 51749* __atomic_or_fetch: __atomic Builtins. (line 177) 51750* __atomic_signal_fence: __atomic Builtins. (line 239) 51751* __atomic_store: __atomic Builtins. (line 113) 51752* __atomic_store_n: __atomic Builtins. (line 104) 51753* __atomic_sub_fetch: __atomic Builtins. (line 171) 51754* __atomic_test_and_set: __atomic Builtins. (line 210) 51755* __atomic_thread_fence: __atomic Builtins. (line 232) 51756* __atomic_xor_fetch: __atomic Builtins. (line 175) 51757* __builtin___bnd_chk_ptr_bounds: Pointer Bounds Checker builtins. 51758 (line 6) 51759* __builtin___bnd_chk_ptr_lbounds: Pointer Bounds Checker builtins. 51760 (line 87) 51761* __builtin___bnd_chk_ptr_ubounds: Pointer Bounds Checker builtins. 51762 (line 6) 51763* __builtin___bnd_copy_ptr_bounds: Pointer Bounds Checker builtins. 51764 (line 48) 51765* __builtin___bnd_get_ptr_lbound: Pointer Bounds Checker builtins. 51766 (line 130) 51767* __builtin___bnd_get_ptr_ubound: Pointer Bounds Checker builtins. 51768 (line 142) 51769* __builtin___bnd_init_ptr_bounds: Pointer Bounds Checker builtins. 51770 (line 61) 51771* __builtin___bnd_narrow_ptr_bounds: Pointer Bounds Checker builtins. 51772 (line 6) 51773* __builtin___bnd_null_ptr_bounds: Pointer Bounds Checker builtins. 51774 (line 6) 51775* __builtin___bnd_set_ptr_bounds: Pointer Bounds Checker builtins. 51776 (line 6) 51777* __builtin___bnd_store_ptr_bounds: Pointer Bounds Checker builtins. 51778 (line 77) 51779* __builtin___clear_cache: Other Builtins. (line 381) 51780* __builtin___fprintf_chk: Object Size Checking. 51781 (line 6) 51782* __builtin___memcpy_chk: Object Size Checking. 51783 (line 6) 51784* __builtin___memmove_chk: Object Size Checking. 51785 (line 6) 51786* __builtin___mempcpy_chk: Object Size Checking. 51787 (line 6) 51788* __builtin___memset_chk: Object Size Checking. 51789 (line 6) 51790* __builtin___printf_chk: Object Size Checking. 51791 (line 6) 51792* __builtin___snprintf_chk: Object Size Checking. 51793 (line 6) 51794* __builtin___sprintf_chk: Object Size Checking. 51795 (line 6) 51796* __builtin___stpcpy_chk: Object Size Checking. 51797 (line 6) 51798* __builtin___strcat_chk: Object Size Checking. 51799 (line 6) 51800* __builtin___strcpy_chk: Object Size Checking. 51801 (line 6) 51802* __builtin___strncat_chk: Object Size Checking. 51803 (line 6) 51804* __builtin___strncpy_chk: Object Size Checking. 51805 (line 6) 51806* __builtin___vfprintf_chk: Object Size Checking. 51807 (line 6) 51808* __builtin___vprintf_chk: Object Size Checking. 51809 (line 6) 51810* __builtin___vsnprintf_chk: Object Size Checking. 51811 (line 6) 51812* __builtin___vsprintf_chk: Object Size Checking. 51813 (line 6) 51814* __builtin_add_overflow: Integer Overflow Builtins. 51815 (line 11) 51816* __builtin_apply: Constructing Calls. (line 31) 51817* __builtin_apply_args: Constructing Calls. (line 20) 51818* __builtin_arc_aligned: ARC Built-in Functions. 51819 (line 20) 51820* __builtin_arc_brk: ARC Built-in Functions. 51821 (line 29) 51822* __builtin_arc_core_read: ARC Built-in Functions. 51823 (line 34) 51824* __builtin_arc_core_write: ARC Built-in Functions. 51825 (line 41) 51826* __builtin_arc_divaw: ARC Built-in Functions. 51827 (line 47) 51828* __builtin_arc_flag: ARC Built-in Functions. 51829 (line 54) 51830* __builtin_arc_lr: ARC Built-in Functions. 51831 (line 58) 51832* __builtin_arc_mul64: ARC Built-in Functions. 51833 (line 65) 51834* __builtin_arc_mulu64: ARC Built-in Functions. 51835 (line 70) 51836* __builtin_arc_nop: ARC Built-in Functions. 51837 (line 74) 51838* __builtin_arc_norm: ARC Built-in Functions. 51839 (line 78) 51840* __builtin_arc_normw: ARC Built-in Functions. 51841 (line 85) 51842* __builtin_arc_rtie: ARC Built-in Functions. 51843 (line 92) 51844* __builtin_arc_sleep: ARC Built-in Functions. 51845 (line 96) 51846* __builtin_arc_sr: ARC Built-in Functions. 51847 (line 101) 51848* __builtin_arc_swap: ARC Built-in Functions. 51849 (line 107) 51850* __builtin_arc_swi: ARC Built-in Functions. 51851 (line 113) 51852* __builtin_arc_sync: ARC Built-in Functions. 51853 (line 117) 51854* __builtin_arc_trap_s: ARC Built-in Functions. 51855 (line 121) 51856* __builtin_arc_unimp_s: ARC Built-in Functions. 51857 (line 125) 51858* __builtin_bswap16: Other Builtins. (line 612) 51859* __builtin_bswap32: Other Builtins. (line 616) 51860* __builtin_bswap64: Other Builtins. (line 620) 51861* __builtin_call_with_static_chain: Other Builtins. (line 6) 51862* __builtin_choose_expr: Other Builtins. (line 168) 51863* __builtin_clrsb: Other Builtins. (line 542) 51864* __builtin_clrsbl: Other Builtins. (line 564) 51865* __builtin_clrsbll: Other Builtins. (line 587) 51866* __builtin_clz: Other Builtins. (line 534) 51867* __builtin_clzl: Other Builtins. (line 556) 51868* __builtin_clzll: Other Builtins. (line 579) 51869* __builtin_complex: Other Builtins. (line 208) 51870* __builtin_constant_p: Other Builtins. (line 218) 51871* __builtin_cpu_init: x86 Built-in Functions. 51872 (line 63) 51873* __builtin_cpu_is: x86 Built-in Functions. 51874 (line 92) 51875* __builtin_cpu_supports: x86 Built-in Functions. 51876 (line 164) 51877* __builtin_ctz: Other Builtins. (line 538) 51878* __builtin_ctzl: Other Builtins. (line 560) 51879* __builtin_ctzll: Other Builtins. (line 583) 51880* __builtin_expect: Other Builtins. (line 264) 51881* __builtin_extract_return_addr: Return Address. (line 36) 51882* __builtin_ffs: Other Builtins. (line 530) 51883* __builtin_ffsl: Other Builtins. (line 553) 51884* __builtin_ffsll: Other Builtins. (line 575) 51885* __builtin_FILE: Other Builtins. (line 374) 51886* __builtin_fpclassify: Other Builtins. (line 6) 51887* __builtin_frame_address: Return Address. (line 49) 51888* __builtin_frob_return_address: Return Address. (line 45) 51889* __builtin_FUNCTION: Other Builtins. (line 369) 51890* __builtin_huge_val: Other Builtins. (line 432) 51891* __builtin_huge_valf: Other Builtins. (line 437) 51892* __builtin_huge_vall: Other Builtins. (line 440) 51893* __builtin_huge_valq: x86 Built-in Functions. 51894 (line 57) 51895* __builtin_inf: Other Builtins. (line 455) 51896* __builtin_infd128: Other Builtins. (line 465) 51897* __builtin_infd32: Other Builtins. (line 459) 51898* __builtin_infd64: Other Builtins. (line 462) 51899* __builtin_inff: Other Builtins. (line 469) 51900* __builtin_infl: Other Builtins. (line 474) 51901* __builtin_infq: x86 Built-in Functions. 51902 (line 53) 51903* __builtin_isfinite: Other Builtins. (line 6) 51904* __builtin_isgreater: Other Builtins. (line 6) 51905* __builtin_isgreaterequal: Other Builtins. (line 6) 51906* __builtin_isinf_sign: Other Builtins. (line 478) 51907* __builtin_isless: Other Builtins. (line 6) 51908* __builtin_islessequal: Other Builtins. (line 6) 51909* __builtin_islessgreater: Other Builtins. (line 6) 51910* __builtin_isnormal: Other Builtins. (line 6) 51911* __builtin_isunordered: Other Builtins. (line 6) 51912* __builtin_LINE: Other Builtins. (line 363) 51913* __builtin_mul_overflow: Integer Overflow Builtins. 51914 (line 63) 51915* __builtin_nan: Other Builtins. (line 486) 51916* __builtin_nand128: Other Builtins. (line 508) 51917* __builtin_nand32: Other Builtins. (line 502) 51918* __builtin_nand64: Other Builtins. (line 505) 51919* __builtin_nanf: Other Builtins. (line 512) 51920* __builtin_nanl: Other Builtins. (line 515) 51921* __builtin_nans: Other Builtins. (line 519) 51922* __builtin_nansf: Other Builtins. (line 523) 51923* __builtin_nansl: Other Builtins. (line 526) 51924* __builtin_nds32_isb: NDS32 Built-in Functions. 51925 (line 13) 51926* __builtin_nds32_isync: NDS32 Built-in Functions. 51927 (line 9) 51928* __builtin_nds32_mfsr: NDS32 Built-in Functions. 51929 (line 16) 51930* __builtin_nds32_mfusr: NDS32 Built-in Functions. 51931 (line 19) 51932* __builtin_nds32_mtsr: NDS32 Built-in Functions. 51933 (line 22) 51934* __builtin_nds32_mtusr: NDS32 Built-in Functions. 51935 (line 25) 51936* __builtin_nds32_setgie_dis: NDS32 Built-in Functions. 51937 (line 31) 51938* __builtin_nds32_setgie_en: NDS32 Built-in Functions. 51939 (line 28) 51940* __builtin_non_tx_store: S/390 System z Built-in Functions. 51941 (line 104) 51942* __builtin_object_size: Object Size Checking. 51943 (line 11) 51944* __builtin_offsetof: Offsetof. (line 6) 51945* __builtin_parity: Other Builtins. (line 550) 51946* __builtin_parityl: Other Builtins. (line 571) 51947* __builtin_parityll: Other Builtins. (line 595) 51948* __builtin_popcount: Other Builtins. (line 547) 51949* __builtin_popcountl: Other Builtins. (line 567) 51950* __builtin_popcountll: Other Builtins. (line 591) 51951* __builtin_powi: Other Builtins. (line 599) 51952* __builtin_powif: Other Builtins. (line 6) 51953* __builtin_powil: Other Builtins. (line 6) 51954* __builtin_prefetch: Other Builtins. (line 393) 51955* __builtin_return: Constructing Calls. (line 48) 51956* __builtin_return_address: Return Address. (line 11) 51957* __builtin_rx_brk: RX Built-in Functions. 51958 (line 11) 51959* __builtin_rx_clrpsw: RX Built-in Functions. 51960 (line 14) 51961* __builtin_rx_int: RX Built-in Functions. 51962 (line 18) 51963* __builtin_rx_machi: RX Built-in Functions. 51964 (line 22) 51965* __builtin_rx_maclo: RX Built-in Functions. 51966 (line 27) 51967* __builtin_rx_mulhi: RX Built-in Functions. 51968 (line 32) 51969* __builtin_rx_mullo: RX Built-in Functions. 51970 (line 37) 51971* __builtin_rx_mvfachi: RX Built-in Functions. 51972 (line 42) 51973* __builtin_rx_mvfacmi: RX Built-in Functions. 51974 (line 46) 51975* __builtin_rx_mvfc: RX Built-in Functions. 51976 (line 50) 51977* __builtin_rx_mvtachi: RX Built-in Functions. 51978 (line 54) 51979* __builtin_rx_mvtaclo: RX Built-in Functions. 51980 (line 58) 51981* __builtin_rx_mvtc: RX Built-in Functions. 51982 (line 62) 51983* __builtin_rx_mvtipl: RX Built-in Functions. 51984 (line 66) 51985* __builtin_rx_racw: RX Built-in Functions. 51986 (line 70) 51987* __builtin_rx_revw: RX Built-in Functions. 51988 (line 74) 51989* __builtin_rx_rmpa: RX Built-in Functions. 51990 (line 79) 51991* __builtin_rx_round: RX Built-in Functions. 51992 (line 83) 51993* __builtin_rx_sat: RX Built-in Functions. 51994 (line 88) 51995* __builtin_rx_setpsw: RX Built-in Functions. 51996 (line 92) 51997* __builtin_rx_wait: RX Built-in Functions. 51998 (line 96) 51999* __builtin_sadd_overflow: Integer Overflow Builtins. 52000 (line 13) 52001* __builtin_saddl_overflow: Integer Overflow Builtins. 52002 (line 15) 52003* __builtin_saddll_overflow: Integer Overflow Builtins. 52004 (line 17) 52005* __builtin_set_thread_pointer: SH Built-in Functions. 52006 (line 10) 52007* __builtin_sh_get_fpscr: SH Built-in Functions. 52008 (line 36) 52009* __builtin_sh_set_fpscr: SH Built-in Functions. 52010 (line 39) 52011* __builtin_smul_overflow: Integer Overflow Builtins. 52012 (line 65) 52013* __builtin_smull_overflow: Integer Overflow Builtins. 52014 (line 67) 52015* __builtin_smulll_overflow: Integer Overflow Builtins. 52016 (line 69) 52017* __builtin_ssub_overflow: Integer Overflow Builtins. 52018 (line 45) 52019* __builtin_ssubl_overflow: Integer Overflow Builtins. 52020 (line 47) 52021* __builtin_ssubll_overflow: Integer Overflow Builtins. 52022 (line 49) 52023* __builtin_sub_overflow: Integer Overflow Builtins. 52024 (line 43) 52025* __builtin_tabort: S/390 System z Built-in Functions. 52026 (line 87) 52027* __builtin_tbegin: S/390 System z Built-in Functions. 52028 (line 7) 52029* __builtin_tbegin_nofloat: S/390 System z Built-in Functions. 52030 (line 59) 52031* __builtin_tbegin_retry: S/390 System z Built-in Functions. 52032 (line 65) 52033* __builtin_tbegin_retry_nofloat: S/390 System z Built-in Functions. 52034 (line 72) 52035* __builtin_tbeginc: S/390 System z Built-in Functions. 52036 (line 78) 52037* __builtin_tend: S/390 System z Built-in Functions. 52038 (line 82) 52039* __builtin_thread_pointer: SH Built-in Functions. 52040 (line 20) 52041* __builtin_trap: Other Builtins. (line 288) 52042* __builtin_tx_assist: S/390 System z Built-in Functions. 52043 (line 92) 52044* __builtin_tx_nesting_depth: S/390 System z Built-in Functions. 52045 (line 98) 52046* __builtin_types_compatible_p: Other Builtins. (line 111) 52047* __builtin_uadd_overflow: Integer Overflow Builtins. 52048 (line 19) 52049* __builtin_uaddl_overflow: Integer Overflow Builtins. 52050 (line 21) 52051* __builtin_uaddll_overflow: Integer Overflow Builtins. 52052 (line 23) 52053* __builtin_umul_overflow: Integer Overflow Builtins. 52054 (line 71) 52055* __builtin_umull_overflow: Integer Overflow Builtins. 52056 (line 73) 52057* __builtin_umulll_overflow: Integer Overflow Builtins. 52058 (line 75) 52059* __builtin_unreachable: Other Builtins. (line 295) 52060* __builtin_usub_overflow: Integer Overflow Builtins. 52061 (line 51) 52062* __builtin_usubl_overflow: Integer Overflow Builtins. 52063 (line 53) 52064* __builtin_usubll_overflow: Integer Overflow Builtins. 52065 (line 55) 52066* __builtin_va_arg_pack: Constructing Calls. (line 53) 52067* __builtin_va_arg_pack_len: Constructing Calls. (line 76) 52068* __complex__ keyword: Complex. (line 6) 52069* __declspec(dllexport): Function Attributes. 52070 (line 285) 52071* __declspec(dllimport): Function Attributes. 52072 (line 319) 52073* __ea SPU Named Address Spaces: Named Address Spaces. 52074 (line 155) 52075* __extension__: Alternate Keywords. (line 30) 52076* __far M32C Named Address Spaces: Named Address Spaces. 52077 (line 139) 52078* __far RL78 Named Address Spaces: Named Address Spaces. 52079 (line 147) 52080* __flash AVR Named Address Spaces: Named Address Spaces. 52081 (line 31) 52082* __flash1 AVR Named Address Spaces: Named Address Spaces. 52083 (line 40) 52084* __flash2 AVR Named Address Spaces: Named Address Spaces. 52085 (line 40) 52086* __flash3 AVR Named Address Spaces: Named Address Spaces. 52087 (line 40) 52088* __flash4 AVR Named Address Spaces: Named Address Spaces. 52089 (line 40) 52090* __flash5 AVR Named Address Spaces: Named Address Spaces. 52091 (line 40) 52092* __float128 data type: Floating Types. (line 6) 52093* __float80 data type: Floating Types. (line 6) 52094* __fp16 data type: Half-Precision. (line 6) 52095* __func__ identifier: Function Names. (line 6) 52096* __FUNCTION__ identifier: Function Names. (line 6) 52097* __imag__ keyword: Complex. (line 27) 52098* __int128 data types: __int128. (line 6) 52099* __memx AVR Named Address Spaces: Named Address Spaces. 52100 (line 46) 52101* __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 52102* __real__ keyword: Complex. (line 27) 52103* __STDC_HOSTED__: Standards. (line 13) 52104* __sync_add_and_fetch: __sync Builtins. (line 60) 52105* __sync_and_and_fetch: __sync Builtins. (line 60) 52106* __sync_bool_compare_and_swap: __sync Builtins. (line 71) 52107* __sync_fetch_and_add: __sync Builtins. (line 44) 52108* __sync_fetch_and_and: __sync Builtins. (line 44) 52109* __sync_fetch_and_nand: __sync Builtins. (line 44) 52110* __sync_fetch_and_or: __sync Builtins. (line 44) 52111* __sync_fetch_and_sub: __sync Builtins. (line 44) 52112* __sync_fetch_and_xor: __sync Builtins. (line 44) 52113* __sync_lock_release: __sync Builtins. (line 101) 52114* __sync_lock_test_and_set: __sync Builtins. (line 83) 52115* __sync_nand_and_fetch: __sync Builtins. (line 60) 52116* __sync_or_and_fetch: __sync Builtins. (line 60) 52117* __sync_sub_and_fetch: __sync Builtins. (line 60) 52118* __sync_synchronize: __sync Builtins. (line 80) 52119* __sync_val_compare_and_swap: __sync Builtins. (line 71) 52120* __sync_xor_and_fetch: __sync Builtins. (line 60) 52121* __thread: Thread-Local. (line 6) 52122* _Accum data type: Fixed-Point. (line 6) 52123* _Complex keyword: Complex. (line 6) 52124* _Decimal128 data type: Decimal Float. (line 6) 52125* _Decimal32 data type: Decimal Float. (line 6) 52126* _Decimal64 data type: Decimal Float. (line 6) 52127* _exit: Other Builtins. (line 6) 52128* _Exit: Other Builtins. (line 6) 52129* _Fract data type: Fixed-Point. (line 6) 52130* _HTM_FIRST_USER_ABORT_CODE: S/390 System z Built-in Functions. 52131 (line 48) 52132* _Sat data type: Fixed-Point. (line 6) 52133* _xabort: x86 transactional memory intrinsics. 52134 (line 64) 52135* _xbegin: x86 transactional memory intrinsics. 52136 (line 20) 52137* _xend: x86 transactional memory intrinsics. 52138 (line 55) 52139* _xtest: x86 transactional memory intrinsics. 52140 (line 60) 52141* AArch64 Options: AArch64 Options. (line 6) 52142* ABI: Compatibility. (line 6) 52143* abi_tag function attribute: C++ Attributes. (line 9) 52144* abi_tag type attribute: C++ Attributes. (line 9) 52145* abi_tag variable attribute: C++ Attributes. (line 9) 52146* abort: Other Builtins. (line 6) 52147* abs: Other Builtins. (line 6) 52148* accessing volatiles <1>: C++ Volatiles. (line 6) 52149* accessing volatiles: Volatiles. (line 6) 52150* acos: Other Builtins. (line 6) 52151* acosf: Other Builtins. (line 6) 52152* acosh: Other Builtins. (line 6) 52153* acoshf: Other Builtins. (line 6) 52154* acoshl: Other Builtins. (line 6) 52155* acosl: Other Builtins. (line 6) 52156* Ada: G++ and GCC. (line 6) 52157* additional floating types: Floating Types. (line 6) 52158* address constraints: Simple Constraints. (line 154) 52159* address of a label: Labels as Values. (line 6) 52160* address variable attribute, AVR: Variable Attributes. 52161 (line 375) 52162* address_operand: Simple Constraints. (line 158) 52163* alias function attribute: Function Attributes. 52164 (line 40) 52165* aligned function attribute: Function Attributes. 52166 (line 53) 52167* aligned type attribute: Type Attributes. (line 32) 52168* aligned variable attribute: Variable Attributes. 52169 (line 24) 52170* alignment: Alignment. (line 6) 52171* alloc_align function attribute: Function Attributes. 52172 (line 94) 52173* alloc_size function attribute: Function Attributes. 52174 (line 73) 52175* alloca: Other Builtins. (line 6) 52176* alloca vs variable-length arrays: Variable Length. (line 35) 52177* Allow nesting in an interrupt handler on the Blackfin processor: Function Attributes. 52178 (line 1057) 52179* Altera Nios II options: Nios II Options. (line 6) 52180* alternate keywords: Alternate Keywords. (line 6) 52181* altivec type attribute, PowerPC: Type Attributes. (line 363) 52182* altivec variable attribute, PowerPC: Variable Attributes. 52183 (line 518) 52184* always_inline function attribute: Function Attributes. 52185 (line 126) 52186* AMD1: Standards. (line 13) 52187* ANSI C: Standards. (line 13) 52188* ANSI C standard: Standards. (line 13) 52189* ANSI C89: Standards. (line 13) 52190* ANSI support: C Dialect Options. (line 10) 52191* ANSI X3.159-1989: Standards. (line 13) 52192* apostrophes: Incompatibilities. (line 116) 52193* application binary interface: Compatibility. (line 6) 52194* ARC options: ARC Options. (line 6) 52195* ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 52196 (line 6) 52197* ARM options: ARM Options. (line 6) 52198* arrays of length zero: Zero Length. (line 6) 52199* arrays of variable length: Variable Length. (line 6) 52200* arrays, non-lvalue: Subscripting. (line 6) 52201* artificial function attribute: Function Attributes. 52202 (line 174) 52203* asin: Other Builtins. (line 6) 52204* asinf: Other Builtins. (line 6) 52205* asinh: Other Builtins. (line 6) 52206* asinhf: Other Builtins. (line 6) 52207* asinhl: Other Builtins. (line 6) 52208* asinl: Other Builtins. (line 6) 52209* asm assembler template: Extended Asm. (line 219) 52210* asm clobbers: Extended Asm. (line 578) 52211* asm constraints: Constraints. (line 6) 52212* asm expressions: Extended Asm. (line 482) 52213* asm goto labels: Extended Asm. (line 648) 52214* asm input operands: Extended Asm. (line 482) 52215* asm keyword: Using Assembly Language with C. 52216 (line 6) 52217* asm output operands: Extended Asm. (line 322) 52218* asm volatile: Extended Asm. (line 109) 52219* assembler names for identifiers: Asm Labels. (line 6) 52220* assembly code, invalid: Bug Criteria. (line 12) 52221* assembly language in C: Using Assembly Language with C. 52222 (line 6) 52223* assembly language in C, basic: Basic Asm. (line 6) 52224* assembly language in C, extended: Extended Asm. (line 6) 52225* assume_aligned function attribute: Function Attributes. 52226 (line 111) 52227* atan: Other Builtins. (line 6) 52228* atan2: Other Builtins. (line 6) 52229* atan2f: Other Builtins. (line 6) 52230* atan2l: Other Builtins. (line 6) 52231* atanf: Other Builtins. (line 6) 52232* atanh: Other Builtins. (line 6) 52233* atanhf: Other Builtins. (line 6) 52234* atanhl: Other Builtins. (line 6) 52235* atanl: Other Builtins. (line 6) 52236* attribute of types: Type Attributes. (line 6) 52237* attribute of variables: Variable Attributes. 52238 (line 6) 52239* attribute syntax: Attribute Syntax. (line 6) 52240* autoincrement/decrement addressing: Simple Constraints. (line 30) 52241* automatic inline for C++ member fns: Inline. (line 71) 52242* AVR Options: AVR Options. (line 6) 52243* Backwards Compatibility: Backwards Compatibility. 52244 (line 6) 52245* bank_switch function attribute, M32C: Function Attributes. 52246 (line 181) 52247* base class members: Name lookup. (line 6) 52248* based type attribute, MeP: Type Attributes. (line 349) 52249* based variable attribute, MeP: Variable Attributes. 52250 (line 470) 52251* basic asm: Basic Asm. (line 6) 52252* bcmp: Other Builtins. (line 6) 52253* below100 variable attribute, Xstormy16: Variable Attributes. 52254 (line 656) 52255* binary compatibility: Compatibility. (line 6) 52256* Binary constants using the 0b prefix: Binary constants. (line 6) 52257* Blackfin Options: Blackfin Options. (line 6) 52258* bnd_instrument function attribute: Function Attributes. 52259 (line 1328) 52260* bnd_legacy function attribute: Function Attributes. 52261 (line 1323) 52262* bnd_variable_size type attribute: Type Attributes. (line 295) 52263* bound pointer to member function: Bound member functions. 52264 (line 6) 52265* break handler functions: Function Attributes. 52266 (line 1417) 52267* break_handler function attribute, MicroBlaze: Function Attributes. 52268 (line 1417) 52269* brk_interrupt function attribute, RL78: Function Attributes. 52270 (line 799) 52271* bug criteria: Bug Criteria. (line 6) 52272* bugs: Bugs. (line 6) 52273* bugs, known: Trouble. (line 6) 52274* built-in functions <1>: C Dialect Options. (line 213) 52275* built-in functions: Other Builtins. (line 6) 52276* bzero: Other Builtins. (line 6) 52277* C compilation options: Invoking GCC. (line 17) 52278* C intermediate output, nonexistent: G++ and GCC. (line 35) 52279* C language extensions: C Extensions. (line 6) 52280* C language, traditional: C Dialect Options. (line 344) 52281* C standard: Standards. (line 13) 52282* C standards: Standards. (line 13) 52283* c++: Invoking G++. (line 14) 52284* C++: G++ and GCC. (line 30) 52285* C++ comments: C++ Comments. (line 6) 52286* C++ compilation options: Invoking GCC. (line 23) 52287* C++ interface and implementation headers: C++ Interface. (line 6) 52288* C++ language extensions: C++ Extensions. (line 6) 52289* C++ member fns, automatically inline: Inline. (line 71) 52290* C++ misunderstandings: C++ Misunderstandings. 52291 (line 6) 52292* C++ options, command-line: C++ Dialect Options. 52293 (line 6) 52294* C++ pragmas, effect on inlining: C++ Interface. (line 57) 52295* C++ source file suffixes: Invoking G++. (line 6) 52296* C++ static data, declaring and defining: Static Definitions. 52297 (line 6) 52298* C11: Standards. (line 13) 52299* C1X: Standards. (line 13) 52300* C6X Options: C6X Options. (line 6) 52301* C89: Standards. (line 13) 52302* C90: Standards. (line 13) 52303* C94: Standards. (line 13) 52304* C95: Standards. (line 13) 52305* C99: Standards. (line 13) 52306* C9X: Standards. (line 13) 52307* C_INCLUDE_PATH: Environment Variables. 52308 (line 130) 52309* cabs: Other Builtins. (line 6) 52310* cabsf: Other Builtins. (line 6) 52311* cabsl: Other Builtins. (line 6) 52312* cacos: Other Builtins. (line 6) 52313* cacosf: Other Builtins. (line 6) 52314* cacosh: Other Builtins. (line 6) 52315* cacoshf: Other Builtins. (line 6) 52316* cacoshl: Other Builtins. (line 6) 52317* cacosl: Other Builtins. (line 6) 52318* callee_pop_aggregate_return function attribute, x86: Function Attributes. 52319 (line 1012) 52320* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes. 52321 (line 538) 52322* calloc: Other Builtins. (line 6) 52323* caret: Multi-Alternative. (line 38) 52324* caret GCC_COLORS capability: Language Independent Options. 52325 (line 78) 52326* carg: Other Builtins. (line 6) 52327* cargf: Other Builtins. (line 6) 52328* cargl: Other Builtins. (line 6) 52329* case labels in initializers: Designated Inits. (line 6) 52330* case ranges: Case Ranges. (line 6) 52331* casin: Other Builtins. (line 6) 52332* casinf: Other Builtins. (line 6) 52333* casinh: Other Builtins. (line 6) 52334* casinhf: Other Builtins. (line 6) 52335* casinhl: Other Builtins. (line 6) 52336* casinl: Other Builtins. (line 6) 52337* cast to a union: Cast to Union. (line 6) 52338* catan: Other Builtins. (line 6) 52339* catanf: Other Builtins. (line 6) 52340* catanh: Other Builtins. (line 6) 52341* catanhf: Other Builtins. (line 6) 52342* catanhl: Other Builtins. (line 6) 52343* catanl: Other Builtins. (line 6) 52344* cb variable attribute, MeP: Variable Attributes. 52345 (line 502) 52346* cbrt: Other Builtins. (line 6) 52347* cbrtf: Other Builtins. (line 6) 52348* cbrtl: Other Builtins. (line 6) 52349* ccos: Other Builtins. (line 6) 52350* ccosf: Other Builtins. (line 6) 52351* ccosh: Other Builtins. (line 6) 52352* ccoshf: Other Builtins. (line 6) 52353* ccoshl: Other Builtins. (line 6) 52354* ccosl: Other Builtins. (line 6) 52355* cdecl function attribute, x86-32: Function Attributes. 52356 (line 217) 52357* ceil: Other Builtins. (line 6) 52358* ceilf: Other Builtins. (line 6) 52359* ceill: Other Builtins. (line 6) 52360* cexp: Other Builtins. (line 6) 52361* cexpf: Other Builtins. (line 6) 52362* cexpl: Other Builtins. (line 6) 52363* character set, execution: Preprocessor Options. 52364 (line 564) 52365* character set, input: Preprocessor Options. 52366 (line 577) 52367* character set, input normalization: Warning Options. (line 1481) 52368* character set, wide execution: Preprocessor Options. 52369 (line 569) 52370* cimag: Other Builtins. (line 6) 52371* cimagf: Other Builtins. (line 6) 52372* cimagl: Other Builtins. (line 6) 52373* cleanup variable attribute: Variable Attributes. 52374 (line 90) 52375* clog: Other Builtins. (line 6) 52376* clogf: Other Builtins. (line 6) 52377* clogl: Other Builtins. (line 6) 52378* COBOL: G++ and GCC. (line 23) 52379* code generation conventions: Code Gen Options. (line 6) 52380* code, mixed with declarations: Mixed Declarations. (line 6) 52381* cold function attribute: Function Attributes. 52382 (line 1287) 52383* cold label attribute: Label Attributes. (line 43) 52384* command options: Invoking GCC. (line 6) 52385* comments, C++ style: C++ Comments. (line 6) 52386* common variable attribute: Variable Attributes. 52387 (line 106) 52388* comparison of signed and unsigned values, warning: Warning Options. 52389 (line 1299) 52390* compiler bugs, reporting: Bug Reporting. (line 6) 52391* compiler compared to C++ preprocessor: G++ and GCC. (line 35) 52392* compiler options, C++: C++ Dialect Options. 52393 (line 6) 52394* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 52395 (line 6) 52396* compiler version, specifying: Target Options. (line 6) 52397* COMPILER_PATH: Environment Variables. 52398 (line 91) 52399* complex conjugation: Complex. (line 34) 52400* complex numbers: Complex. (line 6) 52401* compound literals: Compound Literals. (line 6) 52402* computed gotos: Labels as Values. (line 6) 52403* conditional expressions, extensions: Conditionals. (line 6) 52404* conflicting types: Disappointments. (line 21) 52405* conj: Other Builtins. (line 6) 52406* conjf: Other Builtins. (line 6) 52407* conjl: Other Builtins. (line 6) 52408* const applied to function: Function Attributes. 52409 (line 6) 52410* const function attribute: Function Attributes. 52411 (line 223) 52412* const qualifier: Pointers to Arrays. (line 6) 52413* constants in constraints: Simple Constraints. (line 70) 52414* constraint modifier characters: Modifiers. (line 6) 52415* constraint, matching: Simple Constraints. (line 139) 52416* constraints, asm: Constraints. (line 6) 52417* constraints, machine specific: Machine Constraints. 52418 (line 6) 52419* constructing calls: Constructing Calls. (line 6) 52420* constructor expressions: Compound Literals. (line 6) 52421* constructor function attribute: Function Attributes. 52422 (line 238) 52423* contributors: Contributors. (line 6) 52424* copysign: Other Builtins. (line 6) 52425* copysignf: Other Builtins. (line 6) 52426* copysignl: Other Builtins. (line 6) 52427* core dump: Bug Criteria. (line 9) 52428* cos: Other Builtins. (line 6) 52429* cosf: Other Builtins. (line 6) 52430* cosh: Other Builtins. (line 6) 52431* coshf: Other Builtins. (line 6) 52432* coshl: Other Builtins. (line 6) 52433* cosl: Other Builtins. (line 6) 52434* CPATH: Environment Variables. 52435 (line 129) 52436* CPLUS_INCLUDE_PATH: Environment Variables. 52437 (line 131) 52438* cpow: Other Builtins. (line 6) 52439* cpowf: Other Builtins. (line 6) 52440* cpowl: Other Builtins. (line 6) 52441* CPP_RESTRICTED: Environment Variables. 52442 (line 178) 52443* cproj: Other Builtins. (line 6) 52444* cprojf: Other Builtins. (line 6) 52445* cprojl: Other Builtins. (line 6) 52446* CR16 Options: CR16 Options. (line 6) 52447* creal: Other Builtins. (line 6) 52448* crealf: Other Builtins. (line 6) 52449* creall: Other Builtins. (line 6) 52450* CRIS Options: CRIS Options. (line 6) 52451* critical function attribute, MSP430: Function Attributes. 52452 (line 692) 52453* cross compiling: Target Options. (line 6) 52454* csin: Other Builtins. (line 6) 52455* csinf: Other Builtins. (line 6) 52456* csinh: Other Builtins. (line 6) 52457* csinhf: Other Builtins. (line 6) 52458* csinhl: Other Builtins. (line 6) 52459* csinl: Other Builtins. (line 6) 52460* csqrt: Other Builtins. (line 6) 52461* csqrtf: Other Builtins. (line 6) 52462* csqrtl: Other Builtins. (line 6) 52463* ctan: Other Builtins. (line 6) 52464* ctanf: Other Builtins. (line 6) 52465* ctanh: Other Builtins. (line 6) 52466* ctanhf: Other Builtins. (line 6) 52467* ctanhl: Other Builtins. (line 6) 52468* ctanl: Other Builtins. (line 6) 52469* Darwin options: Darwin Options. (line 6) 52470* dcgettext: Other Builtins. (line 6) 52471* dd integer suffix: Decimal Float. (line 6) 52472* DD integer suffix: Decimal Float. (line 6) 52473* deallocating variable length arrays: Variable Length. (line 22) 52474* debugging information options: Debugging Options. (line 6) 52475* decimal floating types: Decimal Float. (line 6) 52476* declaration scope: Incompatibilities. (line 80) 52477* declarations inside expressions: Statement Exprs. (line 6) 52478* declarations, mixed with code: Mixed Declarations. (line 6) 52479* declaring attributes of functions: Function Attributes. 52480 (line 6) 52481* declaring static data in C++: Static Definitions. (line 6) 52482* defining static data in C++: Static Definitions. (line 6) 52483* dependencies for make as output: Environment Variables. 52484 (line 157) 52485* dependencies, make: Preprocessor Options. 52486 (line 185) 52487* DEPENDENCIES_OUTPUT: Environment Variables. 52488 (line 156) 52489* dependent name lookup: Name lookup. (line 6) 52490* deprecated function attribute: Function Attributes. 52491 (line 260) 52492* deprecated type attribute: Type Attributes. (line 205) 52493* deprecated variable attribute: Variable Attributes. 52494 (line 115) 52495* designated initializers: Designated Inits. (line 6) 52496* designated_init type attribute: Type Attributes. (line 283) 52497* designator lists: Designated Inits. (line 97) 52498* designators: Designated Inits. (line 64) 52499* destructor function attribute: Function Attributes. 52500 (line 238) 52501* DF integer suffix: Decimal Float. (line 6) 52502* df integer suffix: Decimal Float. (line 6) 52503* dgettext: Other Builtins. (line 6) 52504* diagnostic messages: Language Independent Options. 52505 (line 6) 52506* dialect options: C Dialect Options. (line 6) 52507* digits in constraint: Simple Constraints. (line 127) 52508* directory options: Directory Options. (line 6) 52509* disinterrupt function attribute, Epiphany: Function Attributes. 52510 (line 280) 52511* disinterrupt function attribute, MeP: Function Attributes. 52512 (line 280) 52513* DL integer suffix: Decimal Float. (line 6) 52514* dl integer suffix: Decimal Float. (line 6) 52515* dllexport function attribute: Function Attributes. 52516 (line 285) 52517* dllexport variable attribute: Variable Attributes. 52518 (line 311) 52519* dllimport function attribute: Function Attributes. 52520 (line 319) 52521* dllimport variable attribute: Variable Attributes. 52522 (line 307) 52523* dollar sign: Multi-Alternative. (line 42) 52524* dollar signs in identifier names: Dollar Signs. (line 6) 52525* double-word arithmetic: Long Long. (line 6) 52526* downward funargs: Nested Functions. (line 6) 52527* drem: Other Builtins. (line 6) 52528* dremf: Other Builtins. (line 6) 52529* dreml: Other Builtins. (line 6) 52530* E in constraint: Simple Constraints. (line 89) 52531* earlyclobber operand: Modifiers. (line 25) 52532* eight-bit data on the H8/300, H8/300H, and H8S: Variable Attributes. 52533 (line 408) 52534* eightbit_data variable attribute, H8/300: Variable Attributes. 52535 (line 408) 52536* EIND: AVR Options. (line 242) 52537* empty structures: Empty Structures. (line 6) 52538* Enable Cilk Plus: C Dialect Options. (line 288) 52539* environment variables: Environment Variables. 52540 (line 6) 52541* erf: Other Builtins. (line 6) 52542* erfc: Other Builtins. (line 6) 52543* erfcf: Other Builtins. (line 6) 52544* erfcl: Other Builtins. (line 6) 52545* erff: Other Builtins. (line 6) 52546* erfl: Other Builtins. (line 6) 52547* error function attribute: Function Attributes. 52548 (line 193) 52549* error GCC_COLORS capability: Language Independent Options. 52550 (line 69) 52551* error messages: Warnings and Errors. 52552 (line 6) 52553* escaped newlines: Escaped Newlines. (line 6) 52554* exception function attribute: Function Attributes. 52555 (line 371) 52556* exception handler functions, Blackfin: Function Attributes. 52557 (line 376) 52558* exception handler functions, NDS32: Function Attributes. 52559 (line 371) 52560* exception_handler function attribute: Function Attributes. 52561 (line 376) 52562* exclamation point: Multi-Alternative. (line 33) 52563* exit: Other Builtins. (line 6) 52564* exp: Other Builtins. (line 6) 52565* exp10: Other Builtins. (line 6) 52566* exp10f: Other Builtins. (line 6) 52567* exp10l: Other Builtins. (line 6) 52568* exp2: Other Builtins. (line 6) 52569* exp2f: Other Builtins. (line 6) 52570* exp2l: Other Builtins. (line 6) 52571* expf: Other Builtins. (line 6) 52572* expl: Other Builtins. (line 6) 52573* explicit register variables: Explicit Reg Vars. (line 6) 52574* expm1: Other Builtins. (line 6) 52575* expm1f: Other Builtins. (line 6) 52576* expm1l: Other Builtins. (line 6) 52577* expressions containing statements: Statement Exprs. (line 6) 52578* expressions, constructor: Compound Literals. (line 6) 52579* extended asm: Extended Asm. (line 6) 52580* extensible constraints: Simple Constraints. (line 163) 52581* extensions, ?:: Conditionals. (line 6) 52582* extensions, C language: C Extensions. (line 6) 52583* extensions, C++ language: C++ Extensions. (line 6) 52584* external declaration scope: Incompatibilities. (line 80) 52585* externally_visible function attribute: Function Attributes. 52586 (line 382) 52587* F in constraint: Simple Constraints. (line 94) 52588* fabs: Other Builtins. (line 6) 52589* fabsf: Other Builtins. (line 6) 52590* fabsl: Other Builtins. (line 6) 52591* far function attribute: Function Attributes. 52592 (line 395) 52593* far function attribute, MIPS: Function Attributes. 52594 (line 925) 52595* far type attribute, MeP: Type Attributes. (line 349) 52596* far variable attribute, MeP: Variable Attributes. 52597 (line 485) 52598* fast_interrupt function attribute, M32C: Function Attributes. 52599 (line 400) 52600* fast_interrupt function attribute, RX: Function Attributes. 52601 (line 400) 52602* fastcall function attribute, x86-32: Function Attributes. 52603 (line 406) 52604* fatal signal: Bug Criteria. (line 9) 52605* fdim: Other Builtins. (line 6) 52606* fdimf: Other Builtins. (line 6) 52607* fdiml: Other Builtins. (line 6) 52608* FDL, GNU Free Documentation License: GNU Free Documentation License. 52609 (line 6) 52610* ffs: Other Builtins. (line 6) 52611* file name suffix: Overall Options. (line 14) 52612* file names: Link Options. (line 10) 52613* fixed-point types: Fixed-Point. (line 6) 52614* flatten function attribute: Function Attributes. 52615 (line 186) 52616* flexible array members: Zero Length. (line 6) 52617* float as function value type: Incompatibilities. (line 141) 52618* floating point precision: Disappointments. (line 68) 52619* floating-point precision: Optimize Options. (line 2043) 52620* floor: Other Builtins. (line 6) 52621* floorf: Other Builtins. (line 6) 52622* floorl: Other Builtins. (line 6) 52623* fma: Other Builtins. (line 6) 52624* fmaf: Other Builtins. (line 6) 52625* fmal: Other Builtins. (line 6) 52626* fmax: Other Builtins. (line 6) 52627* fmaxf: Other Builtins. (line 6) 52628* fmaxl: Other Builtins. (line 6) 52629* fmin: Other Builtins. (line 6) 52630* fminf: Other Builtins. (line 6) 52631* fminl: Other Builtins. (line 6) 52632* fmod: Other Builtins. (line 6) 52633* fmodf: Other Builtins. (line 6) 52634* fmodl: Other Builtins. (line 6) 52635* force_align_arg_pointer function attribute, x86: Function Attributes. 52636 (line 1369) 52637* format function attribute: Function Attributes. 52638 (line 425) 52639* format_arg function attribute: Function Attributes. 52640 (line 491) 52641* Fortran: G++ and GCC. (line 6) 52642* forwarder_section function attribute, Epiphany: Function Attributes. 52643 (line 730) 52644* forwarding calls: Constructing Calls. (line 6) 52645* fprintf: Other Builtins. (line 6) 52646* fprintf_unlocked: Other Builtins. (line 6) 52647* fputs: Other Builtins. (line 6) 52648* fputs_unlocked: Other Builtins. (line 6) 52649* FR30 Options: FR30 Options. (line 6) 52650* freestanding environment: Standards. (line 13) 52651* freestanding implementation: Standards. (line 13) 52652* frexp: Other Builtins. (line 6) 52653* frexpf: Other Builtins. (line 6) 52654* frexpl: Other Builtins. (line 6) 52655* FRV Options: FRV Options. (line 6) 52656* fscanf: Other Builtins. (line 6) 52657* fscanf, and constant strings: Incompatibilities. (line 17) 52658* function addressability on the M32R/D: Function Attributes. 52659 (line 979) 52660* function attributes: Function Attributes. 52661 (line 6) 52662* function pointers, arithmetic: Pointer Arith. (line 6) 52663* function prototype declarations: Function Prototypes. 52664 (line 6) 52665* function versions: Function Multiversioning. 52666 (line 6) 52667* function without prologue/epilogue code: Function Attributes. 52668 (line 1041) 52669* function, size of pointer to: Pointer Arith. (line 6) 52670* function_vector function attribute, H8/300: Function Attributes. 52671 (line 538) 52672* function_vector function attribute, M16C/M32C: Function Attributes. 52673 (line 538) 52674* function_vector function attribute, SH: Function Attributes. 52675 (line 538) 52676* functions in arbitrary sections: Function Attributes. 52677 (line 6) 52678* functions that are dynamically resolved: Function Attributes. 52679 (line 6) 52680* functions that are passed arguments in registers on x86-32: Function Attributes. 52681 (line 6) 52682* functions that behave like malloc: Function Attributes. 52683 (line 6) 52684* functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 52685 (line 1052) 52686* functions that do not pop the argument stack on x86-32: Function Attributes. 52687 (line 6) 52688* functions that do pop the argument stack on x86-32: Function Attributes. 52689 (line 217) 52690* functions that have different compilation options on x86-32: Function Attributes. 52691 (line 6) 52692* functions that have different optimization options: Function Attributes. 52693 (line 6) 52694* functions that have no side effects: Function Attributes. 52695 (line 6) 52696* functions that never return: Function Attributes. 52697 (line 6) 52698* functions that pop the argument stack on x86-32: Function Attributes. 52699 (line 6) 52700* functions that return more than once: Function Attributes. 52701 (line 6) 52702* functions with non-null pointer arguments: Function Attributes. 52703 (line 6) 52704* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 52705 (line 6) 52706* g in constraint: Simple Constraints. (line 120) 52707* G in constraint: Simple Constraints. (line 98) 52708* G++: G++ and GCC. (line 30) 52709* g++: Invoking G++. (line 14) 52710* gamma: Other Builtins. (line 6) 52711* gamma_r: Other Builtins. (line 6) 52712* gammaf: Other Builtins. (line 6) 52713* gammaf_r: Other Builtins. (line 6) 52714* gammal: Other Builtins. (line 6) 52715* gammal_r: Other Builtins. (line 6) 52716* GCC: G++ and GCC. (line 6) 52717* GCC command options: Invoking GCC. (line 6) 52718* GCC_COLORS environment variable: Language Independent Options. 52719 (line 35) 52720* GCC_COMPARE_DEBUG: Environment Variables. 52721 (line 52) 52722* GCC_EXEC_PREFIX: Environment Variables. 52723 (line 57) 52724* gcc_struct type attribute, PowerPC: Type Attributes. (line 360) 52725* gcc_struct type attribute, x86: Type Attributes. (line 392) 52726* gcc_struct variable attribute, PowerPC: Variable Attributes. 52727 (line 515) 52728* gcc_struct variable attribute, x86: Variable Attributes. 52729 (line 536) 52730* gcov: Debugging Options. (line 723) 52731* gettext: Other Builtins. (line 6) 52732* global offset table: Code Gen Options. (line 280) 52733* global register after longjmp: Global Reg Vars. (line 65) 52734* global register variables: Global Reg Vars. (line 6) 52735* GNAT: G++ and GCC. (line 30) 52736* GNU C Compiler: G++ and GCC. (line 6) 52737* GNU Compiler Collection: G++ and GCC. (line 6) 52738* gnu_inline function attribute: Function Attributes. 52739 (line 136) 52740* Go: G++ and GCC. (line 6) 52741* goto with computed label: Labels as Values. (line 6) 52742* gprof: Debugging Options. (line 645) 52743* grouping options: Invoking GCC. (line 26) 52744* H in constraint: Simple Constraints. (line 98) 52745* half-precision floating point: Half-Precision. (line 6) 52746* hardware models and configurations, specifying: Submodel Options. 52747 (line 6) 52748* hex floats: Hex Floats. (line 6) 52749* highlight, color, colour: Language Independent Options. 52750 (line 35) 52751* HK fixed-suffix: Fixed-Point. (line 6) 52752* hk fixed-suffix: Fixed-Point. (line 6) 52753* hosted environment <1>: C Dialect Options. (line 254) 52754* hosted environment <2>: Standards. (line 13) 52755* hosted environment: C Dialect Options. (line 247) 52756* hosted implementation: Standards. (line 13) 52757* hot function attribute: Function Attributes. 52758 (line 1277) 52759* hot label attribute: Label Attributes. (line 36) 52760* hotpatch function attribute, S/390: Function Attributes. 52761 (line 1029) 52762* HPPA Options: HPPA Options. (line 6) 52763* hr fixed-suffix: Fixed-Point. (line 6) 52764* HR fixed-suffix: Fixed-Point. (line 6) 52765* hypot: Other Builtins. (line 6) 52766* hypotf: Other Builtins. (line 6) 52767* hypotl: Other Builtins. (line 6) 52768* I in constraint: Simple Constraints. (line 81) 52769* i in constraint: Simple Constraints. (line 70) 52770* IA-64 Options: IA-64 Options. (line 6) 52771* IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 52772 (line 6) 52773* identifier names, dollar signs in: Dollar Signs. (line 6) 52774* identifiers, names in assembler code: Asm Labels. (line 6) 52775* ifunc function attribute: Function Attributes. 52776 (line 599) 52777* ilogb: Other Builtins. (line 6) 52778* ilogbf: Other Builtins. (line 6) 52779* ilogbl: Other Builtins. (line 6) 52780* imaxabs: Other Builtins. (line 6) 52781* implementation-defined behavior, C language: C Implementation. 52782 (line 6) 52783* implementation-defined behavior, C++ language: C++ Implementation. 52784 (line 6) 52785* implied #pragma implementation: C++ Interface. (line 43) 52786* incompatibilities of GCC: Incompatibilities. (line 6) 52787* increment operators: Bug Criteria. (line 17) 52788* index: Other Builtins. (line 6) 52789* indirect calls, ARC: Function Attributes. 52790 (line 887) 52791* indirect calls, ARM: Function Attributes. 52792 (line 887) 52793* indirect calls, Blackfin: Function Attributes. 52794 (line 911) 52795* indirect calls, Epiphany: Function Attributes. 52796 (line 887) 52797* indirect calls, MIPS: Function Attributes. 52798 (line 925) 52799* indirect calls, PowerPC: Function Attributes. 52800 (line 911) 52801* init_priority variable attribute: C++ Attributes. (line 50) 52802* initializations in expressions: Compound Literals. (line 6) 52803* initializers with labeled elements: Designated Inits. (line 6) 52804* initializers, non-constant: Initializers. (line 6) 52805* inline assembly language: Using Assembly Language with C. 52806 (line 6) 52807* inline automatic for C++ member fns: Inline. (line 71) 52808* inline functions: Inline. (line 6) 52809* inline functions, omission of: Inline. (line 51) 52810* inlining and C++ pragmas: C++ Interface. (line 57) 52811* installation trouble: Trouble. (line 6) 52812* integrating function code: Inline. (line 6) 52813* interface and implementation headers, C++: C++ Interface. (line 6) 52814* intermediate C version, nonexistent: G++ and GCC. (line 35) 52815* interrupt function attribute, ARC: Function Attributes. 52816 (line 639) 52817* interrupt function attribute, ARM: Function Attributes. 52818 (line 639) 52819* interrupt function attribute, AVR: Function Attributes. 52820 (line 639) 52821* interrupt function attribute, CR16: Function Attributes. 52822 (line 639) 52823* interrupt function attribute, Epiphany: Function Attributes. 52824 (line 639) 52825* interrupt function attribute, M32C: Function Attributes. 52826 (line 639) 52827* interrupt function attribute, M32R/D: Function Attributes. 52828 (line 639) 52829* interrupt function attribute, m68k: Function Attributes. 52830 (line 639) 52831* interrupt function attribute, MeP: Function Attributes. 52832 (line 639) 52833* interrupt function attribute, MIPS: Function Attributes. 52834 (line 639) 52835* interrupt function attribute, MSP430: Function Attributes. 52836 (line 639) 52837* interrupt function attribute, NDS32: Function Attributes. 52838 (line 639) 52839* interrupt function attribute, RL78: Function Attributes. 52840 (line 639) 52841* interrupt function attribute, RX: Function Attributes. 52842 (line 639) 52843* interrupt function attribute, Visium: Function Attributes. 52844 (line 639) 52845* interrupt function attribute, Xstormy16: Function Attributes. 52846 (line 639) 52847* interrupt_handler function attribute, Blackfin: Function Attributes. 52848 (line 822) 52849* interrupt_handler function attribute, H8/300: Function Attributes. 52850 (line 822) 52851* interrupt_handler function attribute, m68k: Function Attributes. 52852 (line 822) 52853* interrupt_handler function attribute, SH: Function Attributes. 52854 (line 822) 52855* interrupt_thread function attribute, fido: Function Attributes. 52856 (line 829) 52857* introduction: Top. (line 6) 52858* invalid assembly code: Bug Criteria. (line 12) 52859* invalid input: Bug Criteria. (line 42) 52860* invoking g++: Invoking G++. (line 22) 52861* io variable attribute, AVR: Variable Attributes. 52862 (line 351) 52863* io variable attribute, MeP: Variable Attributes. 52864 (line 491) 52865* io_low variable attribute, AVR: Variable Attributes. 52866 (line 369) 52867* isalnum: Other Builtins. (line 6) 52868* isalpha: Other Builtins. (line 6) 52869* isascii: Other Builtins. (line 6) 52870* isblank: Other Builtins. (line 6) 52871* iscntrl: Other Builtins. (line 6) 52872* isdigit: Other Builtins. (line 6) 52873* isgraph: Other Builtins. (line 6) 52874* islower: Other Builtins. (line 6) 52875* ISO 9899: Standards. (line 13) 52876* ISO C: Standards. (line 13) 52877* ISO C standard: Standards. (line 13) 52878* ISO C11: Standards. (line 13) 52879* ISO C1X: Standards. (line 13) 52880* ISO C90: Standards. (line 13) 52881* ISO C94: Standards. (line 13) 52882* ISO C95: Standards. (line 13) 52883* ISO C99: Standards. (line 13) 52884* ISO C9X: Standards. (line 13) 52885* ISO support: C Dialect Options. (line 10) 52886* ISO/IEC 9899: Standards. (line 13) 52887* isprint: Other Builtins. (line 6) 52888* ispunct: Other Builtins. (line 6) 52889* isr function attribute, ARM: Function Attributes. 52890 (line 837) 52891* isspace: Other Builtins. (line 6) 52892* isupper: Other Builtins. (line 6) 52893* iswalnum: Other Builtins. (line 6) 52894* iswalpha: Other Builtins. (line 6) 52895* iswblank: Other Builtins. (line 6) 52896* iswcntrl: Other Builtins. (line 6) 52897* iswdigit: Other Builtins. (line 6) 52898* iswgraph: Other Builtins. (line 6) 52899* iswlower: Other Builtins. (line 6) 52900* iswprint: Other Builtins. (line 6) 52901* iswpunct: Other Builtins. (line 6) 52902* iswspace: Other Builtins. (line 6) 52903* iswupper: Other Builtins. (line 6) 52904* iswxdigit: Other Builtins. (line 6) 52905* isxdigit: Other Builtins. (line 6) 52906* j0: Other Builtins. (line 6) 52907* j0f: Other Builtins. (line 6) 52908* j0l: Other Builtins. (line 6) 52909* j1: Other Builtins. (line 6) 52910* j1f: Other Builtins. (line 6) 52911* j1l: Other Builtins. (line 6) 52912* Java: G++ and GCC. (line 6) 52913* java_interface type attribute: C++ Attributes. (line 70) 52914* jn: Other Builtins. (line 6) 52915* jnf: Other Builtins. (line 6) 52916* jnl: Other Builtins. (line 6) 52917* k fixed-suffix: Fixed-Point. (line 6) 52918* K fixed-suffix: Fixed-Point. (line 6) 52919* keep_interrupts_masked function attribute, MIPS: Function Attributes. 52920 (line 752) 52921* keywords, alternate: Alternate Keywords. (line 6) 52922* known causes of trouble: Trouble. (line 6) 52923* kspisusp function attribute, Blackfin: Function Attributes. 52924 (line 841) 52925* l1_data variable attribute, Blackfin: Variable Attributes. 52926 (line 390) 52927* l1_data_A variable attribute, Blackfin: Variable Attributes. 52928 (line 390) 52929* l1_data_B variable attribute, Blackfin: Variable Attributes. 52930 (line 390) 52931* l1_text function attribute, Blackfin: Function Attributes. 52932 (line 846) 52933* l2 function attribute, Blackfin: Function Attributes. 52934 (line 852) 52935* l2 variable attribute, Blackfin: Variable Attributes. 52936 (line 398) 52937* Label Attributes: Label Attributes. (line 6) 52938* labeled elements in initializers: Designated Inits. (line 6) 52939* labels as values: Labels as Values. (line 6) 52940* labs: Other Builtins. (line 6) 52941* LANG: Environment Variables. 52942 (line 106) 52943* language dialect options: C Dialect Options. (line 6) 52944* LC_ALL: Environment Variables. 52945 (line 21) 52946* LC_CTYPE: Environment Variables. 52947 (line 21) 52948* LC_MESSAGES: Environment Variables. 52949 (line 21) 52950* ldexp: Other Builtins. (line 6) 52951* ldexpf: Other Builtins. (line 6) 52952* ldexpl: Other Builtins. (line 6) 52953* leaf function attribute: Function Attributes. 52954 (line 858) 52955* length-zero arrays: Zero Length. (line 6) 52956* lgamma: Other Builtins. (line 6) 52957* lgamma_r: Other Builtins. (line 6) 52958* lgammaf: Other Builtins. (line 6) 52959* lgammaf_r: Other Builtins. (line 6) 52960* lgammal: Other Builtins. (line 6) 52961* lgammal_r: Other Builtins. (line 6) 52962* Libraries: Link Options. (line 30) 52963* LIBRARY_PATH: Environment Variables. 52964 (line 97) 52965* link options: Link Options. (line 6) 52966* linker script: Link Options. (line 242) 52967* LK fixed-suffix: Fixed-Point. (line 6) 52968* lk fixed-suffix: Fixed-Point. (line 6) 52969* LL integer suffix: Long Long. (line 6) 52970* llabs: Other Builtins. (line 6) 52971* llk fixed-suffix: Fixed-Point. (line 6) 52972* LLK fixed-suffix: Fixed-Point. (line 6) 52973* LLR fixed-suffix: Fixed-Point. (line 6) 52974* llr fixed-suffix: Fixed-Point. (line 6) 52975* llrint: Other Builtins. (line 6) 52976* llrintf: Other Builtins. (line 6) 52977* llrintl: Other Builtins. (line 6) 52978* llround: Other Builtins. (line 6) 52979* llroundf: Other Builtins. (line 6) 52980* llroundl: Other Builtins. (line 6) 52981* LM32 options: LM32 Options. (line 6) 52982* load address instruction: Simple Constraints. (line 154) 52983* local labels: Local Labels. (line 6) 52984* local variables in macros: Typeof. (line 46) 52985* local variables, specifying registers: Local Reg Vars. (line 6) 52986* locale: Environment Variables. 52987 (line 21) 52988* locale definition: Environment Variables. 52989 (line 106) 52990* locus GCC_COLORS capability: Language Independent Options. 52991 (line 81) 52992* log: Other Builtins. (line 6) 52993* log10: Other Builtins. (line 6) 52994* log10f: Other Builtins. (line 6) 52995* log10l: Other Builtins. (line 6) 52996* log1p: Other Builtins. (line 6) 52997* log1pf: Other Builtins. (line 6) 52998* log1pl: Other Builtins. (line 6) 52999* log2: Other Builtins. (line 6) 53000* log2f: Other Builtins. (line 6) 53001* log2l: Other Builtins. (line 6) 53002* logb: Other Builtins. (line 6) 53003* logbf: Other Builtins. (line 6) 53004* logbl: Other Builtins. (line 6) 53005* logf: Other Builtins. (line 6) 53006* logl: Other Builtins. (line 6) 53007* long long data types: Long Long. (line 6) 53008* long_call function attribute, ARC: Function Attributes. 53009 (line 887) 53010* long_call function attribute, ARM: Function Attributes. 53011 (line 887) 53012* long_call function attribute, Epiphany: Function Attributes. 53013 (line 887) 53014* long_call function attribute, MIPS: Function Attributes. 53015 (line 925) 53016* longcall function attribute, Blackfin: Function Attributes. 53017 (line 911) 53018* longcall function attribute, PowerPC: Function Attributes. 53019 (line 911) 53020* longjmp: Global Reg Vars. (line 65) 53021* longjmp incompatibilities: Incompatibilities. (line 39) 53022* longjmp warnings: Warning Options. (line 712) 53023* lr fixed-suffix: Fixed-Point. (line 6) 53024* LR fixed-suffix: Fixed-Point. (line 6) 53025* lrint: Other Builtins. (line 6) 53026* lrintf: Other Builtins. (line 6) 53027* lrintl: Other Builtins. (line 6) 53028* lround: Other Builtins. (line 6) 53029* lroundf: Other Builtins. (line 6) 53030* lroundl: Other Builtins. (line 6) 53031* m in constraint: Simple Constraints. (line 17) 53032* M32C options: M32C Options. (line 6) 53033* M32R/D options: M32R/D Options. (line 6) 53034* M680x0 options: M680x0 Options. (line 6) 53035* machine dependent options: Submodel Options. (line 6) 53036* machine specific constraints: Machine Constraints. 53037 (line 6) 53038* macro with variable arguments: Variadic Macros. (line 6) 53039* macros, inline alternative: Inline. (line 6) 53040* macros, local labels: Local Labels. (line 6) 53041* macros, local variables in: Typeof. (line 46) 53042* macros, statements in expressions: Statement Exprs. (line 6) 53043* macros, types of arguments: Typeof. (line 6) 53044* make: Preprocessor Options. 53045 (line 185) 53046* malloc: Other Builtins. (line 6) 53047* malloc function attribute: Function Attributes. 53048 (line 935) 53049* matching constraint: Simple Constraints. (line 139) 53050* may_alias type attribute: Type Attributes. (line 233) 53051* MCore options: MCore Options. (line 6) 53052* medium_call function attribute, ARC: Function Attributes. 53053 (line 887) 53054* member fns, automatically inline: Inline. (line 71) 53055* memchr: Other Builtins. (line 6) 53056* memcmp: Other Builtins. (line 6) 53057* memcpy: Other Builtins. (line 6) 53058* memory references in constraints: Simple Constraints. (line 17) 53059* mempcpy: Other Builtins. (line 6) 53060* memset: Other Builtins. (line 6) 53061* MeP options: MeP Options. (line 6) 53062* Mercury: G++ and GCC. (line 23) 53063* message formatting: Language Independent Options. 53064 (line 6) 53065* messages, warning: Warning Options. (line 6) 53066* messages, warning and error: Warnings and Errors. 53067 (line 6) 53068* MicroBlaze Options: MicroBlaze Options. (line 6) 53069* micromips function attribute: Function Attributes. 53070 (line 963) 53071* middle-operands, omitted: Conditionals. (line 6) 53072* MIPS options: MIPS Options. (line 6) 53073* mips16 function attribute, MIPS: Function Attributes. 53074 (line 948) 53075* misunderstandings in C++: C++ Misunderstandings. 53076 (line 6) 53077* mixed declarations and code: Mixed Declarations. (line 6) 53078* mixing assembly language and C: Using Assembly Language with C. 53079 (line 6) 53080* mktemp, and constant strings: Incompatibilities. (line 13) 53081* MMIX Options: MMIX Options. (line 6) 53082* MN10300 options: MN10300 Options. (line 6) 53083* mode variable attribute: Variable Attributes. 53084 (line 135) 53085* model function attribute, M32R/D: Function Attributes. 53086 (line 979) 53087* model variable attribute, IA-64: Variable Attributes. 53088 (line 431) 53089* model-name variable attribute, M32R/D: Variable Attributes. 53090 (line 446) 53091* modf: Other Builtins. (line 6) 53092* modff: Other Builtins. (line 6) 53093* modfl: Other Builtins. (line 6) 53094* modifiers in constraints: Modifiers. (line 6) 53095* Moxie Options: Moxie Options. (line 6) 53096* ms_abi function attribute, x86: Function Attributes. 53097 (line 1000) 53098* ms_hook_prologue function attribute, x86: Function Attributes. 53099 (line 1023) 53100* ms_struct type attribute, PowerPC: Type Attributes. (line 360) 53101* ms_struct type attribute, x86: Type Attributes. (line 392) 53102* ms_struct variable attribute, PowerPC: Variable Attributes. 53103 (line 515) 53104* ms_struct variable attribute, x86: Variable Attributes. 53105 (line 536) 53106* MSP430 Options: MSP430 Options. (line 6) 53107* multiple alternative constraints: Multi-Alternative. (line 6) 53108* multiprecision arithmetic: Long Long. (line 6) 53109* n in constraint: Simple Constraints. (line 75) 53110* naked function attribute, ARM: Function Attributes. 53111 (line 1041) 53112* naked function attribute, AVR: Function Attributes. 53113 (line 1041) 53114* naked function attribute, MCORE: Function Attributes. 53115 (line 1041) 53116* naked function attribute, MSP430: Function Attributes. 53117 (line 1041) 53118* naked function attribute, NDS32: Function Attributes. 53119 (line 1041) 53120* naked function attribute, RL78: Function Attributes. 53121 (line 1041) 53122* naked function attribute, RX: Function Attributes. 53123 (line 1041) 53124* naked function attribute, SPU: Function Attributes. 53125 (line 1041) 53126* Named Address Spaces: Named Address Spaces. 53127 (line 6) 53128* names used in assembler code: Asm Labels. (line 6) 53129* naming convention, implementation headers: C++ Interface. (line 43) 53130* NDS32 Options: NDS32 Options. (line 6) 53131* near function attribute, MeP: Function Attributes. 53132 (line 1052) 53133* near function attribute, MIPS: Function Attributes. 53134 (line 925) 53135* near type attribute, MeP: Type Attributes. (line 349) 53136* near variable attribute, MeP: Variable Attributes. 53137 (line 479) 53138* nearbyint: Other Builtins. (line 6) 53139* nearbyintf: Other Builtins. (line 6) 53140* nearbyintl: Other Builtins. (line 6) 53141* nested function attribute, NDS32: Function Attributes. 53142 (line 780) 53143* nested functions: Nested Functions. (line 6) 53144* nested_ready function attribute, NDS32: Function Attributes. 53145 (line 786) 53146* nesting function attribute, Blackfin: Function Attributes. 53147 (line 1057) 53148* newlines (escaped): Escaped Newlines. (line 6) 53149* nextafter: Other Builtins. (line 6) 53150* nextafterf: Other Builtins. (line 6) 53151* nextafterl: Other Builtins. (line 6) 53152* nexttoward: Other Builtins. (line 6) 53153* nexttowardf: Other Builtins. (line 6) 53154* nexttowardl: Other Builtins. (line 6) 53155* NFC: Warning Options. (line 1481) 53156* NFKC: Warning Options. (line 1481) 53157* Nios II options: Nios II Options. (line 6) 53158* nmi function attribute, NDS32: Function Attributes. 53159 (line 1355) 53160* NMI handler functions on the Blackfin processor: Function Attributes. 53161 (line 1062) 53162* nmi_handler function attribute, Blackfin: Function Attributes. 53163 (line 1062) 53164* no_icf function attribute: Function Attributes. 53165 (line 1107) 53166* no_instrument_function function attribute: Function Attributes. 53167 (line 1074) 53168* no_reorder function attribute: Function Attributes. 53169 (line 1135) 53170* no_sanitize_address function attribute: Function Attributes. 53171 (line 1304) 53172* no_sanitize_thread function attribute: Function Attributes. 53173 (line 1312) 53174* no_sanitize_undefined function attribute: Function Attributes. 53175 (line 1317) 53176* no_split_stack function attribute: Function Attributes. 53177 (line 1079) 53178* noclone function attribute: Function Attributes. 53179 (line 1101) 53180* nocommon variable attribute: Variable Attributes. 53181 (line 106) 53182* nocompression function attribute, MIPS: Function Attributes. 53183 (line 1068) 53184* noinline function attribute: Function Attributes. 53185 (line 1090) 53186* nomicromips function attribute: Function Attributes. 53187 (line 963) 53188* nomips16 function attribute, MIPS: Function Attributes. 53189 (line 948) 53190* non-constant initializers: Initializers. (line 6) 53191* non-static inline function: Inline. (line 85) 53192* nonnull function attribute: Function Attributes. 53193 (line 1111) 53194* noreturn function attribute: Function Attributes. 53195 (line 1153) 53196* nosave_low_regs function attribute, SH: Function Attributes. 53197 (line 1191) 53198* not_nested function attribute, NDS32: Function Attributes. 53199 (line 783) 53200* note GCC_COLORS capability: Language Independent Options. 53201 (line 75) 53202* nothrow function attribute: Function Attributes. 53203 (line 1184) 53204* notshared type attribute, ARM: Type Attributes. (line 328) 53205* Nvidia PTX options: Nvidia PTX Options. (line 6) 53206* nvptx options: Nvidia PTX Options. (line 6) 53207* o in constraint: Simple Constraints. (line 23) 53208* OBJC_INCLUDE_PATH: Environment Variables. 53209 (line 132) 53210* Objective-C <1>: Standards. (line 163) 53211* Objective-C: G++ and GCC. (line 6) 53212* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options. 53213 (line 6) 53214* Objective-C++ <1>: G++ and GCC. (line 6) 53215* Objective-C++: Standards. (line 163) 53216* offsettable address: Simple Constraints. (line 23) 53217* old-style function definitions: Function Prototypes. 53218 (line 6) 53219* omitted middle-operands: Conditionals. (line 6) 53220* only open regular files: Environment Variables. 53221 (line 179) 53222* open coding: Inline. (line 6) 53223* OpenACC accelerator programming: C Dialect Options. (line 264) 53224* OpenMP parallel: C Dialect Options. (line 276) 53225* OpenMP SIMD: C Dialect Options. (line 284) 53226* operand constraints, asm: Constraints. (line 6) 53227* optimize function attribute: Function Attributes. 53228 (line 1197) 53229* optimize options: Optimize Options. (line 6) 53230* options to control diagnostics formatting: Language Independent Options. 53231 (line 6) 53232* options to control warnings: Warning Options. (line 6) 53233* options, C++: C++ Dialect Options. 53234 (line 6) 53235* options, code generation: Code Gen Options. (line 6) 53236* options, debugging: Debugging Options. (line 6) 53237* options, dialect: C Dialect Options. (line 6) 53238* options, directory search: Directory Options. (line 6) 53239* options, GCC command: Invoking GCC. (line 6) 53240* options, grouping: Invoking GCC. (line 26) 53241* options, linking: Link Options. (line 6) 53242* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 53243 (line 6) 53244* options, optimization: Optimize Options. (line 6) 53245* options, order: Invoking GCC. (line 30) 53246* options, preprocessor: Preprocessor Options. 53247 (line 6) 53248* order of evaluation, side effects: Non-bugs. (line 196) 53249* order of options: Invoking GCC. (line 30) 53250* OS_main function attribute, AVR: Function Attributes. 53251 (line 1215) 53252* OS_task function attribute, AVR: Function Attributes. 53253 (line 1215) 53254* other register constraints: Simple Constraints. (line 163) 53255* output file option: Overall Options. (line 191) 53256* overloaded virtual function, warning: C++ Dialect Options. 53257 (line 682) 53258* p in constraint: Simple Constraints. (line 154) 53259* packed type attribute: Type Attributes. (line 108) 53260* packed variable attribute: Variable Attributes. 53261 (line 146) 53262* parameter forward declaration: Variable Length. (line 68) 53263* partial_save function attribute, NDS32: Function Attributes. 53264 (line 796) 53265* Pascal: G++ and GCC. (line 23) 53266* pcs function attribute, ARM: Function Attributes. 53267 (line 1240) 53268* PDP-11 Options: PDP-11 Options. (line 6) 53269* PIC: Code Gen Options. (line 280) 53270* picoChip options: picoChip Options. (line 6) 53271* pmf: Bound member functions. 53272 (line 6) 53273* pointer arguments: Function Attributes. 53274 (line 228) 53275* Pointer Bounds Checker attributes <1>: Function Attributes. 53276 (line 1323) 53277* Pointer Bounds Checker attributes: Type Attributes. (line 295) 53278* Pointer Bounds Checker builtins: Pointer Bounds Checker builtins. 53279 (line 6) 53280* Pointer Bounds Checker options: Debugging Options. (line 388) 53281* pointer to member function: Bound member functions. 53282 (line 6) 53283* pointers to arrays: Pointers to Arrays. (line 6) 53284* portions of temporary objects, pointers to: Temporaries. (line 6) 53285* pow: Other Builtins. (line 6) 53286* pow10: Other Builtins. (line 6) 53287* pow10f: Other Builtins. (line 6) 53288* pow10l: Other Builtins. (line 6) 53289* PowerPC options: PowerPC Options. (line 6) 53290* powf: Other Builtins. (line 6) 53291* powl: Other Builtins. (line 6) 53292* pragma GCC ivdep: Loop-Specific Pragmas. 53293 (line 7) 53294* pragma GCC optimize: Function Specific Option Pragmas. 53295 (line 19) 53296* pragma GCC pop_options: Function Specific Option Pragmas. 53297 (line 29) 53298* pragma GCC push_options: Function Specific Option Pragmas. 53299 (line 29) 53300* pragma GCC reset_options: Function Specific Option Pragmas. 53301 (line 36) 53302* pragma GCC target: Function Specific Option Pragmas. 53303 (line 7) 53304* pragma, address: M32C Pragmas. (line 15) 53305* pragma, align: Solaris Pragmas. (line 11) 53306* pragma, call: MeP Pragmas. (line 48) 53307* pragma, coprocessor available: MeP Pragmas. (line 13) 53308* pragma, coprocessor call_saved: MeP Pragmas. (line 20) 53309* pragma, coprocessor subclass: MeP Pragmas. (line 28) 53310* pragma, custom io_volatile: MeP Pragmas. (line 7) 53311* pragma, diagnostic: Diagnostic Pragmas. (line 14) 53312* pragma, disinterrupt: MeP Pragmas. (line 38) 53313* pragma, fini: Solaris Pragmas. (line 19) 53314* pragma, init: Solaris Pragmas. (line 24) 53315* pragma, long_calls: ARM Pragmas. (line 11) 53316* pragma, long_calls_off: ARM Pragmas. (line 17) 53317* pragma, longcall: RS/6000 and PowerPC Pragmas. 53318 (line 14) 53319* pragma, mark: Darwin Pragmas. (line 11) 53320* pragma, memregs: M32C Pragmas. (line 7) 53321* pragma, no_long_calls: ARM Pragmas. (line 14) 53322* pragma, options align: Darwin Pragmas. (line 14) 53323* pragma, pop_macro: Push/Pop Macro Pragmas. 53324 (line 15) 53325* pragma, push_macro: Push/Pop Macro Pragmas. 53326 (line 11) 53327* pragma, reason for not using: Function Attributes. 53328 (line 2050) 53329* pragma, redefine_extname: Symbol-Renaming Pragmas. 53330 (line 13) 53331* pragma, segment: Darwin Pragmas. (line 21) 53332* pragma, unused: Darwin Pragmas. (line 24) 53333* pragma, visibility: Visibility Pragmas. (line 8) 53334* pragma, weak: Weak Pragmas. (line 10) 53335* pragmas: Pragmas. (line 6) 53336* pragmas in C++, effect on inlining: C++ Interface. (line 57) 53337* pragmas, interface and implementation: C++ Interface. (line 6) 53338* pragmas, warning of unknown: Warning Options. (line 729) 53339* precompiled headers: Precompiled Headers. 53340 (line 6) 53341* preprocessing numbers: Incompatibilities. (line 173) 53342* preprocessing tokens: Incompatibilities. (line 173) 53343* preprocessor options: Preprocessor Options. 53344 (line 6) 53345* printf: Other Builtins. (line 6) 53346* printf_unlocked: Other Builtins. (line 6) 53347* prof: Debugging Options. (line 639) 53348* progmem variable attribute, AVR: Variable Attributes. 53349 (line 319) 53350* promotion of formal parameters: Function Prototypes. 53351 (line 6) 53352* pure function attribute: Function Attributes. 53353 (line 1258) 53354* push address instruction: Simple Constraints. (line 154) 53355* putchar: Other Builtins. (line 6) 53356* puts: Other Builtins. (line 6) 53357* q floating point suffix: Floating Types. (line 6) 53358* Q floating point suffix: Floating Types. (line 6) 53359* qsort, and global register variables: Global Reg Vars. (line 41) 53360* question mark: Multi-Alternative. (line 27) 53361* quote GCC_COLORS capability: Language Independent Options. 53362 (line 85) 53363* R fixed-suffix: Fixed-Point. (line 6) 53364* r fixed-suffix: Fixed-Point. (line 6) 53365* r in constraint: Simple Constraints. (line 66) 53366* RAMPD: AVR Options. (line 358) 53367* RAMPX: AVR Options. (line 358) 53368* RAMPY: AVR Options. (line 358) 53369* RAMPZ: AVR Options. (line 358) 53370* ranges in case statements: Case Ranges. (line 6) 53371* read-only strings: Incompatibilities. (line 9) 53372* reentrant function attribute, MSP430: Function Attributes. 53373 (line 698) 53374* register variable after longjmp: Global Reg Vars. (line 65) 53375* registers for local variables: Local Reg Vars. (line 6) 53376* registers in constraints: Simple Constraints. (line 66) 53377* registers, global allocation: Explicit Reg Vars. (line 6) 53378* registers, global variables in: Global Reg Vars. (line 6) 53379* regparm function attribute, x86: Function Attributes. 53380 (line 1333) 53381* relocation truncated to fit (ColdFire): M680x0 Options. (line 329) 53382* relocation truncated to fit (MIPS): MIPS Options. (line 239) 53383* remainder: Other Builtins. (line 6) 53384* remainderf: Other Builtins. (line 6) 53385* remainderl: Other Builtins. (line 6) 53386* remquo: Other Builtins. (line 6) 53387* remquof: Other Builtins. (line 6) 53388* remquol: Other Builtins. (line 6) 53389* renesas function attribute, SH: Function Attributes. 53390 (line 1377) 53391* reordering, warning: C++ Dialect Options. 53392 (line 598) 53393* reporting bugs: Bugs. (line 6) 53394* resbank function attribute, SH: Function Attributes. 53395 (line 1381) 53396* reset function attribute, NDS32: Function Attributes. 53397 (line 1350) 53398* reset handler functions: Function Attributes. 53399 (line 1350) 53400* rest argument (in macro): Variadic Macros. (line 6) 53401* restricted pointers: Restricted Pointers. 53402 (line 6) 53403* restricted references: Restricted Pointers. 53404 (line 6) 53405* restricted this pointer: Restricted Pointers. 53406 (line 6) 53407* returns_nonnull function attribute: Function Attributes. 53408 (line 1143) 53409* returns_twice function attribute: Function Attributes. 53410 (line 1395) 53411* rindex: Other Builtins. (line 6) 53412* rint: Other Builtins. (line 6) 53413* rintf: Other Builtins. (line 6) 53414* rintl: Other Builtins. (line 6) 53415* RL78 Options: RL78 Options. (line 6) 53416* round: Other Builtins. (line 6) 53417* roundf: Other Builtins. (line 6) 53418* roundl: Other Builtins. (line 6) 53419* RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 53420 (line 6) 53421* RTTI: Vague Linkage. (line 42) 53422* run-time options: Code Gen Options. (line 6) 53423* RX Options: RX Options. (line 6) 53424* s in constraint: Simple Constraints. (line 102) 53425* S/390 and zSeries Options: S/390 and zSeries Options. 53426 (line 6) 53427* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 53428 (line 1404) 53429* save_all function attribute, NDS32: Function Attributes. 53430 (line 792) 53431* save_volatiles function attribute, MicroBlaze: Function Attributes. 53432 (line 1409) 53433* saveall function attribute, Blackfin: Function Attributes. 53434 (line 1404) 53435* saveall function attribute, H8/300: Function Attributes. 53436 (line 1404) 53437* scalb: Other Builtins. (line 6) 53438* scalbf: Other Builtins. (line 6) 53439* scalbl: Other Builtins. (line 6) 53440* scalbln: Other Builtins. (line 6) 53441* scalblnf: Other Builtins. (line 6) 53442* scalbn: Other Builtins. (line 6) 53443* scalbnf: Other Builtins. (line 6) 53444* scanf, and constant strings: Incompatibilities. (line 17) 53445* scanfnl: Other Builtins. (line 6) 53446* scope of a variable length array: Variable Length. (line 22) 53447* scope of declaration: Disappointments. (line 21) 53448* scope of external declarations: Incompatibilities. (line 80) 53449* Score Options: Score Options. (line 6) 53450* search path: Directory Options. (line 6) 53451* section function attribute: Function Attributes. 53452 (line 1426) 53453* section variable attribute: Variable Attributes. 53454 (line 167) 53455* selectany variable attribute: Variable Attributes. 53456 (line 283) 53457* sentinel function attribute: Function Attributes. 53458 (line 1442) 53459* setjmp: Global Reg Vars. (line 65) 53460* setjmp incompatibilities: Incompatibilities. (line 39) 53461* shared strings: Incompatibilities. (line 9) 53462* shared variable attribute: Variable Attributes. 53463 (line 212) 53464* short_call function attribute, ARC: Function Attributes. 53465 (line 887) 53466* short_call function attribute, ARM: Function Attributes. 53467 (line 887) 53468* short_call function attribute, Epiphany: Function Attributes. 53469 (line 887) 53470* shortcall function attribute, Blackfin: Function Attributes. 53471 (line 911) 53472* shortcall function attribute, PowerPC: Function Attributes. 53473 (line 911) 53474* side effect in ?:: Conditionals. (line 20) 53475* side effects, macro argument: Statement Exprs. (line 35) 53476* side effects, order of evaluation: Non-bugs. (line 196) 53477* signal function attribute, AVR: Function Attributes. 53478 (line 1473) 53479* signbit: Other Builtins. (line 6) 53480* signbitd128: Other Builtins. (line 6) 53481* signbitd32: Other Builtins. (line 6) 53482* signbitd64: Other Builtins. (line 6) 53483* signbitf: Other Builtins. (line 6) 53484* signbitl: Other Builtins. (line 6) 53485* signed and unsigned values, comparison warning: Warning Options. 53486 (line 1299) 53487* significand: Other Builtins. (line 6) 53488* significandf: Other Builtins. (line 6) 53489* significandl: Other Builtins. (line 6) 53490* SIMD: C Dialect Options. (line 284) 53491* simple constraints: Simple Constraints. (line 6) 53492* sin: Other Builtins. (line 6) 53493* sincos: Other Builtins. (line 6) 53494* sincosf: Other Builtins. (line 6) 53495* sincosl: Other Builtins. (line 6) 53496* sinf: Other Builtins. (line 6) 53497* sinh: Other Builtins. (line 6) 53498* sinhf: Other Builtins. (line 6) 53499* sinhl: Other Builtins. (line 6) 53500* sinl: Other Builtins. (line 6) 53501* sizeof: Typeof. (line 6) 53502* smaller data references <1>: M32R/D Options. (line 57) 53503* smaller data references: Nios II Options. (line 9) 53504* smaller data references (PowerPC): RS/6000 and PowerPC Options. 53505 (line 770) 53506* snprintf: Other Builtins. (line 6) 53507* Solaris 2 options: Solaris 2 Options. (line 6) 53508* sp_switch function attribute, SH: Function Attributes. 53509 (line 1491) 53510* SPARC options: SPARC Options. (line 6) 53511* Spec Files: Spec Files. (line 6) 53512* specified registers: Explicit Reg Vars. (line 6) 53513* specifying compiler version and target machine: Target Options. 53514 (line 6) 53515* specifying hardware config: Submodel Options. (line 6) 53516* specifying machine version: Target Options. (line 6) 53517* specifying registers for local variables: Local Reg Vars. (line 6) 53518* speed of compilation: Precompiled Headers. 53519 (line 6) 53520* sprintf: Other Builtins. (line 6) 53521* SPU options: SPU Options. (line 6) 53522* spu_vector type attribute, SPU: Type Attributes. (line 379) 53523* spu_vector variable attribute, SPU: Variable Attributes. 53524 (line 524) 53525* sqrt: Other Builtins. (line 6) 53526* sqrtf: Other Builtins. (line 6) 53527* sqrtl: Other Builtins. (line 6) 53528* sscanf: Other Builtins. (line 6) 53529* sscanf, and constant strings: Incompatibilities. (line 17) 53530* sseregparm function attribute, x86: Function Attributes. 53531 (line 1362) 53532* stack_protect function attribute: Function Attributes. 53533 (line 1085) 53534* statements inside expressions: Statement Exprs. (line 6) 53535* static data in C++, declaring and defining: Static Definitions. 53536 (line 6) 53537* stdcall function attribute, x86-32: Function Attributes. 53538 (line 1501) 53539* stpcpy: Other Builtins. (line 6) 53540* stpncpy: Other Builtins. (line 6) 53541* strcasecmp: Other Builtins. (line 6) 53542* strcat: Other Builtins. (line 6) 53543* strchr: Other Builtins. (line 6) 53544* strcmp: Other Builtins. (line 6) 53545* strcpy: Other Builtins. (line 6) 53546* strcspn: Other Builtins. (line 6) 53547* strdup: Other Builtins. (line 6) 53548* strfmon: Other Builtins. (line 6) 53549* strftime: Other Builtins. (line 6) 53550* string constants: Incompatibilities. (line 9) 53551* strlen: Other Builtins. (line 6) 53552* strncasecmp: Other Builtins. (line 6) 53553* strncat: Other Builtins. (line 6) 53554* strncmp: Other Builtins. (line 6) 53555* strncpy: Other Builtins. (line 6) 53556* strndup: Other Builtins. (line 6) 53557* strpbrk: Other Builtins. (line 6) 53558* strrchr: Other Builtins. (line 6) 53559* strspn: Other Builtins. (line 6) 53560* strstr: Other Builtins. (line 6) 53561* struct: Unnamed Fields. (line 6) 53562* struct __htm_tdb: S/390 System z Built-in Functions. 53563 (line 54) 53564* structures: Incompatibilities. (line 146) 53565* structures, constructor expression: Compound Literals. (line 6) 53566* submodel options: Submodel Options. (line 6) 53567* subscripting: Subscripting. (line 6) 53568* subscripting and function values: Subscripting. (line 6) 53569* suffixes for C++ source: Invoking G++. (line 6) 53570* SUNPRO_DEPENDENCIES: Environment Variables. 53571 (line 172) 53572* suppressing warnings: Warning Options. (line 6) 53573* surprises in C++: C++ Misunderstandings. 53574 (line 6) 53575* syntax checking: Warning Options. (line 13) 53576* syscall_linkage function attribute, IA-64: Function Attributes. 53577 (line 1506) 53578* system headers, warnings from: Warning Options. (line 949) 53579* sysv_abi function attribute, x86: Function Attributes. 53580 (line 1000) 53581* tan: Other Builtins. (line 6) 53582* tanf: Other Builtins. (line 6) 53583* tanh: Other Builtins. (line 6) 53584* tanhf: Other Builtins. (line 6) 53585* tanhl: Other Builtins. (line 6) 53586* tanl: Other Builtins. (line 6) 53587* target function attribute: Function Attributes. 53588 (line 1513) 53589* target machine, specifying: Target Options. (line 6) 53590* target options: Target Options. (line 6) 53591* target("abm") function attribute, x86: Function Attributes. 53592 (line 1546) 53593* target("aes") function attribute, x86: Function Attributes. 53594 (line 1551) 53595* target("align-stringops") function attribute, x86: Function Attributes. 53596 (line 1645) 53597* target("altivec") function attribute, PowerPC: Function Attributes. 53598 (line 1671) 53599* target("arch=ARCH") function attribute, x86: Function Attributes. 53600 (line 1654) 53601* target("avoid-indexed-addresses") function attribute, PowerPC: Function Attributes. 53602 (line 1792) 53603* target("cld") function attribute, x86: Function Attributes. 53604 (line 1616) 53605* target("cmpb") function attribute, PowerPC: Function Attributes. 53606 (line 1677) 53607* target("cpu=CPU") function attribute, PowerPC: Function Attributes. 53608 (line 1807) 53609* target("custom-fpu-cfg=NAME") function attribute, Nios II: Function Attributes. 53610 (line 1833) 53611* target("custom-INSN=N") function attribute, Nios II: Function Attributes. 53612 (line 1824) 53613* target("default") function attribute, x86: Function Attributes. 53614 (line 1554) 53615* target("dlmzb") function attribute, PowerPC: Function Attributes. 53616 (line 1683) 53617* target("fancy-math-387") function attribute, x86: Function Attributes. 53618 (line 1620) 53619* target("fma4") function attribute, x86: Function Attributes. 53620 (line 1600) 53621* target("fpmath=FPMATH") function attribute, x86: Function Attributes. 53622 (line 1662) 53623* target("fprnd") function attribute, PowerPC: Function Attributes. 53624 (line 1690) 53625* target("friz") function attribute, PowerPC: Function Attributes. 53626 (line 1783) 53627* target("fused-madd") function attribute, x86: Function Attributes. 53628 (line 1625) 53629* target("hard-dfp") function attribute, PowerPC: Function Attributes. 53630 (line 1696) 53631* target("ieee-fp") function attribute, x86: Function Attributes. 53632 (line 1630) 53633* target("inline-all-stringops") function attribute, x86: Function Attributes. 53634 (line 1635) 53635* target("inline-stringops-dynamically") function attribute, x86: Function Attributes. 53636 (line 1639) 53637* target("isel") function attribute, PowerPC: Function Attributes. 53638 (line 1702) 53639* target("longcall") function attribute, PowerPC: Function Attributes. 53640 (line 1802) 53641* target("lwp") function attribute, x86: Function Attributes. 53642 (line 1608) 53643* target("mfcrf") function attribute, PowerPC: Function Attributes. 53644 (line 1706) 53645* target("mfpgpr") function attribute, PowerPC: Function Attributes. 53646 (line 1713) 53647* target("mmx") function attribute, x86: Function Attributes. 53648 (line 1559) 53649* target("mulhw") function attribute, PowerPC: Function Attributes. 53650 (line 1720) 53651* target("multiple") function attribute, PowerPC: Function Attributes. 53652 (line 1727) 53653* target("no-custom-INSN") function attribute, Nios II: Function Attributes. 53654 (line 1824) 53655* target("paired") function attribute, PowerPC: Function Attributes. 53656 (line 1797) 53657* target("pclmul") function attribute, x86: Function Attributes. 53658 (line 1563) 53659* target("popcnt") function attribute, x86: Function Attributes. 53660 (line 1567) 53661* target("popcntb") function attribute, PowerPC: Function Attributes. 53662 (line 1738) 53663* target("popcntd") function attribute, PowerPC: Function Attributes. 53664 (line 1745) 53665* target("powerpc-gfxopt") function attribute, PowerPC: Function Attributes. 53666 (line 1751) 53667* target("powerpc-gpopt") function attribute, PowerPC: Function Attributes. 53668 (line 1757) 53669* target("recip") function attribute, x86: Function Attributes. 53670 (line 1649) 53671* target("recip-precision") function attribute, PowerPC: Function Attributes. 53672 (line 1763) 53673* target("sse") function attribute, x86: Function Attributes. 53674 (line 1571) 53675* target("sse2") function attribute, x86: Function Attributes. 53676 (line 1575) 53677* target("sse3") function attribute, x86: Function Attributes. 53678 (line 1579) 53679* target("sse4") function attribute, x86: Function Attributes. 53680 (line 1583) 53681* target("sse4.1") function attribute, x86: Function Attributes. 53682 (line 1588) 53683* target("sse4.2") function attribute, x86: Function Attributes. 53684 (line 1592) 53685* target("sse4a") function attribute, x86: Function Attributes. 53686 (line 1596) 53687* target("ssse3") function attribute, x86: Function Attributes. 53688 (line 1612) 53689* target("string") function attribute, PowerPC: Function Attributes. 53690 (line 1769) 53691* target("tune=TUNE") function attribute, PowerPC: Function Attributes. 53692 (line 1814) 53693* target("tune=TUNE") function attribute, x86: Function Attributes. 53694 (line 1658) 53695* target("update") function attribute, PowerPC: Function Attributes. 53696 (line 1732) 53697* target("vsx") function attribute, PowerPC: Function Attributes. 53698 (line 1775) 53699* target("xop") function attribute, x86: Function Attributes. 53700 (line 1604) 53701* TC1: Standards. (line 13) 53702* TC2: Standards. (line 13) 53703* TC3: Standards. (line 13) 53704* Technical Corrigenda: Standards. (line 13) 53705* Technical Corrigendum 1: Standards. (line 13) 53706* Technical Corrigendum 2: Standards. (line 13) 53707* Technical Corrigendum 3: Standards. (line 13) 53708* template instantiation: Template Instantiation. 53709 (line 6) 53710* temporaries, lifetime of: Temporaries. (line 6) 53711* tgamma: Other Builtins. (line 6) 53712* tgammaf: Other Builtins. (line 6) 53713* tgammal: Other Builtins. (line 6) 53714* thiscall function attribute, x86-32: Function Attributes. 53715 (line 415) 53716* Thread-Local Storage: Thread-Local. (line 6) 53717* thunks: Nested Functions. (line 6) 53718* TILE-Gx options: TILE-Gx Options. (line 6) 53719* TILEPro options: TILEPro Options. (line 6) 53720* tiny data section on the H8/300H and H8S: Variable Attributes. 53721 (line 418) 53722* tiny type attribute, MeP: Type Attributes. (line 349) 53723* tiny variable attribute, MeP: Variable Attributes. 53724 (line 475) 53725* tiny_data variable attribute, H8/300: Variable Attributes. 53726 (line 418) 53727* TLS: Thread-Local. (line 6) 53728* tls_model variable attribute: Variable Attributes. 53729 (line 236) 53730* TMPDIR: Environment Variables. 53731 (line 45) 53732* toascii: Other Builtins. (line 6) 53733* tolower: Other Builtins. (line 6) 53734* toupper: Other Builtins. (line 6) 53735* towlower: Other Builtins. (line 6) 53736* towupper: Other Builtins. (line 6) 53737* traditional C language: C Dialect Options. (line 344) 53738* transparent_union type attribute: Type Attributes. (line 143) 53739* trap_exit function attribute, SH: Function Attributes. 53740 (line 1845) 53741* trapa_handler function attribute, SH: Function Attributes. 53742 (line 1850) 53743* trunc: Other Builtins. (line 6) 53744* truncf: Other Builtins. (line 6) 53745* truncl: Other Builtins. (line 6) 53746* two-stage name lookup: Name lookup. (line 6) 53747* type alignment: Alignment. (line 6) 53748* type attributes: Type Attributes. (line 6) 53749* type_info: Vague Linkage. (line 42) 53750* typedef names as function parameters: Incompatibilities. (line 97) 53751* typeof: Typeof. (line 6) 53752* uhk fixed-suffix: Fixed-Point. (line 6) 53753* UHK fixed-suffix: Fixed-Point. (line 6) 53754* UHR fixed-suffix: Fixed-Point. (line 6) 53755* uhr fixed-suffix: Fixed-Point. (line 6) 53756* UK fixed-suffix: Fixed-Point. (line 6) 53757* uk fixed-suffix: Fixed-Point. (line 6) 53758* ulk fixed-suffix: Fixed-Point. (line 6) 53759* ULK fixed-suffix: Fixed-Point. (line 6) 53760* ULL integer suffix: Long Long. (line 6) 53761* ULLK fixed-suffix: Fixed-Point. (line 6) 53762* ullk fixed-suffix: Fixed-Point. (line 6) 53763* ULLR fixed-suffix: Fixed-Point. (line 6) 53764* ullr fixed-suffix: Fixed-Point. (line 6) 53765* ulr fixed-suffix: Fixed-Point. (line 6) 53766* ULR fixed-suffix: Fixed-Point. (line 6) 53767* undefined behavior: Bug Criteria. (line 17) 53768* undefined function value: Bug Criteria. (line 17) 53769* underscores in variables in macros: Typeof. (line 46) 53770* union: Unnamed Fields. (line 6) 53771* union, casting to a: Cast to Union. (line 6) 53772* unions: Incompatibilities. (line 146) 53773* unknown pragmas, warning: Warning Options. (line 729) 53774* unresolved references and -nodefaultlibs: Link Options. (line 91) 53775* unresolved references and -nostdlib: Link Options. (line 91) 53776* unused function attribute: Function Attributes. 53777 (line 1854) 53778* unused label attribute: Label Attributes. (line 29) 53779* unused type attribute: Type Attributes. (line 195) 53780* unused variable attribute: Variable Attributes. 53781 (line 245) 53782* UR fixed-suffix: Fixed-Point. (line 6) 53783* ur fixed-suffix: Fixed-Point. (line 6) 53784* use_debug_exception_return function attribute, MIPS: Function Attributes. 53785 (line 757) 53786* use_shadow_register_set function attribute, MIPS: Function Attributes. 53787 (line 748) 53788* used function attribute: Function Attributes. 53789 (line 1859) 53790* used variable attribute: Variable Attributes. 53791 (line 250) 53792* User stack pointer in interrupts on the Blackfin: Function Attributes. 53793 (line 841) 53794* V in constraint: Simple Constraints. (line 43) 53795* V850 Options: V850 Options. (line 6) 53796* vague linkage: Vague Linkage. (line 6) 53797* value after longjmp: Global Reg Vars. (line 65) 53798* variable addressability on the M32R/D: Variable Attributes. 53799 (line 446) 53800* variable alignment: Alignment. (line 6) 53801* variable attributes: Variable Attributes. 53802 (line 6) 53803* variable number of arguments: Variadic Macros. (line 6) 53804* variable-length array in a structure: Variable Length. (line 26) 53805* variable-length array scope: Variable Length. (line 22) 53806* variable-length arrays: Variable Length. (line 6) 53807* variables in specified registers: Explicit Reg Vars. (line 6) 53808* variables, local, in macros: Typeof. (line 46) 53809* variadic macros: Variadic Macros. (line 6) 53810* VAX options: VAX Options. (line 6) 53811* vector function attribute, RX: Function Attributes. 53812 (line 1869) 53813* vector_size variable attribute: Variable Attributes. 53814 (line 259) 53815* version_id function attribute, IA-64: Function Attributes. 53816 (line 1876) 53817* vfprintf: Other Builtins. (line 6) 53818* vfscanf: Other Builtins. (line 6) 53819* visibility function attribute: Function Attributes. 53820 (line 1886) 53821* visibility type attribute: Type Attributes. (line 269) 53822* Visium options: Visium Options. (line 6) 53823* VLAs: Variable Length. (line 6) 53824* vliw function attribute, MeP: Function Attributes. 53825 (line 1983) 53826* void pointers, arithmetic: Pointer Arith. (line 6) 53827* void, size of pointer to: Pointer Arith. (line 6) 53828* volatile access <1>: C++ Volatiles. (line 6) 53829* volatile access: Volatiles. (line 6) 53830* volatile applied to function: Function Attributes. 53831 (line 6) 53832* volatile asm: Extended Asm. (line 109) 53833* volatile read <1>: Volatiles. (line 6) 53834* volatile read: C++ Volatiles. (line 6) 53835* volatile write <1>: C++ Volatiles. (line 6) 53836* volatile write: Volatiles. (line 6) 53837* vprintf: Other Builtins. (line 6) 53838* vscanf: Other Builtins. (line 6) 53839* vsnprintf: Other Builtins. (line 6) 53840* vsprintf: Other Builtins. (line 6) 53841* vsscanf: Other Builtins. (line 6) 53842* vtable: Vague Linkage. (line 27) 53843* VxWorks Options: VxWorks Options. (line 6) 53844* w floating point suffix: Floating Types. (line 6) 53845* W floating point suffix: Floating Types. (line 6) 53846* wakeup function attribute, MSP430: Function Attributes. 53847 (line 704) 53848* warm function attribute, NDS32: Function Attributes. 53849 (line 1358) 53850* warn_unused type attribute: C++ Attributes. (line 77) 53851* warn_unused_result function attribute: Function Attributes. 53852 (line 1989) 53853* warning for comparison of signed and unsigned values: Warning Options. 53854 (line 1299) 53855* warning for overloaded virtual function: C++ Dialect Options. 53856 (line 682) 53857* warning for reordering of member initializers: C++ Dialect Options. 53858 (line 598) 53859* warning for unknown pragmas: Warning Options. (line 729) 53860* warning function attribute: Function Attributes. 53861 (line 206) 53862* warning GCC_COLORS capability: Language Independent Options. 53863 (line 72) 53864* warning messages: Warning Options. (line 6) 53865* warnings from system headers: Warning Options. (line 949) 53866* warnings vs errors: Warnings and Errors. 53867 (line 6) 53868* weak function attribute: Function Attributes. 53869 (line 2006) 53870* weak variable attribute: Variable Attributes. 53871 (line 304) 53872* weakref function attribute: Function Attributes. 53873 (line 2015) 53874* whitespace: Incompatibilities. (line 112) 53875* Windows Options for x86: x86 Windows Options. 53876 (line 6) 53877* X in constraint: Simple Constraints. (line 124) 53878* X3.159-1989: Standards. (line 13) 53879* x86 Options: x86 Options. (line 6) 53880* x86 Windows Options: x86 Windows Options. 53881 (line 6) 53882* Xstormy16 Options: Xstormy16 Options. (line 6) 53883* Xtensa Options: Xtensa Options. (line 6) 53884* y0: Other Builtins. (line 6) 53885* y0f: Other Builtins. (line 6) 53886* y0l: Other Builtins. (line 6) 53887* y1: Other Builtins. (line 6) 53888* y1f: Other Builtins. (line 6) 53889* y1l: Other Builtins. (line 6) 53890* yn: Other Builtins. (line 6) 53891* ynf: Other Builtins. (line 6) 53892* ynl: Other Builtins. (line 6) 53893* zero-length arrays: Zero Length. (line 6) 53894* zero-size structures: Empty Structures. (line 6) 53895* zSeries options: zSeries Options. (line 6) 53896 53897 53898 53899Tag Table: 53900Node: Top2034 53901Node: G++ and GCC3877 53902Node: Standards5946 53903Node: Invoking GCC18036 53904Node: Option Summary21781 53905Node: Overall Options66338 53906Node: Invoking G++80576 53907Node: C Dialect Options82099 53908Node: C++ Dialect Options99365 53909Node: Objective-C and Objective-C++ Dialect Options131351 53910Node: Language Independent Options142587 53911Node: Warning Options147405 53912Node: Debugging Options225838 53913Node: Optimize Options297316 53914Ref: Type-punning360579 53915Node: Preprocessor Options449370 53916Ref: Wtrigraphs454152 53917Ref: dashMF458900 53918Ref: fdollars-in-identifiers470226 53919Node: Assembler Options480469 53920Node: Link Options481161 53921Ref: Link Options-Footnote-1494689 53922Node: Directory Options495023 53923Node: Spec Files501765 53924Node: Target Options523636 53925Node: Submodel Options524035 53926Node: AArch64 Options525800 53927Node: Adapteva Epiphany Options531540 53928Node: ARC Options537491 53929Node: ARM Options549930 53930Node: AVR Options567617 53931Node: Blackfin Options588911 53932Node: C6X Options596926 53933Node: CRIS Options598469 53934Node: CR16 Options602213 53935Node: Darwin Options603120 53936Node: DEC Alpha Options610561 53937Node: FR30 Options622149 53938Node: FRV Options622714 53939Node: GNU/Linux Options629433 53940Node: H8/300 Options630694 53941Node: HPPA Options632144 53942Node: IA-64 Options641333 53943Node: LM32 Options649378 53944Node: M32C Options649902 53945Node: M32R/D Options651176 53946Node: M680x0 Options654722 53947Node: MCore Options668768 53948Node: MeP Options670271 53949Node: MicroBlaze Options674231 53950Node: MIPS Options677027 53951Node: MMIX Options710548 53952Node: MN10300 Options713030 53953Node: Moxie Options715573 53954Node: MSP430 Options716061 53955Node: NDS32 Options719565 53956Node: Nios II Options721459 53957Node: Nvidia PTX Options731636 53958Node: PDP-11 Options732028 53959Node: picoChip Options733725 53960Node: PowerPC Options735866 53961Node: RL78 Options736087 53962Node: RS/6000 and PowerPC Options736935 53963Node: RX Options777263 53964Node: S/390 and zSeries Options784613 53965Node: Score Options793171 53966Node: SH Options794013 53967Node: Solaris 2 Options814907 53968Node: SPARC Options816435 53969Node: SPU Options829704 53970Node: System V Options834641 53971Node: TILE-Gx Options835467 53972Node: TILEPro Options836485 53973Node: V850 Options836989 53974Node: VAX Options843681 53975Node: Visium Options844219 53976Node: VMS Options846527 53977Node: VxWorks Options847341 53978Node: x86 Options848493 53979Node: x86 Windows Options892077 53980Node: Xstormy16 Options894877 53981Node: Xtensa Options895171 53982Node: zSeries Options899496 53983Node: Code Gen Options899692 53984Node: Environment Variables930516 53985Node: Precompiled Headers938783 53986Node: C Implementation944791 53987Node: Translation implementation946480 53988Node: Environment implementation947072 53989Node: Identifiers implementation947627 53990Node: Characters implementation948714 53991Node: Integers implementation952365 53992Node: Floating point implementation954251 53993Node: Arrays and pointers implementation957316 53994Ref: Arrays and pointers implementation-Footnote-1958775 53995Node: Hints implementation958899 53996Node: Structures unions enumerations and bit-fields implementation960386 53997Node: Qualifiers implementation962611 53998Node: Declarators implementation964391 53999Node: Statements implementation964733 54000Node: Preprocessing directives implementation965060 54001Node: Library functions implementation967382 54002Node: Architecture implementation968032 54003Node: Locale-specific behavior implementation969674 54004Node: C++ Implementation969979 54005Node: Conditionally-supported behavior971261 54006Node: Exception handling971879 54007Node: C Extensions972288 54008Node: Statement Exprs977446 54009Node: Local Labels981922 54010Node: Labels as Values984895 54011Ref: Labels as Values-Footnote-1987420 54012Node: Nested Functions987603 54013Node: Constructing Calls991561 54014Node: Typeof996279 54015Node: Conditionals1000207 54016Node: __int1281001097 54017Node: Long Long1001621 54018Node: Complex1003097 54019Node: Floating Types1005686 54020Node: Half-Precision1006806 54021Node: Decimal Float1008988 54022Node: Hex Floats1010843 54023Node: Fixed-Point1011879 54024Node: Named Address Spaces1015161 54025Ref: AVR Named Address Spaces1015842 54026Node: Zero Length1021048 54027Node: Empty Structures1024087 54028Node: Variable Length1024493 54029Node: Variadic Macros1027349 54030Node: Escaped Newlines1029727 54031Node: Subscripting1030588 54032Node: Pointer Arith1031314 54033Node: Pointers to Arrays1031888 54034Node: Initializers1032632 54035Node: Compound Literals1033133 54036Node: Designated Inits1036480 54037Node: Case Ranges1040218 54038Node: Cast to Union1040899 54039Node: Mixed Declarations1041990 54040Node: Function Attributes1042500 54041Node: Label Attributes1136352 54042Node: Attribute Syntax1138196 54043Node: Function Prototypes1148410 54044Node: C++ Comments1150191 54045Node: Dollar Signs1150710 54046Node: Character Escapes1151175 54047Node: Variable Attributes1151469 54048Ref: AVR Variable Attributes1165190 54049Ref: MeP Variable Attributes1170555 54050Ref: x86 Variable Attributes1173125 54051Node: Type Attributes1178164 54052Ref: MeP Type Attributes1193413 54053Ref: PowerPC Type Attributes1193687 54054Ref: SPU Type Attributes1194548 54055Ref: x86 Type Attributes1194839 54056Node: Alignment1195527 54057Node: Inline1196897 54058Node: Volatiles1201872 54059Node: Using Assembly Language with C1204772 54060Node: Basic Asm1205976 54061Node: Extended Asm1210110 54062Ref: Volatile1213907 54063Ref: AssemblerTemplate1217979 54064Ref: OutputOperands1222204 54065Ref: InputOperands1229106 54066Ref: Clobbers1233331 54067Ref: GotoLabels1236627 54068Ref: x86Operandmodifiers1238760 54069Ref: x86floatingpointasmoperands1241004 54070Node: Constraints1244334 54071Node: Simple Constraints1245440 54072Node: Multi-Alternative1252765 54073Node: Modifiers1254772 54074Node: Machine Constraints1258276 54075Node: Asm Labels1314728 54076Node: Explicit Reg Vars1316426 54077Node: Global Reg Vars1318047 54078Node: Local Reg Vars1322547 54079Node: Size of an asm1325667 54080Node: Alternate Keywords1326912 54081Node: Incomplete Enums1328411 54082Node: Function Names1329167 54083Node: Return Address1330770 54084Node: Vector Extensions1334277 54085Node: Offsetof1341562 54086Node: __sync Builtins1342403 54087Node: __atomic Builtins1347879 54088Node: Integer Overflow Builtins1359483 54089Node: x86 specific memory model extensions for transactional memory1363613 54090Node: Object Size Checking1364882 54091Node: Pointer Bounds Checker builtins1370388 54092Node: Cilk Plus Builtins1376394 54093Node: Other Builtins1377310 54094Node: Target Builtins1406954 54095Node: AArch64 Built-in Functions1408446 54096Node: Alpha Built-in Functions1408901 54097Node: Altera Nios II Built-in Functions1411949 54098Node: ARC Built-in Functions1415934 54099Node: ARC SIMD Built-in Functions1421145 54100Node: ARM iWMMXt Built-in Functions1430041 54101Node: ARM C Language Extensions (ACLE)1437037 54102Node: ARM Floating Point Status and Control Intrinsics1438314 54103Node: AVR Built-in Functions1438790 54104Node: Blackfin Built-in Functions1441889 54105Node: FR-V Built-in Functions1442508 54106Node: Argument Types1443374 54107Node: Directly-mapped Integer Functions1445128 54108Node: Directly-mapped Media Functions1446212 54109Node: Raw read/write Functions1453246 54110Node: Other Built-in Functions1454160 54111Node: MIPS DSP Built-in Functions1455346 54112Node: MIPS Paired-Single Support1467844 54113Node: MIPS Loongson Built-in Functions1469343 54114Node: Paired-Single Arithmetic1475863 54115Node: Paired-Single Built-in Functions1476811 54116Node: MIPS-3D Built-in Functions1479478 54117Node: Other MIPS Built-in Functions1484855 54118Node: MSP430 Built-in Functions1485860 54119Node: NDS32 Built-in Functions1487261 54120Node: picoChip Built-in Functions1488554 54121Node: PowerPC Built-in Functions1489898 54122Node: PowerPC AltiVec/VSX Built-in Functions1493605 54123Node: PowerPC Hardware Transactional Memory Built-in Functions1633396 54124Node: RX Built-in Functions1641887 54125Node: S/390 System z Built-in Functions1645920 54126Node: SH Built-in Functions1651157 54127Node: SPARC VIS Built-in Functions1652885 54128Node: SPU Built-in Functions1658489 54129Node: TI C6X Built-in Functions1660305 54130Node: TILE-Gx Built-in Functions1661329 54131Node: TILEPro Built-in Functions1662446 54132Node: x86 Built-in Functions1663544 54133Node: x86 transactional memory intrinsics1723079 54134Node: Target Format Checks1726299 54135Node: Solaris Format Checks1726731 54136Node: Darwin Format Checks1727157 54137Node: Pragmas1727975 54138Node: ARM Pragmas1728711 54139Node: M32C Pragmas1729314 54140Node: MeP Pragmas1730388 54141Node: RS/6000 and PowerPC Pragmas1732457 54142Node: Darwin Pragmas1733198 54143Node: Solaris Pragmas1734265 54144Node: Symbol-Renaming Pragmas1735426 54145Node: Structure-Packing Pragmas1737040 54146Node: Weak Pragmas1738689 54147Node: Diagnostic Pragmas1739423 54148Node: Visibility Pragmas1742530 54149Node: Push/Pop Macro Pragmas1743215 54150Node: Function Specific Option Pragmas1744187 54151Node: Loop-Specific Pragmas1746032 54152Node: Unnamed Fields1747122 54153Node: Thread-Local1749320 54154Node: C99 Thread-Local Edits1751425 54155Node: C++98 Thread-Local Edits1753437 54156Node: Binary constants1756881 54157Node: C++ Extensions1757552 54158Node: C++ Volatiles1759263 54159Node: Restricted Pointers1761611 54160Node: Vague Linkage1763202 54161Node: C++ Interface1766826 54162Ref: C++ Interface-Footnote-11770619 54163Node: Template Instantiation1770755 54164Node: Bound member functions1777341 54165Node: C++ Attributes1778873 54166Node: Function Multiversioning1783310 54167Node: Namespace Association1785125 54168Node: Type Traits1786505 54169Node: Java Exceptions1792993 54170Node: Deprecated Features1794383 54171Node: Backwards Compatibility1797348 54172Node: Objective-C1798700 54173Node: GNU Objective-C runtime API1799309 54174Node: Modern GNU Objective-C runtime API1800316 54175Node: Traditional GNU Objective-C runtime API1802753 54176Node: Executing code before main1803481 54177Node: What you can and what you cannot do in +load1806223 54178Node: Type encoding1808595 54179Node: Legacy type encoding1813671 54180Node: @encode1814762 54181Node: Method signatures1815307 54182Node: Garbage Collection1817302 54183Node: Constant string objects1819991 54184Node: compatibility_alias1822499 54185Node: Exceptions1823225 54186Node: Synchronization1825936 54187Node: Fast enumeration1827120 54188Node: Using fast enumeration1827432 54189Node: c99-like fast enumeration syntax1828643 54190Node: Fast enumeration details1829346 54191Node: Fast enumeration protocol1831687 54192Node: Messaging with the GNU Objective-C runtime1834839 54193Node: Dynamically registering methods1836210 54194Node: Forwarding hook1837901 54195Node: Compatibility1840941 54196Node: Gcov1847508 54197Node: Gcov Intro1848043 54198Node: Invoking Gcov1850761 54199Node: Gcov and Optimization1865007 54200Node: Gcov Data Files1868007 54201Node: Cross-profiling1869402 54202Node: Gcov-tool1871253 54203Node: Gcov-tool Intro1871676 54204Node: Invoking Gcov-tool1873637 54205Node: Trouble1876185 54206Node: Actual Bugs1877602 54207Node: Interoperation1878049 54208Node: Incompatibilities1884941 54209Node: Fixed Headers1893092 54210Node: Standard Libraries1894755 54211Node: Disappointments1896127 54212Node: C++ Misunderstandings1900485 54213Node: Static Definitions1901296 54214Node: Name lookup1902349 54215Ref: Name lookup-Footnote-11907127 54216Node: Temporaries1907314 54217Node: Copy Assignment1909290 54218Node: Non-bugs1911097 54219Node: Warnings and Errors1921604 54220Node: Bugs1923366 54221Node: Bug Criteria1923833 54222Node: Bug Reporting1926043 54223Node: Service1926275 54224Node: Contributing1927094 54225Node: Funding1927834 54226Node: GNU Project1930323 54227Node: Copying1930969 54228Node: GNU Free Documentation License1968497 54229Node: Contributors1993634 54230Node: Option Index2032402 54231Node: Keyword Index2253577 54232 54233End Tag Table 54234